¿Por qué la salida de inv () y pinv () no es igual en Matlab y Octave?
He notado que si A es una matriz NxN y tiene la matriz inversa. Pero la salida de la función inv () y pinv () es diferente. - Mi entorno es Win7x64 SP1, Matlab R2012a, Cygwin Octave 3.6.4, FreeMat 4.2
Echa un vistazo a los ejemplos de Octave:
A = rand(3,3)
A =
0.185987 0.192125 0.046346
0.140710 0.351007 0.236889
0.155899 0.107302 0.300623
pinv(A) == inv(A)
ans =
0 0 0
0 0 0
0 0 0
Todo es lo mismoans
resultado ejecutando el mismo comando anterior en Matlab.Y calculoinv(A)*A
oA*inv(A)
, el resultado es una matriz de identidad 3x3 tanto en Octave como en Matlab.El resultado deA*pinv(A)
ypinv(A)*A
Son matriz de identidad 3x3 en Matlab y FreeMat.El resultado deA*pinv(A)
Es la identidad de la matriz 3x3 en octava.El resultado depinv(A)*A
esno Identidad de la matriz 3x3 en octava.No se por queinv(A) != pinv(A)
, He considerado los detalles del elemento en la matriz. Parece ser el problema de precisión flotante que causa este problema.
Los 10 o más dígitos después del punto de punto pueden ser diferentes como esto:
6.65858991579923298331777914427220821380615200000000
elemento eninv(A)(1,1)
en contra
6.65858991579923209513935944414697587490081800000000
elemento enpinv(A)(1,1)