当矩阵的行列不相等,矩阵不是方阵时,求解矩阵的逆,可以使用伪逆的方法。
求解伪逆有两种方式。本文以mxn(m<n)的矩阵求解为例。
方法1:右伪逆
对于一个矩阵 和矩阵,如何矩阵之间满足:
则称B是A的广义逆矩阵。在A满秩的情况下,A的右伪逆为:
方法2:SVD求解
通过对矩阵进行奇异值分解,来求解伪逆。
可以得到矩阵J的伪逆矩阵表达式为:
案例:
J =
-0.1510 -0.3567 -0.0904 0.0210 -0.1578 0.0014 -0.0089
-1.0735 -0.0000 -0.0000 0.2260 -0.0290 0.1098 0.0007
-0.0000 -1.0735 -0.9870 -0.1501 -0.5614 0.0005 -0.1308
-0.0000 0.0000 0.0000 -0.9904 -0.0075 -0.9964 -0.0125
-0.0000 -1.0000 -1.0000 -0.0000 -0.9985 0.0120 -0.9999
1.0000 0.0000 0.0000 -0.1383 0.0538 0.0842 -0.0048
JinvT = J'*inv(J*J')
JinvT =
0.0027 -1.8198 -0.0082 -0.2810 0.0078 -0.9532
-3.5804 -0.9171 0.2223 -0.1697 0.1353 -1.5253
4.3550 1.1383 -1.6035 0.3121 0.1987 1.8798
-0.1698 -7.5687 0.0252 -1.5649 -0.0297 -8.1506
-0.7617 2.3628 0.3705 0.2948 -0.3770 2.4215
0.1746 7.5366 -0.0405 0.5550 0.0443 8.1170
-0.0119 -2.4902 1.0109 -0.4302 -0.9570 -2.6751
[U,S,V] = svd(J)
U =
0.1364 -0.0861 0.0532 -0.2108 -0.9603 -0.0676
0.0089 -0.6416 0.3423 -0.0014 0.1256 -0.6748
0.6017 0.0429 0.0240 -0.7574 0.2473 0.0268
0.0218 0.5441 0.8302 0.0685 -0.0078 -0.0974
0.7865 -0.0161 -0.0623 0.6137 -0.0242 -0.0116
-0.0142 0.5319 -0.4315 -0.0260 -0.0166 -0.7278
S =
2.4921 0 0 0 0 0 0
0 1.5599 0 0 0 0 0
0 0 1.3460 0 0 0 0
0 0 0 0.6268 0 0 0
0 0 0 0 0.1725 0 0
0 0 0 0 0 0.0591 0
V =
-0.0178 0.7908 -0.5996 0.0116 -0.0371 0.1151 0.0001
-0.5943 0.0005 0.0130 0.4380 0.5867 0.1177 0.3109
-0.5589 -0.0118 0.0251 0.2439 -0.7718 -0.1480 0.0994
-0.0422 -0.4908 -0.5109 0.0714 -0.1091 0.6617 -0.2034
-0.4598 0.0312 0.0007 -0.2491 0.1874 -0.1961 -0.8075
-0.0048 -0.3642 -0.6141 -0.1019 0.1084 -0.6532 0.2033
-0.3477 0.0009 0.0376 -0.8191 0.0034 0.2190 0.3984
SS'
ans =
0.4013 0 0 0 0 0
0 0.6411 0 0 0 0
0 0 0.7430 0 0 0
0 0 0 1.5954 0 0
0 0 0 0 5.7974 0
0 0 0 0 0 16.9323
0 0 0 0 0 0
>> JinvSVD = V*SS'*U'
JinvSVD =
0.0027 -1.8198 -0.0082 -0.2810 0.0078 -0.9531
-3.5804 -0.9171 0.2223 -0.1697 0.1353 -1.5253
4.3550 1.1383 -1.6035 0.3121 0.1986 1.8798
-0.1698 -7.5686 0.0252 -1.5649 -0.0297 -8.1506
-0.7617 2.3628 0.3705 0.2948 -0.3771 2.4215
0.1746 7.5366 -0.0405 0.5550 0.0443 8.1169
-0.0119 -2.4902 1.0109 -0.4302 -0.9571 -2.6750
验证
J*JinvT
ans =
1.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000
-0.0000 1.0000 0.0000 -0.0000 -0.0000 -0.0000
0.0000 0.0000 1.0000 0.0000 -0.0000 0.0000
0.0000 0.0000 -0.0000 1.0000 0.0000 0.0000
0.0000 0.0000 -0.0000 0.0000 1.0000 0.0000
0.0000 0.0000 -0.0000 -0.0000 0.0000 1.0000
>> J*JinvSVD
ans =
1.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000
0.0000 1.0000 -0.0000 -0.0000 -0.0000 -0.0000
0.0000 -0.0000 1.0000 0.0000 0.0000 0.0000
-0.0000 -0.0000 0.0000 1.0001 -0.0000 -0.0000
0.0000 -0.0000 0.0000 -0.0000 1.0001 -0.0000
-0.0000 -0.0000 0.0000 -0.0000 -0.0000 1.0000
优缺点对比:
矩阵伪逆(SVD)和右伪逆都是用于求解不可逆矩阵的逆运算的方法,它们各有优缺点:
矩阵伪逆(SVD)的优缺点
优点:
- 可以求解任意矩阵(非方阵、奇异矩阵)的伪逆
- 计算精度高,能很好地近似原矩阵
缺点:
- 计算复杂度较高,需要进行奇异值分解(SVD)
- 对噪声数据敏感,可能放大噪声影响
右伪逆的优缺点
优点:
- 只需矩阵行满秩,计算简单
- 对噪声数据不太敏感
缺点:
- 只适用于行满秩矩阵,列不满秩时无法使用
- 近似精度较差,可能无法很好地逼近原矩阵
综上所述,矩阵伪逆(SVD)适用范围更广,精度更高,但计算复杂;而右伪逆只适用于行满秩矩阵,但计算简单,对噪声较为鲁棒。需根据具体问题的要求来权衡选择。