Problem with Floating point and determinant of a matrix

Prof. Dr. Reinaldo Golmia Dante tiraduvidascefet at yahoo.com
Mon Dec 27 22:15:36 CET 2010


Hi all,

I understand that Scilab stores the real numbers with foating point numbers, 
that is, with limited precision, and the computed value (answer) is not exactly 
equal to 0 (page 23 - manual "Introduction to Scilab").
 
Take at look for those examples:
 
A = [1 2 3; 4 5 6; 7 8 9]
A  =
 
    1.    2.    3.  
    4.    5.    6.  
    7.    8.    9.  
 
-->det(A)
 ans  =
 
    6.661D-16  <---------- it should be 0
 
-->inv(A)
 ans  =
 
 10^15 *
 
  - 4.5035996    9.0071993  - 4.5035996  
    9.0071993  - 18.014399    9.0071993  
  - 4.5035996    9.0071993  - 4.5035996            <---------- it should appear 
an error message because the matrix A is not invertible (or singular).

 
-->det(inv(A))
 ans  =
 
    9.007D+15     <-------------- The determinant of invertible matrix A^(-1) 
does not exist.
 
Other example:

-->B = [1 1; 1 1]
B  =
 
    1.    1.  
    1.    1.  
 
-->det(B)
 ans  =
 
    0.  <-------- it is correct !!
 
-->inv(B)
       !--error 19    <-------- it is correct !!

 
The previously examples show two integer matrices A and B. The determinant of 
matrix A is quite zero, but not,
and this can propagate an error in case the Scilab developer uses that result 
into other future calculations or algorithms.
The determinant of matrix B is equal to 0 and the answer is correct. In case the 
Scilab developer uses that value,
he or she can use the simple statement for testing like to:
 if ( det(matrix) <> 0 ) then
<action 1>                     // The Scilab developer knows that the matrix is 
invertible (or nonsingular)
else
<action 2>                     // The Scilab developer knows that the matrix is 
not invertible (or singular)
end
 
My doubt: "How can I proceed to design any algorithm, which uses matrix, if the 
determinant of 

the matrix could not be zero and, as the same time, that matrix is not 
invertible ?".
How can I manage this uncertainty ?
 
I appreciate to hearing from you some hints to solve this uncertainty.
 
Thank you in advance.
 
All best,
Reinaldo.
 
PS: I am not MATLAB user, but has MATLAB got this limited precision for 
determinants ?


      



More information about the users mailing list