[scilab-Users] Problem with Floating point and determinant of a matrix
Calixte Denizet
calixte at contrib.scilab.org
Mon Dec 27 23:55:31 CET 2010
Le lundi 27 décembre 2010 à 14:43 -0800, Prof. Dr. Reinaldo Golmia Dante
a écrit :
> Hi Calixte,
>
> Thank you for your comment.
>
> However, I do not still understand your suggestion: "-->
> n=10;T=floor(rand(n,n-1)*200-100);A=[T,sum(T,2)];det(A)"
>
> A does not show as a singular matrix for Scilab. I executed it on Scilab, as
> follows:
>
> -->n=10;T=floor(rand(n,n-1)*200-100);A=[T,sum(T,2)];det(A)
> ans =
>
> - 12228.029
>
>
> What does it mean ? The determinant of A is different to zero, so A is
> nonsingular matrix. Could you be clear in your
> example ?
>
The last column of A is the sum of the previous columns, so the
determinant should be equal to 0 !! So A is not invertible... If you
calculate rcond(A), you'll see that A is very ill-conditioned. Take
care, there is big difference between numerical computations and
symbolic ones.
Cheers,
Calixte
> In regards to the paper, I am going to read it.
>
> Thank you for your attention.
>
> All best,
> Reinaldo.
>
>
>
> ----- Original Message ----
> From: Calixte Denizet <calixte at contrib.scilab.org>
> To: users at lists.scilab.org
> Sent: Mon, December 27, 2010 7:52:05 PM
> Subject: Re: [scilab-Users] Problem with Floating point and determinant of a
> matrix
>
> 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