Moore-Penrose伪逆(Moore-Penrose广义逆)
对于非方矩阵而言,其逆矩阵没有定义。假设在下面的问题中,我们希望通过矩阵A的左逆B来求解线性方程:
A x = y Ax=y Ax=y
等式两边左乘 A − 1 A^{-1} A−1后,我们得到:
x = A − 1 y x=A^{-1}y x=A−1y
是否存在一个唯一的映射,将A映射到B,取决于问题的形式。
如果矩阵A的行数大于列数,那么上述方程可能没有解;如果矩阵A的行数小于列数,那么上述矩阵可能有很多解。
Moore-Penrose伪逆使我们能够解决这类问题。矩阵A的伪逆定义为:
A + = lim x → 0 ( A T A + x I ) − 1 A T A^{+}=\lim_{x \to 0}(A^{T}A+xI)^{-1}A^{T} A+=x→0lim(ATA+xI)−1AT
但是在实际中计算伪逆是使用下面的式子:
A + = V D + U H A^{+}=VD^{+}U^{H} A+=VD+UH
其中 V 、 D + 、 U H V、D^{+}、U^{H} V、D+、UH都是矩阵A按照奇异值分解后得到的。
- 矩阵右上角
A
H
A^{H}
AH的
H
H
H是什么呢?
这是一种转置,但是能应用更广泛的范围,被称作共轭转置。当出现复数的时候,才会体现它的不同,在为实数的时候和普通转置的操作是一样的。下面我们举一个共轭转置的例子。
A = [ 1 + i 3 2 − 3 i 6 ] A=\left[ \begin{matrix} 1+i & 3 \\ 2-3i & 6\\ \end{matrix} \right] A=[1+i2−3i36]
则 A A A的共轭转置 A H A^{H} AH为:
A H = [ 1 − i 2 + 3 i 3 6 ] A^{H}=\left[ \begin{matrix} 1-i & 2+3i\\ 3 & 6\\ \end{matrix} \right] AH=[1−i32+3i6]
倘若学了矩阵论,那肯定会想起广义逆,没错,伪逆就是广义逆的一种,从它的定义以及描述来看,不能说毫无关系,只能说是一模一样。
如何求解Moore-Penrose伪逆(Moore-Penrose广义逆)
要想求解伪逆,我们要经过以下两步
-
- 求解矩阵的奇异值分解
-
- 按照求解的奇异值分别进行变换
-
- 按照伪逆公式求解公式求解该矩阵的伪逆
我们通过一个小例子进行引入:
求解矩阵 A = [ 0 0 0 0 0 0 1 0 0 0 1 0 ] A=\left[\begin{matrix} 0 & 0 & 0\\ 0 & 0 & 0\\ 1 & 0 & 0\\ 0 & 1 & 0\\ \end{matrix}\right] A=⎣⎢⎢⎡001000010000⎦⎥⎥⎤的伪逆 A + A^{+} A+。
我们通过这个很简单的例题来引入。
1.矩阵的奇异值分解
首先,我们先进行矩阵 A A A的奇异值分解。
奇异值分解的公式是怎样的呢?它的各个元素和我们的最终目的求解矩阵的伪逆很像,这也是为什么我们要先求解奇异值分解。奇异值分解公式为:
A = U D V H A=UDV^{H} A=UDVH
其实在矩阵论这本书上是 A = U Σ V H A=U\Sigma V^{H} A=UΣVH,但是在我查找资料,推测其定义应该是一样的,所以在这里以伪逆的定义形式来命名。(当然也有可能是我出错了,倘若如此,希望指正,谢谢!)
由之前的讲解我们可以得出:
A
H
=
[
0
0
1
0
0
0
0
1
0
0
0
0
]
A^{H}=\left[\begin{matrix} 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ 0 & 0 & 0 & 0\\ \end{matrix}\right]
AH=⎣⎡000000100010⎦⎤
则有
A
H
A
=
[
1
0
0
0
1
0
0
0
0
]
A^{H}A=\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \\ \end{matrix}\right]
AHA=⎣⎡100010000⎦⎤
接下来求解
A
H
A
A^{H}A
AHA的特征值,通过下面的公式求解:
∣
λ
I
−
A
H
A
∣
=
(
λ
−
1
)
2
λ
|\lambda I-A^{H}A|=(\lambda-1)^{2}\lambda
∣λI−AHA∣=(λ−1)2λ
求解可得特征值分别为:
λ
1
=
1
,
λ
2
=
1
,
λ
3
=
0
\lambda_{1}=1,\lambda_{2}=1,\lambda_{3}=0
λ1=1,λ2=1,λ3=0
- 第一步,根据特征值求解 D D D
由特征值我们可以求解出
D
D
D,那么
D
D
D的求解公式是咋样的呢?
在这里我给出求解不为零部分的通式:
Δ
=
[
σ
1
σ
2
⋱
σ
n
]
\Delta=\left[\begin{matrix} \sigma_{1} & & &\\ & \sigma_{2} & &\\ & & \ddots &\\ & & & & \sigma_{n}\\ \end{matrix}\right]
Δ=⎣⎢⎢⎡σ1σ2⋱σn⎦⎥⎥⎤
其中的参数
σ
\sigma
σ与
λ
\lambda
λ关系如下(只求不为零的):
σ
i
=
λ
i
\sigma_{i}=\sqrt{\lambda_{i}}
σi=λi
而在该题中
D
D
D应该为多少呢?维度是怎样的呢?我们需要根据
D
D
D的左右矩阵来判断,也就是必须满足矩阵的运算规则。所以它的
Δ
=
[
1
0
0
1
]
\Delta=\left[\begin{matrix} 1 & 0 \\ 0 & 1 \\ \end{matrix}\right]
Δ=[1001]
而
D
D
D的通式为:
D
=
[
Δ
0
0
0
]
D=\left[\begin{matrix} \Delta & 0 \\ 0 & 0 \\ \end{matrix}\right]
D=[Δ000]
在
D
D
D中,
0
0
0表示的不是单个0,而是
0
0
0矩阵,具体大小,视左右矩阵而论。
- 第二步,求解变量 V V V
要想求解
V
V
V,首先需要求解出
A
H
A
A^{H}A
AHA特征值对应的特征向量。根据特征向量求解公式:
(
λ
i
I
−
A
)
x
=
0
(\lambda_{i}I-A)x=0
(λiI−A)x=0
注意,上面公式是指 λ i \lambda_{i} λi为 A A A的特征值,而在本题中, λ i \lambda_{i} λi是 A H A A^{H}A AHA的特征值,所以在计算时应该是:
( λ i I − A H A ) x = 0 (\lambda_{i}I-A^{H}A)x=0 (λiI−AHA)x=0
求解对应的基础解系选取一个简单的作为特征向量,求解的各特征值对应的特征向量为: α 1 = ( 1 , 0 , 0 ) T , α 2 = ( 0 , 1 , 0 ) T , α 3 = ( 0 , 0 , 1 ) T \alpha_{1}=(1,0,0)^T,\alpha_2=(0,1,0)^T,\alpha_3=(0,0,1)^T α1=(1,0,0)T,α2=(0,1,0)T,α3=(0,0,1)T,然后需要将得到的特征向量进行标准正交化,这里将标准正交化后的结果用 v 1 , v 2 , v 3 v_1,v_2,v_3 v1,v2,v3表示,其实对于当前例子我们可以看出求得的特征向量标准正交化后也是一样的,也就是 v 1 = ( 1 , 0 , 0 ) T , v 2 = ( 0 , 1 , 0 ) T , v 3 = ( 0 , 0 , 1 ) T v_{1}=(1,0,0)^T,v_2=(0,1,0)^T,v_3=(0,0,1)^T v1=(1,0,0)T,v2=(0,1,0)T,v3=(0,0,1)T。
V
V
V的求解公式如下:
V
=
(
v
1
,
v
2
,
⋯
,
v
n
)
V=(v_1,v_2,\cdots,v_n)
V=(v1,v2,⋯,vn)
所以, V = ( v 1 , v 2 , v 3 ) = [ 1 0 0 0 1 0 0 0 1 ] V=(v_1,v_2,v_3)=\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{matrix}\right] V=(v1,v2,v3)=⎣⎡100010001⎦⎤
- 第三步,求解变量 U U U
求解
U
U
U按照以下规则,首先求解特征值不为零的。按照下面的公式进行求解:
u
i
=
1
σ
i
A
v
i
u_i=\frac{1}{\sigma_i}Av_i
ui=σi1Avi
根据公式可得:
u
1
=
1
σ
1
A
v
1
=
(
0
,
0
,
1
,
0
)
T
,
u
2
=
1
σ
2
A
v
2
=
(
0
,
0
,
0
,
1
)
T
u_1=\frac{1}{\sigma_1}Av_1=(0,0,1,0)^T,u_2=\frac{1}{\sigma_2}Av_2=(0,0,0,1)^T
u1=σ11Av1=(0,0,1,0)T,u2=σ21Av2=(0,0,0,1)T,再通过已得到的
v
1
,
v
2
v_1,v_2
v1,v2来求解,根据性质,
U
U
U中的子列向量必须两两正交,所以剩下的列向量必须满足下面要求:
u
i
=
{
β
∣
u
1
T
β
=
0
,
u
2
T
β
=
0
}
u_i=\lbrace{\beta}|u_1^T\beta=0,u_2^T\beta=0\rbrace
ui={β∣u1Tβ=0,u2Tβ=0}
最终求解可得
β
=
(
k
1
,
k
2
,
0
,
0
)
\beta=(k_1,k_2,0,0)
β=(k1,k2,0,0),其中
k
1
,
k
2
k_1,k_2
k1,k2为任意实数。
所以可得
u
3
=
(
1
,
0
,
0
,
0
)
,
u
4
=
(
0
,
1
,
0
,
0
)
u_3=(1,0,0,0),u_4=(0,1,0,0)
u3=(1,0,0,0),u4=(0,1,0,0)。
从而可知:
U
=
(
u
1
,
u
2
,
u
3
,
u
4
)
=
[
0
0
1
0
0
0
0
1
1
0
0
0
0
1
0
0
]
U=(u_1,u_2,u_3,u_4)=\left[\begin{matrix} 0& 0 & 1 & 0 \\ 0& 0 & 0 & 1 \\ 1& 0 & 0 & 0 \\ 0& 1 & 0 & 0 \\ \end{matrix}\right]
U=(u1,u2,u3,u4)=⎣⎢⎢⎡0010000110000100⎦⎥⎥⎤
- 第四步 确定 D D D,得出最后结果
从上面我们已经知道如下结果:
U
=
[
0
0
1
0
0
0
0
1
1
0
0
0
0
1
0
0
]
U=\left[\begin{matrix} 0& 0 & 1 & 0 \\ 0& 0 & 0 & 1 \\ 1& 0 & 0 & 0 \\ 0& 1 & 0 & 0 \\ \end{matrix}\right]
U=⎣⎢⎢⎡0010000110000100⎦⎥⎥⎤
V
=
[
1
0
0
0
1
0
0
0
1
]
V=\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{matrix}\right]
V=⎣⎡100010001⎦⎤
现在我们就需要来确定
D
D
D了,我们已知:
Δ
=
[
1
0
0
1
]
\Delta=\left[\begin{matrix} 1 & 0 \\ 0 & 1 \\ \end{matrix}\right]
Δ=[1001]
D
=
[
Δ
0
0
0
]
D=\left[\begin{matrix} \Delta & 0 \\ 0 & 0 \\ \end{matrix}\right]
D=[Δ000]
而矩阵
A
A
A的奇异值分解为下面公式,
A
=
U
D
V
H
A=UDV^{H}
A=UDVH
所以我们可得
D
D
D的维度,也就是
D
4
×
3
D_{4\times3}
D4×3,所以最终我们确定
D
D
D:
D
=
[
1
0
0
0
1
0
0
0
0
0
0
0
]
D=\left[\begin{matrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0\\ \end{matrix}\right]
D=⎣⎢⎢⎡100001000000⎦⎥⎥⎤
到这里,矩阵的奇异值分解就结束了,我们可以通过公式: A = U D V H A=UDV^{H} A=UDVH来进行验证。
虽然奇异值分解结束了,但是伪逆计算却还没开始,不过当你已经求解出了奇异值分解之后,伪逆也就不难了。
2. 矩阵伪逆的计算
这里我们还是需要摆出伪逆的计算公式。
A + = V D + U H A^{+}=VD^{+}U^{H} A+=VD+UH
而我们刚才奇异值分解的是: A = U D V H A=UDV^{H} A=UDVH
这里有一个很不幸消息,如果你直接这样看的话你会发现,我们所求的 D D D其实也是个不可逆矩阵,也就是说如果这样的话,也是要求伪逆的。而且你会有更惊人的发现,它的和 A A A是很相似的。所以这里我们需要分解。
也就是真正使用的公式:
A = U D V H = U ( Δ 0 0 0 ) V H A=UDV^{H}=U\left(\begin{matrix} \Delta & 0 \\ 0 & 0 \\ \end{matrix}\right)V^{H} A=UDVH=U(Δ000)VH
A + = V D + U H = V ( Δ − 1 0 0 0 ) U H A^+=VD^+U^{H}=V\left(\begin{matrix} \Delta^{-1} & 0 \\ 0 & 0 \\ \end{matrix}\right)U^{H} A+=VD+UH=V(Δ−1000)UH
这样你就会发现很容易求解,由于
Δ
=
[
1
0
0
1
]
\Delta=\left[\begin{matrix} 1 & 0 \\ 0 & 1 \\ \end{matrix}\right]
Δ=[1001],所以
Δ
−
1
=
[
1
0
0
1
]
\Delta^{-1}=\left[\begin{matrix} 1 & 0 \\ 0 & 1 \\ \end{matrix}\right]
Δ−1=[1001]
那么就可以得出: D + = ( Δ − 1 0 0 0 ) = [ 1 0 0 0 0 1 0 0 0 0 0 0 ] D^+=\left(\begin{matrix} \Delta^{-1} & 0 \\ 0 & 0 \\ \end{matrix}\right)=\left[\begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0\\ \end{matrix}\right] D+=(Δ−1000)=⎣⎡100010000000⎦⎤
所以可得
A
A
A的伪逆,亦即广义逆为:
A
+
=
V
D
+
U
H
=
V
(
Δ
−
1
0
0
0
)
U
H
=
[
1
0
0
0
1
0
0
0
1
]
[
1
0
0
0
0
1
0
0
0
0
0
0
]
[
0
0
1
0
0
0
0
1
1
0
0
0
0
1
0
0
]
=
[
0
0
1
0
0
0
0
1
0
0
0
0
]
A^+=VD^+U^{H}=V\left(\begin{matrix} \Delta^{-1} & 0 \\ 0 & 0 \\ \end{matrix}\right)U^{H}=\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{matrix}\right]\left[\begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0\\ \end{matrix}\right]\left[\begin{matrix} 0& 0 & 1 & 0 \\ 0& 0 & 0 & 1 \\ 1& 0 & 0 & 0 \\ 0& 1 & 0 & 0 \\ \end{matrix}\right]=\left[\begin{matrix} 0& 0 & 1 & 0 \\ 0& 0 & 0 & 1 \\ 0& 0 & 0 & 0 \\ \end{matrix}\right]
A+=VD+UH=V(Δ−1000)UH=⎣⎡100010001⎦⎤⎣⎡100010000000⎦⎤⎣⎢⎢⎡0010000110000100⎦⎥⎥⎤=⎣⎡000000100010⎦⎤
至此,我们求解完毕,其实在本文中,我们最最主要了解的是,我们一般不使用原始公式,而是使用下面的:
A = U ( Δ 0 0 0 ) V H A=U\left(\begin{matrix} \Delta & 0 \\ 0 & 0 \\ \end{matrix}\right)V^{H} A=U(Δ000)VH
A + = V ( Δ − 1 0 0 0 ) U H A^+=V\left(\begin{matrix} \Delta^{-1} & 0 \\ 0 & 0 \\ \end{matrix}\right)U^{H} A+=V(Δ−1000)UH