Because of its underlying algorithm, I expected that
inversion of a (nonsingular) square matrix should
be faster using backslash operator 'y2 = x\eye(n)'
instead of Octave's builtin 'y1 = inv(x)' function.
Thus I conducted dimension n - depending tests
using random matrices input in order to sched
some light on this issue.
octave-3.0.0.exe:48> n=5; x=randn(n); tic; y1 = inv(x); toc,
tic; y2 = x\eye(n); toc,
max(max(abs(y1-y2)))
Elapsed time is sec.
n inv(x) x\eye(n) Speed Gain Fac max(max(abs(result
difference)))
5 0.05531 0.000258 214 1.1102e-016
10 0.06063 0.000313 194 4.4409e-016
25 0.05705 0.000705 81 6.9944e-015
50 0.05889 0.002197 27 1.2212e-015
100 0.07195 0.01153 6.2 1.8952e-015
150 0.08721 0.03425 2.6 2.2649e-014
200 0.1271 0.06117 2.1 3.9413e-015
300 0.2892 0.1991 1.5 8.5820e-014
400 0.6255 0.609 1.03 8.9484e-014
500 1.176 1.263 0.93 2.2163e-014
600 2.05 2.197 0.93 7.0499e-015
700 3.228 3.458 0.93 2.4092e-014
800 4.855 5.137 0.95 2.2243e-014
900 6.873 7.272 0.95 3.0781e-014
1000 9.506 9.988 0.95 2.8283e-014
I've done this on a relative old laptop
(Windows XP, SP2, Intel III Mobile CPU 933 MHz 512 MB RAM)
so do not wonder about absolute performance times.
>From the the table above it can be seen that the results confirm my
expectations.
Up to about 400x400 sized matrices the speed gain (column 4) can be
enormous.
Consequently replacing 'inv(x)' in existing code by 'x\eye(n)' might be an
option and should be considered.
Unfortunately the maximal absolute difference between the two results
also increases with dimension n. Does anybody know which algorithm
is considered to be the more precise ?