Inverse van matrix in R

Ik vroeg me af wat je aanbevolen manier is om de inverse van een matrix te berekenen?

De manieren die ik heb gevonden lijken niet bevredigend. Bijvoorbeeld

> c=rbind(c(1, -1/4), c(-1/4, 1))  
> c  
      [,1]  [,2]  
[1,]  1.00 -0.25  
[2,] -0.25  1.00  
> inv(c)  
Error: could not find function "inv"  
> solve(c)    
          [,1]      [,2]  
[1,] 1.0666667 0.2666667  
[2,] 0.2666667 1.0666667  
> solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  
> qr.solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  

Bedankt!


Antwoord 1, autoriteit 100%

solve(c) geeft wel de juiste inverse. Het probleem met uw code is dat u de verkeerde operator gebruikt voor matrixvermenigvuldiging. U moet solve(c) %*% c gebruiken om matrixvermenigvuldiging in R aan te roepen.

R voert element voor element vermenigvuldiging uit wanneer u solve(c) * c aanroept.


Antwoord 2, autoriteit 14%

U kunt de functie ginv() (Moore-Penrose gegeneraliseerde inverse) gebruiken in het MASS pakket


Antwoord 3, autoriteit 6%

Merk op dat als je snelheid belangrijk vindt en je je geen zorgen hoeft te maken over singulariteiten, solve() de voorkeur verdient boven ginv() omdat het veel sneller is, omdat je kunt controleren:

require(MASS)
mat <- matrix(rnorm(1e6),nrow=1e3,ncol=1e3)
t0 <- proc.time()
inv0 <- ginv(mat)
proc.time() - t0 
t1 <- proc.time()
inv1 <- solve(mat)
proc.time() - t1 

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes