逆行列の計算(ピボット選択有)

逆行列の計算(Gauss-Jordan法)

逆行列をガウスジョルダン(Gauss-Jordan)法でピボット(pivot)選択を行って任意の次数の逆行列を計算手順付きで計算します。
以下の入力フォームに正方行列の要素値を入力し計算ボタンをクリックすると計算します。
正行列の次数は要素の個数から自動判別されます。

行列


入力行列

右側に単位行列を追加

元の行列の右横に同じ次数の対角行列(下表 着色部)を追加します。(6列目~10列目)

行列の操作の概要

元の行列を対角行列になるように計算していくと右側に逆行列が計算されます。
元の行列の次数(縦及び横の要素数)をnmaxと置きます。
行列の各要素を二次元配列 A[j][i]に格納します。行列の横方向が右側の配列の添字、縦方向が左側の配列の添字になります。
なおプログラムでは配列の添字は0から始まるので1を減じた値となります。
以下の計算をk=1~nmaxについて行います。

対角要素であるk行k列の要素A[k][k]を1にするためには要素A[k][k]そのもので割れば1となります。 同じk行の全列A[k][i]に対してk行k列の値A[k][k]で割りその値を元の要素A[k][i]に代入します。
ただし、割る値が0の場合はゼロ除算となります。また値が小さいと誤差が大きくなります。
行を入れ替えても行列の値が変わらないことを利用してj=k~nmaxの間で一番A[j][k]の絶対値が大きい行とk行を入れ替えます。
一番A[j][k]の絶対値が大きい行が0の場合、この行列の逆行列を求めることができないことを意味します。
各列に対してA[k][k]の値が変更される前の値で割る必要があるため割り算前に変数pに保存しています。
p=A[k][k]

以下の計算をi=k~nmaxについて行います。

A[k][i]=A[k][i]/p

k列の対角要素以外を0にするために、k行以外の全行に対して以下の操作をします。
各行に対してA[j][k]の値が変更される前の値で計算する必要があるため割り算前に変数pに保存しています。
以下の計算をj=1~nmax(j≠k)(≠はノットイコール)について行います。

p=A[j][k]

以下の計算をi=k~nmaxについて行います。

A[j][i]=A[j][i]-A[k][i]*p

逆行列