目次

5. 連立一次方程式

MATLAB/Scilab/Octaveで連立一次方程式の計算時間を測定します。
リスト5-1にソースコードを示します。 ソースコードは各ソフトウェアで同じです。 (Scilabでは拡張子を.mから.sceに変えてください)
行列は乱数で作成した実数倍精度非対称密行列です。

リスト5-1 連立一次方程式のソースコード (leq.m)


     1	clear all
     2	
     3	n = 10000
     4	
     5	tic
     6	a = rand(n, n);
     7	b = rand(n, 1);
     8	toc % (0)
     9	
    10	tic
    11	x = a \ b;
    12	toc % (1)
    13	norm(a * x - b)
    14	
    15	tic
    16	x = inv(a) * b;
    17	toc % (2)
    18	norm(a * x - b)

表5-1に連立一次方程式の計算時間を示します。
連立一次方程式の解法には、 A\b と inv(A)*b (A^-1*b と同じ)の2通りがありますが、 表5-1の通り、すべての処理系で前者の方が大幅に高速です。 また前者の方が精度もよいことが知られています。 (MATLABの"inv"ヘルプ参考)
計算速度は、MATLAB > Octave > Scilab となっています。
なお、タスクマネージャーによると、CPU使用率はすべてのケースで50~100%となり、 全コアで並列計算されていることがわかります。

表5-1 連立一次方程式の計算時間 (n=10000、実数倍精度非対称密行列)
処理内容MATLABScilabOctave
(0) 行列の作成 0.60秒 0.90秒 0.69秒
(1) x = a \ b 3.65秒 8.68秒 6.63秒
(2) x = inv(a) * b12.82秒125.41秒17.18秒