Next: LU分解法 Up: 逆行列の計算 Previous: 逆行列を求めるコマンド

逆行列を用いた連立一次方程式の解法

bn次元ベクトルとするとき、行列方程式

Ax=b (3)

の解は

x=A-1b (4)

で与えられる。したがって、MATLAB、Octave、Scilabで行列方程式を解くための 方法として、前節で示した方法とは別に次のような方法も考えられる。
   > R=inv(A)
   > x=R*b
ここで注意すべきことは、演算子多重定義により
   > x=R*b
という命令においてR*xが行列とベクトルの積として正しく計算 されることである。ソフトウエアはRbが何であるかを 見て、それが行列とベクトルであることを知ると、積が行列と ベクトルの積であるとして実行するのである。

ここで、最初の例題の行列方程式2.1に戻ってみよう。 ソフトウエアを立ち上げ、つぎのコマンドを打ち込む。 するとつぎのような結果を得る。

   > a=[2 3;5 6];
   > b=[3;5];
   > c=inv(a)
   c =
     -2.00000   1.00000
      1.6777   -0.66667
   > x=c*b
   x =
     -1.0000
      1.6667
これは前の結果と一致する。

ここで、逆行列を求めるのは、n3回の浮動小数点数演算が必要であることを 注意しておこう。



計算の手間を考えよう  逆行列を計算して、連立一次方程式を 解くことは、勧められない。 $> A \setminus b$という 命令で解けば逆行列を求めてから解く方法の1/3の計算時間で同じ解を 導くことができるからである。すなわち、できるだけ 少ない手間で同じ解を得る方法を利用すべきである。 計算の手間のことを計算複雑度という。浮動小数点数演算を 用いる数値計算においては、浮動小数点数演算を何回使うと 解けるかによって計算複雑度をはかる。このときの単位をflopsという。 計算複雑度は問題の次元の関数として表す。したがって、n次元 連立一次方程式の解の計算複雑度はnの関数で表す。



s oishi
2000-05-04