逆行列(行列の除算)
行列の除算はそれ自体としては定義されず、等価な演算である逆行列との乗算として
定義される。(逆行列は必ずしも存在するとは限らない。)
問題 行列Aの逆行列を求めなさい。(P.46 問題2)
10 ' Program MATinv
20 ' 行列 A の逆行列を求め印刷する
30 ' 行列の各要素を以下にデータ文として記入する。
40 '
50 N=3
60 DIM A(30,30)
70 FOR I=1 TO N
80 FOR J=1 TO N
90 READ A(I,J)
100 NEXT J,I
110 GOSUB 180
120 FOR I=1 TO N
130 FOR J= 1 TO N
140 PRINT USING "####.### ";A(I,J);
150 NEXT J : PRINT
160 NEXT I
170 END
180 ' サブルーチン逆行列
190 FOR I=1 TO N
200 X = A(I,I)
210 A(I,I) = 1
220 FOR J=1 TO N
230 A(I,J) = A(I,J)/X
240 NEXT J
250 FOR K=1 TO N
260 IF K=I THEN GOTO 320
270 X = A(K,I)
280 A(K,I) = 0
290 FOR L=1 TO N
300 A(K,L) = A(K,L) - X*A(I,L)
310 NEXT L
320 NEXT K
330 NEXT I
340 RETURN
matinv.bas
問題 AA-1を求めなさい。AA-1= Iは成立しているか。
40 DATA 3,0,3, 4,-1,-1, 1,2,5
解答
逆行列を求めるための随伴行列法は次の式による。
ヒント 丸め誤差を防ぐには、プログラムMATINVで出力される逆行列の数値の有効精度を上げておくことが必要である。
140 PRINT USING "####.### ";A(I,J);
の小数点以下の表示桁数を増やして、###.####### のようにする。
行列の積を求めるプログラムMATMULTに上の問題のA, A-1を与えて計算しなさい。
|
|
c |
|
|
-f |
= 0 |
2a |
|
|
-d |
|
|
= 0 |
7a |
|
|
|
-e |
|
= 0 |
|
b |
|
|
-2e |
|
= 0 |
2a |
-b |
-2c |
+3d |
|
+3f |
= 0 |
a |
|
|
|
|
|
= 1 |
Feに関して: c = f
Crに関して: 2a = d
Oに関して: 7a = e
Hに関して: b = 2e
電荷の平衡から: -2a + b +2c = 3d + 3f
仮に係数aを1とする: a = 1
プログラムmatinv.basの該当する行を置き換えて実行しなさい。
a = 1 の式を第1行に移動したので、逆行列の第1列がそのまま解となる。
解答 解くべき方程式はつぎのようになる
となる。この問題の場合は定数項ベクトルの非零の項が一つしかないため、逆行列から
解は直接求められることになる。
プログラムMATINVを利用して係数の逆行列を求めるために、対角項が零でなくなるように
並べ替えると、データとして与えるべき係数行列は次のようになる。
40 DATA 1,0,0,0,0,0
41 DATA 0,1,0,0,-2,0
42 DATA 0,0,1,0,0,-1
43 DATA 2,0,0,-1,0,0
44 DATA 7,0,0,0,-1,0
45 DATA -2,1,2,-3,0,-3
50 N=6
問題 係数の定まっていない酸化還元方程式の係数を定めなさい。(p.61 コンピュータプロジェクト
4-4)
連立方程式を
とあらわすと、
から、