Почему выходные данные inv () и pinv () не равны в Matlab и Octave?
Я заметил, что если 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
являются единичными матрицами 3х3 в Matlab и FreeMat.РезультатA*pinv(A)
это тождественная матрица 3х3 в октаве.Результатpinv(A)*A
являетсяне тождественная матрица 3х3 в октаве.Я нене знаю причину почемуinv(A) != pinv(A)
Я рассмотрел детали элемента в матрице. Кажется, это проблема плавающей точности, которая вызывает эту проблему.
10+ цифр после точки могут отличаться, как это:
6.65858991579923298331777914427220821380615200000000
элемент вinv(A)(1,1)
6.65858991579923209513935944414697587490081800000000
элемент вpinv(A)(1,1)