una - sustituir na por 0 en r
Inverso de la matriz en R (4)
En la notación de matriz, hace una gran diferencia el operador " *
" y el operador " %*%
". El primero tiene un elemento de multiplicación por elemento, el segundo es la fórmula correcta para la multiplicación de la matriz. Lo que deberías haber hecho es:
c = rbind(c(1, -1/4), c(-1/4, 1))
solve(c) %*% c
Me preguntaba ¿cuál es tu forma recomendada de calcular el inverso de una matriz?
Las formas que encontré parecen no ser satisfactorias. Por ejemplo,
> 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
¡Gracias!
Puede usar la función ginv () (inversa generalizada de Moore-Penrose) en el paquete MASS
Tenga en cuenta que si le importa la velocidad y no tiene que preocuparse por las singularidades, se debe preferir solve()
a ginv()
porque es mucho más rápido, como puede comprobar:
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
solve(c)
da la inversa correcta. El problema con su código es que está utilizando el operador incorrecto para la multiplicación de la matriz. Debes usar solve(c) %*% c
para invocar la multiplicación de matrices en R.
R realiza la multiplicación elemento por elemento cuando invoca solve(c) * c
.