这个问题已经很老了,但无论如何我都会回答它,因为它在一些谷歌搜索中几乎出现在首位。
我将在我的示例中使用返回 N×N 幻方的 magic(N) 函数。
我将创建一个 3x3 幻方 M3,取伪逆 PI_M3 并将它们相乘:
prompt_$ M3 = 魔法(3),PI_M3 = pinv(M3),M3 * PI_M3
M3 =
8 1 6
3 5 7
4 9 2
PI_M3 =
0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778
答案=
1.0000e+00 -1.2212e-14 6.3283e-15
5.5511e-17 1.0000e+00 -2.2204e-16
-5.9952e-15 1.2268e-14 1.0000e+00
如您所见,答案是除一些舍入误差外的单位矩阵。我将使用 4x4 魔方重复该操作:
prompt_$ M4 = magic(4) , PI_M4 = pinv(M4) , M4 * PI_M4
M4 =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
PI_M4 =
0.1011029 -0.0738971 -0.0613971 0.0636029
-0.0363971 0.0386029 0.0261029 0.0011029
0.0136029 -0.0113971 -0.0238971 0.0511029
-0.0488971 0.0761029 0.0886029 -0.0863971
答案=
0.950000 -0.150000 0.150000 0.050000
-0.150000 0.550000 0.450000 0.150000
0.150000 0.450000 0.550000 -0.150000
0.050000 0.150000 -0.150000 0.950000
结果不是单位矩阵,这意味着 4x4 幻方没有逆矩阵。我可以通过尝试 Moore-Penrose 伪逆的规则之一来验证这一点:
prompt_$ M4 * PI_M4 * M4
答案=
16.00000 2.00000 3.00000 13.00000
5.00000 11.00000 10.00000 8.00000
9.00000 7.00000 6.00000 12.00000
4.00000 14.00000 15.00000 1.00000
满足规则 A*B*A = A。这表明 pinv 在逆矩阵可用时返回逆矩阵,在逆矩阵不可用时返回伪逆矩阵。这就是为什么在某些情况下您会得到很小的差异,只是一些舍入误差,而在其他情况下您会得到更大的差异。为了展示它,我将得到两个魔象限的倒数并从伪逆中减去它们:
prompt_$ I_M3 = inv(M3) , I_M4 = inv(M4) , DIFF_M3 = PI_M3 - I_M3, DIFF_M4 = PI_M4 - I_M4
I_M3 =
0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778
警告:逆:矩阵奇异到机器精度,rcond = 1.30614e-17
I_M4 =
9.3825e+13 2.8147e+14 -2.8147e+14 -9.3825e+13
2.8147e+14 8.4442e+14 -8.4442e+14 -2.8147e+14
-2.8147e+14 -8.4442e+14 8.4442e+14 2.8147e+14
-9.3825e+13 -2.8147e+14 2.8147e+14 9.3825e+13
DIFF_M3 =
4.7184e-16 -1.0270e-15 5.5511e-16
-9.9226e-16 2.0470e-15 -1.0825e-15
5.2042e-16 -1.0270e-15 4.9960e-16
DIFF_M4 =
-9.3825e+13 -2.8147e+14 2.8147e+14 9.3825e+13
-2.8147e+14 -8.4442e+14 8.4442e+14 2.8147e+14
2.8147e+14 8.4442e+14 -8.4442e+14 -2.8147e+14
9.3825e+13 2.8147e+14 -2.8147e+14 -9.3825e+13