help-octave
[Top][All Lists]
Advanced

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

Inverse Matrix Function appears a bit wonky


From: John W. Eaton
Subject: Inverse Matrix Function appears a bit wonky
Date: Wed, 3 Nov 2004 16:07:03 -0500

On  3-Nov-2004, Robert A. Macy <address@hidden> wrote:

| I tried a simple test of the inverse function using a "made
| up" matrix...
| 
| testmatrix =
|  1 2 3 4
|  2 2 3 3
|  1 2 1 2
|  3 2 2 1
| 
| forgive the wraparound results...
| testmatrixinv = inverse(testmatrix) =
|  -3.37769972052787e+15 4.5035996273705e+15
| 1.12589990684262e+15 -2.25179981368525e+15
| 
|  3.37769972052787e+15 -4.5035996273705e+15
| -1.12589990684262e+15 2.25179981368525e+15
| 
|  3.37769972052787e+15 -4.5035996273705e+15
| -1.12589990684262e+15 2.25179981368525e+15
| 
|  -3.37769972052787e+15 4.5035996273705e+15
| 1.12589990684262e+15 -2.25179981368525e+15
| 
| inverse function merrily calculated the above inverse
| matrix with no special notes.  
| 
| but when I multiply the two, the results are...
| testmatrixinv*testmatrix =
|  1 0 1 -1
|  0 1 0 1.5
|  -1 -0.5 1 1
|  1 0.5 0.5 0.25
|  
| which is definitely NOT the identity matrix
| 
| the testmatrix was just an arbitrary matrix to test the
| process.  It is very disconcerting that the first,
| arbitrary test, fails so miserably.  What happened?  
| 
| What do I do to make certain octave doesn't do these
| erroneous inverse calculations the next time I go to use
| the inverse function?

Your test matrix is singular.  The inverse doesn't exist.  Octave
should be warning you about that.  Here is what I see with Octave
2.1.57 and 2.1.60, and probably almost every other version of Octave
that *I* have ever used:

  octave:1> x = [1 2 3 4
  >  2 2 3 3
  >  1 2 1 2
  >  3 2 2 1];
  octave:2> rank (x)
  ans = 3
  octave:3> inverse (x)
  warning: inverse: matrix singular to machine precision, rcond = 0
  ans =

    3.00000  2.00000  2.00000  1.00000
    0.33333  1.33333  0.33333  1.66667
    0.33333  1.00000  2.00000  2.00000
    0.66667  0.50000  0.75000  0.00000

The above result is from a version of Octave linked with ATLAS for the
linear algebra routines.

What version of Octave are you using?  What LAPACK+BLAS combination
does it use?  If there is no warning on your system, I suspect your
version of Octave is linked with some version of LAPACK that does not
return the proper error code when a singular matrix is detected during
the factorizaion leading to the computation of the inverse.

jwe



-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.octave.org
How to fund new projects:  http://www.octave.org/funding.html
Subscription information:  http://www.octave.org/archive.html
-------------------------------------------------------------



reply via email to

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