Ax=b | (3) |
x=A-1b | (4) |
> R=inv(A)
> x=R*bここで注意すべきことは、演算子多重定義により
> x=R*bという命令においてR*xが行列とベクトルの積として正しく計算 されることである。ソフトウエアはRとbが何であるかを 見て、それが行列とベクトルであることを知ると、積が行列と ベクトルの積であるとして実行するのである。
ここで、最初の例題の行列方程式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回の浮動小数点数演算が必要であることを 注意しておこう。
計算の手間を考えよう 逆行列を計算して、連立一次方程式を 解くことは、勧められない。 という 命令で解けば逆行列を求めてから解く方法の1/3の計算時間で同じ解を 導くことができるからである。すなわち、できるだけ 少ない手間で同じ解を得る方法を利用すべきである。 計算の手間のことを計算複雑度という。浮動小数点数演算を 用いる数値計算においては、浮動小数点数演算を何回使うと 解けるかによって計算複雑度をはかる。このときの単位をflopsという。 計算複雑度は問題の次元の関数として表す。したがって、n次元 連立一次方程式の解の計算複雑度はnの関数で表す。