From: David Winsemius <dwinsemius_at_comcast.net>

Date: Wed, 16 Mar 2011 16:11:54 -0400

Date: Wed, 16 Mar 2011 16:11:54 -0400

On Mar 16, 2011, at 1:32 PM, Berend Hasselman wrote:

*>
*

> 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.
*

Actually it can if you relax the default tolerance settings:

[,1] [,2]

[1,] 1e-20 -1e-20

[2,] -1e-21 1e-03

> a%*%solve(a, tol=1e-21)

[,1] [,2]

[1,] 1 0

[2,] 0 1

(I posted a similar reply to the OP soon after his complaint hit the list, but the system seems to have eaten it.)

-- David Winsemius, MD West Hartford, CTReceived on Wed 16 Mar 2011 - 20:14:34 GMT

>

> (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.>> ______________________________________________> R-help_at_r-project.org mailing list>https://stat.ethz.ch/mailman/listinfo/r-help> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD West Hartford, CT ______________________________________________ R-help_at_r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Wed 16 Mar 2011 - 21:10:23 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*