octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Backslash inversion vs inv-function


From: Quentin Spencer
Subject: Re: Backslash inversion vs inv-function
Date: Fri, 18 Jan 2008 13:30:06 -0600
User-agent: Thunderbird 2.0.0.9 (X11/20071115)

Rolf Fabian wrote:
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 ?

Generally, the "\" algorithm is considered more numerically stable. In fact, I was always told in school that you should avoid inverting a matrix directly for this reason. In my experience with signal processing applications, I don't think I've ever run into an application of a matrix inverse that couldn't be avoided using a linear solver by posing the problem the right way. However, it could be justifiable in some situations if an inverse matrix is needed repeatedly for multiple subsequent calculations.


Quentin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]