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秒 |