Thanks for the explanation.

I'm taking a class (in grad school these days) on advanced derivatives
(financial, not calculus).  One of the valuation strategies involves
building two matrices and then solving.  This matrix is for the
particular group of call options I selected based on other criteria.  It
is strange that all of the other ones I've tried will solve, but this
one won't   Perhaps it is a function of my OS or R version.  (I'm using
32bit R on a Mac. ).

Thanks!

-N


On 11/20/10 9:24 PM, bill.venab...@csiro.au wrote:
> What you show below is only a representation of the matrix to 7dp.  If you 
> look at that, though, the condition number is suspiciously large (i.e. the 
> matrix is very ill-conditioned):
>
>> txt <- textConnection("
> +   0.99252358 0.93715047 0.7540535 0.4579895
> +   0.01607797 0.09616267 0.2452471 0.3088614
> +   0.09772828 0.58451468 1.4907090 1.8773815
> +  -0.01000000 0.00000000 0.0900000 0.1700000
> + ")
>> mat <- matrix(scan(txt, quiet = TRUE), ncol = 4, byrow = TRUE)
>> close(txt)
>>
>> with(svd(mat), d[1]/d[4])
> [1] 82473793
>
> With this representation, though, the matrix does seem to allow inversion on 
> a windows 32 bit machine:
>
>> solve(mat)
>            [,1]      [,2]     [,3]        [,4]
> [1,]  1.4081192  -7826819  1287643  21.5115344
> [2,] -0.3987761  18796863 -3092403 -25.7757002
> [3,] -0.1208272 -18836093  3098860  -0.9159397
> [4,]  0.1467979   9511648 -1564829   7.6326466
> and horrible as it is (look closely at columns 2 and 3) it does check out 
> pretty well:
>
>> mat %*% solve(mat)
>               [,1]          [,2]          [,3]          [,4]
> [1,]  1.000000e+00 -3.060450e-10  1.108447e-10 -1.025872e-15
> [2,]  3.571091e-18  1.000000e+00 -5.269385e-11 -1.840975e-16
> [3,]  8.201989e-17  2.559318e-09  1.000000e+00 -1.284563e-15
> [4,] -3.203479e-18 -8.867573e-11  1.813305e-11  1.000000e+00
> but a generalized inverse (with default tolerances) is very different
>
>> library(MASS)
>> ginv(mat)
>             [,1]       [,2]       [,3]      [,4]
> [1,]  1.27299552 -0.2800302 -1.7022000  16.38665
> [2,] -0.07426349  0.1804989  1.0971974 -13.46780
> [3,] -0.44601712  0.2273789  1.3821521 -13.24953
> [4,]  0.31100880 -0.1368457 -0.8318576  13.86073
> which emphasises the delicacy of dealing with an ill-conditioned matrix.  
> Incidently this also checks out fairly well according to the definition of a 
> ginverse:
>
>> range(mat - mat %*% ginv(mat) %*% mat)
> [1] -2.132894e-08  2.128452e-08
> When dealing with numerical matrices you have to be prepared for the 
> unexpected.
>
> Bill Venables.
>  
>
> -----Original Message-----
> From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
> Behalf Of Noah Silverman
> Sent: Sunday, 21 November 2010 2:56 PM
> To: r-help@r-project.org
> Subject: [R] Can't invert matrix
>
> Hi,
>
> I'm trying to use the solve() function in R to invert a matrix.  I get
> the following error, "Lapack routine dgesv: system is exactly singular"
>
> However, My matrix doesn't appear to be singular. 
>
>             [,1]       [,2]      [,3]      [,4]
> [1,]  0.99252358 0.93715047 0.7540535 0.4579895
> [2,]  0.01607797 0.09616267 0.2452471 0.3088614
> [3,]  0.09772828 0.58451468 1.4907090 1.8773815
> [4,] -0.01000000 0.00000000 0.0900000 0.1700000
>
>
> Can anyone help me understand what is happening here?
>
> Thanks!
>
> -N
>
> ______________________________________________
> R-help@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.

______________________________________________
R-help@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.

Reply via email to