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%となり、
全コアで並列計算されていることがわかります。
処理内容 | MATLAB | Scilab | Octave |
---|---|---|---|
(0) 行列の作成 | 0.60秒 | 0.90秒 | 0.69秒 |
(1) x = a \ b | 3.65秒 | 8.68秒 | 6.63秒 |
(2) x = inv(a) * b | 12.82秒 | 125.41秒 | 17.18秒 |