[R] Singularity problem

Berend Hasselman bhh at xs4all.nl
Wed Mar 16 18:32:51 CET 2011


Peter Langfelder wrote:
> 
> On Wed, Mar 16, 2011 at 8:28 AM, Feng Li <m at feng.li> wrote:
>> Dear R,
>>
>> If I have remembered correctly, a square matrix is singular if and only
>> if
>> its determinant is zero. I am a bit confused by the following code error.
>> Can someone give me a hint?
>>
>>> a <- matrix(c(1e20,1e2,1e3,1e3),2)
>>> det(a)
>> [1] 1e+23
>>> solve(a)
>> Error in solve.default(a) :
>>  system is computationally singular: reciprocal condition number = 1e-17
>>
> 
> You are right, a matrix is mathematically singular iff its determinant
> is zero. However, this condition is useless in practice since in
> practice one cares about the matrix being "computationally" singular,
> i.e. so close to singular that it cannot be inverted using the
> standard precision of real numbers. And that's what your matrix is
> (and the error message you got says so).
> 
> You can write your matrix as
> 
> a = 1e20 * matrix (c(1, 1e-18, 1e-17, 1e-17), 2, 2)
> 
> Compared to the first element, all of the other elements are nearly
> zero, so the matrix is numerically nearly singular even though the
> determinant is 1e23. A better measure of how numerically unstable the
> inversion of a matrix is is the condition number which IIRC is
> something like the largest eigenvalue divided by the smallest
> eigenvalue.
> 

svd(a) indicates the problem.

largest singular value / smallest singular value=1e17  (condition number)
--> reciprocal condition number=1e-17
and the standard solve can't handle that.

(pivoted) QR decomposition does help. And so does SVD.

Berend

--
View this message in context: http://r.789695.n4.nabble.com/Singularity-problem-tp3382093p3382465.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list