vacio una transpuesta sustituir studio por operaciones matriz matrices listas infinito entre data crear columnas r matrix-inverse

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 .