Почему выходные данные 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)

Ответы на вопрос(3)

Ваш ответ на вопрос