¿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)

Respuestas a la pregunta(3)

Su respuesta a la pregunta