Je me demandais quelle est votre méthode recommandée pour calculer l'inverse d'une matrice?
Les moyens que j'ai trouvés ne me semblent pas satisfaisants. Par exemple,
> 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
Merci!
r
matrix-inverse
Tim
la source
la source
c
).Réponses:
solve(c)
donne l'inverse correct. Le problème avec votre code est que vous utilisez le mauvais opérateur pour la multiplication matricielle. Vous devez utilisersolve(c) %*% c
pour invoquer la multiplication matricielle dans R.R effectue une multiplication élément par élément lorsque vous appelez
solve(c) * c
.la source
Vous pouvez utiliser la fonction ginv () (inverse généralisé de Moore-Penrose) dans le package MASS
la source
Notez que si vous vous souciez de la vitesse et que vous n'avez pas à vous soucier des singularités,
solve()
il faut préférerginv()
car c'est beaucoup plus rapide, comme vous pouvez le vérifier: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
la source