Я заметил, что если A является матрицей NxN и имеет обратную матрицу. Но то, что вывод функции inv() и pinv() отличается. - Моя среда - Win7x64 SP1, Matlab R2012a, Cygwin Octave 3.6.4, FreeMat 4.2
Взгляните на примеры из 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
- Это все равно
ans
результат, выполнив ту же самую команду в Matlab.
- И я вычисляю
inv(A)*A
илиA*inv(A)
, результатом является матрица тождества 3x3 как в Octave, так и в Matlab. - Результатом
A*pinv(A)
иpinv(A)*A
являются матрица тождества 3x3 в Matlab и FreeMat. - Результатом
A*pinv(A)
является тождественная матрица 3x3 в Octave. - Результатом
pinv(A)*A
является не тождественная матрица 3x3 в Octave.
Я не знаю причины, почему inv(A) != pinv(A)
, я рассмотрел детали элемента в матрице. Это проблема с плавающей точностью, которая вызывает эту проблему.
10-значные цифры после точки точки могут быть разными:
-
6.65858991579923298331777914427220821380615200000000
элементinv(A)(1,1)
против -
6.65858991579923209513935944414697587490081800000000
элемент вpinv(A)(1,1)