由于奇异矩阵或非方阵的矩阵不存在逆矩阵。但有时我们又希望给这样的矩阵,构造出一个具有类似逆矩阵性质的结果,于是人们便提出了“伪逆”的构想。这个构想的出发点是基于下面这张图,一个变换T(或者一个矩阵A)的值域V可以分解成相互垂直的两个部分,即V = N(A) ⊕ N(A)⊥。一个变换T是可逆的 if and only if T是one-one and onto。而定理2.4告诉我们T是one-one if and only if N(A)={0}。也就是说,如果T是不可逆的,也就代表当我们引入N(A)后会破坏从V到W的一一对应关系。所以很自然的,我们会想到,如果把N(A)从V中剥离,那么剩下的 N(A)⊥到Range(A)就能构成一一对应关系,也就存在逆变换(或逆矩阵)。
我们建立了一个可逆的变换T: N(T)⊥→Range(T),令L=TN(T)⊥,这样L就有逆变换了。基于这样的考量,我们就有了下面这个pseudoinverse的定义。
二、利用SVD计算伪逆
我们要求T的伪逆,就要设法求得N(A)、N(A)⊥、Range(A)和Range(A)⊥。而借由SVD,这些子空间都非常容易得到(这里注意参考http://blog.csdn.net/baimafujinji/article/details/6474273):
(1)Span{uk+1, ..., un}=N(A)
(2)Span{u1, ..., uk}=N(A)⊥
(3)Range(A) = Span{v1, ..., vk}
(4)Range(A)⊥=Span{vk+1, ..., vm}注意在SVD的算子版本中,我们给出的分解形式是
再根据上面伪逆的定义可得(k=r):
而上面这个式子又是一个SVD,(A的SVD是V*AU=∑)所以有
三、一个具体的例子
我们来具体算一个矩阵A的伪逆:
易知,rank(A*A)=2。下面来求矩阵A*A的特征值,于是有
接下来求对应的特征向量,因为
所以可知当λ1=5时,对应的特征向量(注意结果要正交归一化):
同理还有当λ2=1时,对应的特征向量
如此便得到了SVD中需要的U矩阵
为了求出矩阵V,先求W:
于是可知
所以根据公式A的伪逆就是
最终结果的计算可能比较复杂,我们用MATLAB来计算。
>> U = [1/sqrt(2), 1/sqrt(2);1/sqrt(2), -1/sqrt(2)]
U =
0.7071 0.7071
0.7071 -0.7071
>> S = [1/sqrt(5), 0; 0, 1]
S =
0.4472 0
0 1.0000
>> Vs=[sqrt(2)/sqrt(5), 1/sqrt(10), 1/sqrt(10), sqrt(2)/sqrt(5);
0, -1/sqrt(2), 1/sqrt(2),0]
Vs =
0.6325 0.3162 0.3162 0.6325
0 -0.7071 0.7071 0
>> A_pinv = U*S*Vs
A_pinv =
0.2000 -0.4000 0.6000 0.2000
0.2000 0.6000 -0.4000 0.2000
然后我们再用MATLAB里面提供的线程的求矩阵伪逆的函数pinv()来检验一下上面得出的结果。
>> A = [1,1; 0,1;, 1,0; 1,1]
A =
1 1
0 1
1 0
1 1
>> B = pinv(A)
B =
0.2000 -0.4000 0.6000 0.2000
0.2000 0.6000 -0.4000 0.2000
可见我们的计算是正确的。
四、伪逆与最小二乘法
上述定理说明:
1)基于pseudoinverse,最小二乘问题与寻找最小解的问题具有统一的形式。
2)当方程Ax=b无解,即A不可逆时,最佳近似解就是x=A†b。
(本文完)
参考文献:
【1】 S.H. Friedberg, A.J. Insel, L.E Spence, 4th edition, Linear Algebra, Prentice-Hall, 2003
【2】 Richard Hartley, Andrew Zisserman, Multiple View Geometry in Computer Vision
2nd Edition, Cambridge University Press, 2003