[scilab-Users] Problem with Floating point and determinant of a matrix

Calixte Denizet calixte at contrib.scilab.org
Mon Dec 27 22:52:05 CET 2010


Hi Reinaldo,

Try that:
--> n=10;T=floor(rand(n,n-1)*200-100);A=[T,sum(T,2)];det(A)

A is built to be singular...

Have a look at this article, it could interested you:
http://www.eng.nus.edu.sg/civil/REC2010/documents/papers/038.pdf

Calixte

Le lundi 27 décembre 2010 à 13:15 -0800, Prof. Dr. Reinaldo Golmia Dante
a écrit :
> 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