我注意到如果A是一个NxN矩阵,且它有逆矩阵。但是inv()和pinv()函数的输出结果不同。
以下是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
- 在Matlab中运行相同的命令,
ans
结果是相同的。
- 当我计算
inv(A)*A
或A*inv(A)
时,在Octave和Matlab中都得到了3x3单位矩阵的结果。 - 在Matlab和FreeMat中,
A*pinv(A)
和pinv(A)*A
的结果都是3x3单位矩阵。 - 在Octave中,
A*pinv(A)
的结果是3x3单位矩阵。 - 在Octave中,
pinv(A)*A
的结果不是3x3单位矩阵。
我不知道为什么inv(A) != pinv(A)
,我考虑了矩阵元素的细节。这似乎是浮点精度问题造成的问题。
小数点后的10+位数字可能会有所不同,如下所示:
inv(A)(1,1)
中的元素为6.65858991579923298331777914427220821380615200000000
pinv(A)(1,1)
中的元素为6.65858991579923209513935944414697587490081800000000
inv
来解决x = A^-1*b
),但在我看来这不是重复的。 - Stewie Griffin