广义逆矩阵
G
G
G的定义:对任意
m
×
n
m\times n
m×n矩阵的
A
A
A,如果存在某个
n
×
m
n\times m
n×m的矩阵
G
G
G,满足Penrose
方程的一部分或全部,则称
G
G
G为
A
A
A的广义逆矩阵
Penrose
方程的四个条件:
- A G A = A AGA=A AGA=A;
- G A G = G GAG=G GAG=G;
- ( A G ) T = A G (AG)^T=AG (AG)T=AG;
- ( G A ) T = G A (GA)^T=GA (GA)T=GA
满足第 i i i个条件,则把 G G G记为 A ( i ) A^{(i)} A(i),这类矩阵的全体记为 A { i } A\{i\} A{i},所以 A i ∈ A { i } A^{i}\in A\{i\} Ai∈A{i}
类似,满足第 i , j i,j i,j个条件: A i , j ∈ A { i , j } A^{i,j}\in A\{i,j\} Ai,j∈A{i,j}
根据以上,满足 1 1 1个, 2 2 2个, 3 3 3个, 4 4 4个
Penrose
方程的广义逆矩阵有 C 4 1 + C 4 2 + C 4 3 + C 4 4 = 4 + 6 + 4 + 1 = 15 C_4^1+C_4^2+C_4^3+C_4^4=4+6+4+1=15 C41?+C42?+C43?+C44?=4+6+4+1=15,但应用最多的,也就是我们所学的以下四种:
- 减号逆或者 g g g逆: A ? = A ( 1 ) A^-=A^{(1)} A?=A(1)
- 最小二乘广义逆: A l ? = A ( 1 , 3 ) A_l^-=A^{(1,3)} Al??=A(1,3)
- 极小范数广义逆: A m ? = A ( 1 , 4 ) A_m^-=A^{(1,4)} Am??=A(1,4)
- 加号逆或
Moore-Penrose
广义逆: A + = A ( 1 , 2 , 3 , 4 ) A^+=A^{(1,2,3,4)} A+=A(1,2,3,4)
A ? A^- A?的性质
设 A A A为 m × n m\times n m×n矩阵, P P P和 Q Q Q分别是 m m m阶和 n n n阶非奇异方阵,且 B = P A Q B=PAQ B=PAQ, A ? A^- A?为A的减号逆,则:
(Penrose
定理)
设
A
,
B
,
C
A,B,C
A,B,C分别为
m
×
n
,
p
×
q
,
m
×
q
m\times n,p\times q,m\times q
m×n,p×q,m×q矩阵,则矩阵方程:
A
X
B
=
C
AXB=C
AXB=C
有解的充分必要条件是:
A
A
?
C
B
?
B
=
C
AA^-CB^-B=C
AA?CB?B=C
并且在有解的情况下,其通解为:
X
=
A
?
C
B
?
+
Y
?
A
?
A
Y
B
B
?
X=A^-CB^-+Y-A^-AYBB^-
X=A?CB?+Y?A?AYBB?
其中
Y
∈
R
n
×
p
Y\in R^{n\times p}
Y∈Rn×p是任意的矩阵。
求解 A ? A^- A?
A
A
A为
m
×
n
m\times n
m×n矩阵
A
?
=
Q
×
(
E
r
G
12
G
21
G
22
)
×
P
A^-=Q\times \begin{pmatrix} E_r & G_{12} \\ G_{21} & G_{22}\\ \end{pmatrix} \times P
A?=Q×(Er?G21??G12?G22??)×P
其中
P
,
Q
,
E
r
P,Q,E_r
P,Q,Er?通过对
A
A
A进行如下操作得到,
G
12
,
G
21
,
G
22
G_{12},G_{21},G_{22}
G12?,G21?,G22?均为常数矩阵,每一项均用
g
i
j
g_{ij}
gij?表示常数,且
Q
,
P
Q,P
Q,P维度均为
m
×
n
m\times n
m×n,
E
r
E_r
Er?是一个
r
×
r
r \times r
r×r 的对角矩阵,其中
r
r
r是矩阵
A
A
A的秩,
G
12
G_{12}
G12?维度为
m
×
(
n
?
r
)
m \times (n-r)
m×(n?r) ,
G
21
G_{21}
G21?维度为
(
m
?
r
)
×
n
(m-r) \times n
(m?r)×n,
G
22
G_{22}
G22?是一个$ (m-r) \times (n-r)$的矩阵。
例子 A = [ 3 3 3 2 2 1 1 1 2 ] A=\begin{bmatrix} 3 & 3 & 3 \\ 2 & 2 & 1 \\ 1 & 1 & 2 \end{bmatrix} A= ?321?321?312? ??
初等行变换化为行最简阶梯形矩阵,则
P
=
[
0
2
3
?
1
3
0
?
1
3
2
3
1
?
1
?
1
]
P=\begin{bmatrix} 0 & \frac{2}{3} & -\frac{1}{3} \\ 0 & -\frac{1}{3} & \frac{2}{3} \\ 1 & -1 & -1 \\\end{bmatrix}
P=
?001?32??31??1??31?32??1?
?
[
3
3
3
1
0
0
2
2
1
0
1
0
1
1
2
0
0
1
1
0
0
0
1
0
0
0
1
]
?
r
1
?
r
3
[
1
1
2
0
0
1
2
2
1
0
1
0
3
3
3
1
0
0
1
0
0
0
1
0
0
0
1
]
?
r
2
?
2
r
1
r
3
?
3
r
1
[
1
1
2
0
0
1
0
0
?
3
0
1
?
2
0
0
?
3
1
0
?
3
1
0
0
0
1
0
0
0
1
]
?
(
?
1
3
)
×
r
2
r
1
?
2
r
2
r
3
+
3
r
2
[
1
1
0
0
2
3
?
1
3
0
0
1
0
?
1
3
2
3
0
0
0
1
?
1
?
1
1
0
0
0
1
0
0
0
1
]
\left[\begin{array}{ccc|ccc} 3 & 3 & 3 & 1 & 0 & 0 \\ 2 & 2 & 1 & 0 & 1 & 0 \\ 1 & 1 & 2 & 0 & 0 & 1 \\ \hline 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{array}\right]\stackrel{r_1\leftrightarrow r_3 }{\longrightarrow } \left[\begin{array}{ccc|ccc} 1 & 1 & 2 & 0 & 0 & 1 \\ 2 & 2 & 1 & 0 & 1 & 0 \\ 3 & 3 & 3 & 1 & 0 & 0 \\ \hline 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 & \\ \end{array}\right]\stackrel{\begin{array}{c} r_2 - 2r_1 \\ r_3 - 3r_1 \end{array}} {\longrightarrow }\left[\begin{array}{ccc|ccc} 1 & 1 & 2 & 0 & 0 & 1 \\ 0 & 0 & -3 & 0 & 1 & -2 \\ 0 & 0 & -3 & 1& 0 & -3 \\ \hline 1 & 0 & 0 & \\ 0 & 1 & 0 & \\ 0 & 0 & 1 & \\ \end{array}\right]\stackrel{\begin{array}{c} (-\frac{1}{3})\times r_2\\r_1 - 2r_2 \\ r_3 + 3r_2 \end{array}} {\longrightarrow }\left[\begin{array}{ccc|ccc} 1 & 1 & 0 & 0 & \frac{2}{3} & -\frac{1}{3} \\ 0 & 0 & 1 & 0 & -\frac{1}{3} & \frac{2}{3} \\ 0 & 0 & 0 & 1 & -1 & -1 \\ \hline 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{array}\right]
?321100?321010?312001?100010001?
??r1??r3??
?123100?123010?213001?001?010100?
??r2??2r1?r3??3r1???
?100100?100010?2?3?3001?001?0101?2?3?
??(?31?)×r2?r1??2r2?r3?+3r2???
?100100?100010?010001?00132??31??1?31?32??1?
?
再进行列变换化为
E
r
E_r
Er?得到
Q
=
[
1
0
?
1
0
0
1
0
1
0
]
Q=\begin{bmatrix}1 & 0 & -1 \\ 0 & 0 & 1\\ 0 & 1 & 0\end{bmatrix}
Q=
?100?001??110?
?
[
1
1
0
0
2
3
?
1
3
0
0
1
0
?
1
3
2
3
0
0
0
1
?
1
?
1
1
0
0
0
1
0
0
0
1
]
?
c
2
?
c
1
[
1
0
0
0
2
3
?
1
3
0
0
1
0
?
1
3
2
3
0
0
0
1
?
1
?
1
1
?
1
0
0
1
0
0
0
1
]
?
c
2
?
c
3
[
1
0
0
0
2
3
?
1
3
0
1
0
0
?
1
3
2
3
0
0
0
1
?
1
?
1
1
0
?
1
0
0
1
0
1
0
]
\left[\begin{array}{ccc|ccc} 1 & 1 & 0 & 0 & \frac{2}{3} & -\frac{1}{3} \\ 0 & 0 & 1 & 0 & -\frac{1}{3} & \frac{2}{3} \\ 0 & 0 & 0 & 1 & -1 & -1 \\ \hline 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{array}\right]\stackrel{\begin{array}{c} c2-c_1 \end{array}} {\longrightarrow }\left[\begin{array}{ccc|ccc} 1 & 0 & 0 & 0 & \frac{2}{3} & -\frac{1}{3} \\ 0 & 0 & 1 & 0 & -\frac{1}{3} & \frac{2}{3} \\ 0 & 0 & 0 & 1 & -1 & -1 \\ \hline 1 & -1 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{array}\right]\stackrel{\begin{array}{c} c_2\longleftarrow c_3 \end{array}} {\longrightarrow }\left[\begin{array}{ccc|ccc} 1 & 0 & 0 & 0 & \frac{2}{3} & -\frac{1}{3} \\ 0 & 1 & 0 & 0 & -\frac{1}{3} & \frac{2}{3} \\ 0 & 0 & 0 & 1 & -1 & -1 \\ \hline 1 & 0 & -1 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \\ \end{array}\right]
?100100?100010?010001?00132??31??1?31?32??1?
??c2?c1???
?100100?000?110?010001?00132??31??1?31?32??1?
??c2??c3???
?100100?010001?000?110?00132??31??1?31?32??1?
?
则
A
?
=
Q
×
(
E
r
G
12
G
21
G
22
)
×
P
=
[
1
0
?
1
0
0
1
0
1
0
]
×
[
1
0
g
13
0
1
g
23
g
31
g
32
g
33
]
×
[
0
2
3
?
1
3
0
?
1
3
2
3
1
?
1
?
1
]
=
[
g
13
?
g
33
2
3
?
2
3
g
31
+
1
3
g
32
?
g
13
+
g
33
?
1
3
+
1
3
g
31
?
2
3
g
32
?
g
13
+
g
33
g
33
2
3
g
31
?
1
3
g
32
?
g
33
?
1
3
g
31
+
2
3
g
32
?
g
33
g
23
?
1
3
?
g
23
2
3
?
g
23
]
A^-=Q\times \begin{pmatrix} E_r & G_{12} \\ G_{21} & G_{22}\\ \end{pmatrix} \times P=\begin{bmatrix}1 & 0 & -1 \\ 0 & 0 & 1\\ 0 & 1 & 0\end{bmatrix}\times\begin{bmatrix}1 & 0 & g_{13} \\ 0 & 1 & g_{23}\\ g_{31} & g_{32} & g_{33}\end{bmatrix}\times \begin{bmatrix} 0 & \frac{2}{3} & -\frac{1}{3} \\ 0 & -\frac{1}{3} & \frac{2}{3} \\ 1 & -1 & -1 \\\end{bmatrix}=\begin{bmatrix} g_{13}-g_{33} & \frac{2}{3}-\frac{2}{3}g_{31}+\frac{1}{3}g_{32}-g_{13}+g_{33} & -\frac{1}{3}+\frac{1}{3}g_{31}-\frac{2}{3}g_{32}-g_{13}+g_{33} \\ g_{33} & \frac{2}{3}g_{31}-\frac{1}{3}g_{32}-g_{33} & -\frac{1}{3}g_{31}+\frac{2}{3}g_{32}-g_{33} \\ g_{23} & -\frac{1}{3}-g_{23} & \frac{2}{3}-g_{23} \\\end{bmatrix}
A?=Q×(Er?G21??G12?G22??)×P=
?100?001??110?
?×
?10g31??01g32??g13?g23?g33??
?×
?001?32??31??1??31?32??1?
?=
?g13??g33?g33?g23??32??32?g31?+31?g32??g13?+g33?32?g31??31?g32??g33??31??g23???31?+31?g31??32?g32??g13?+g33??31?g31?+32?g32??g33?32??g23??
?
令 g i j = 0 g_{ij}=0 gij?=0,则 A ? = [ 0 2 3 ? 1 3 0 0 0 0 ? 1 3 2 3 ] A^-=\begin{bmatrix} 0 & \frac{2}{3} & -\frac{1}{3} \\ 0 & 0 & 0 \\ 0 & -\frac{1}{3} & \frac{2}{3} \\\end{bmatrix} A?= ?000?32?0?31???31?032?? ?
利用 A ? A^- A?求解线性方程组 A x = b Ax=b Ax=b
A x = b Ax=b Ax=b有解的充分必要条件是 A A ? b = b AA^-b=b AA?b=b,这时特解 x 0 = A ? b x_0=A^-b x0?=A?b,通解 x = A ? b + ( I ? A ? A ) y , ? y ∈ C n x=A^-b+(I-A^-A)y,\forall y\in C^n x=A?b+(I?A?A)y,?y∈Cn
这里不给出 A ? A^- A?,感兴趣的读者可以自己去实现,具体的算法如下:
- 构造水平增广矩阵: 将原矩阵和单位矩阵水平拼接,形成增广矩阵。
- 初等行变换: 利用初等行变换将增广矩阵转化为最简行阶梯形式。
- 提取 P P P: 变换后的单位矩阵就是 P P P
- 构造垂直增广矩阵: 再将最简行阶梯形与单位矩阵垂直拼接,形成增广矩阵。
- 初等列变换,提取 G G G: 变换后的单位矩阵就是 G G G
定理1
设
A
∈
C
m
×
n
A\in C^{m\times n}
A∈Cm×n,
G
∈
A
{
1
,
3
}
G\in A\{1,3\}
G∈A{1,3}的充分必要条件是
G
G
G满足
A
H
A
G
=
A
H
A^HAG=A^H
AHAG=AH
这即为 A { 1 , 3 } A\{1,3\} A{1,3}(最小二乘广义逆)的通式
定理2
设
A
∈
C
m
×
n
A\in C^{m\times n}
A∈Cm×n,
A
l
?
A_l^-
Al??是
A
A
A的任一最小二乘广义逆,则
A
{
1
,
3
}
=
{
G
∈
C
n
×
m
∣
A
G
=
A
A
l
?
}
A\{1,3\}=\{G\in C^{n\times m}|AG=AA_l^-\}
A{1,3}={G∈Cn×m∣AG=AAl??}
定理 3 3 3
设 A A A是 m × n m\times n m×n矩阵,则 G ∈ A { 1 , 3 } G\in A\{1,3\} G∈A{1,3}(即G为最小二乘广义逆)的充分必要条件为 x = G b x=Gb x=Gb是不相容线性方程组 A x = b Ax=b Ax=b的最小二乘解。
利用 A l ? A_l^- Al??求解线性方程组 A x = b Ax=b Ax=b
x
x
x是不相容线性方程组
A
x
=
b
Ax=b
Ax=b的最小二乘解当且仅当
x
x
x是相容线性方程组
A
x
=
A
A
l
?
b
Ax=AA_l^-b
Ax=AAl??b
的解,并且
A
x
=
b
Ax=b
Ax=b的最小二乘解的通式为
x
=
A
l
?
b
+
(
I
?
A
?
A
)
y
,
?
y
∈
C
n
x=A_l^-b+(I-A^-A)y,\forall y\in C^n
x=Al??b+(I?A?A)y,?y∈Cn
定理1
设
A
∈
C
m
×
n
A\in C^{m\times n}
A∈Cm×n,
G
∈
A
{
1
,
4
}
G\in A\{1,4\}
G∈A{1,4}的充分必要条件是
G
G
G满足
G
A
A
H
=
A
H
GAA^H=A^H
GAAH=AH
这即为 A { 1 , 4 } A\{1,4\} A{1,4}(极小范数广义逆)的通式
定理2
设
A
∈
C
m
×
n
A\in C^{m\times n}
A∈Cm×n,
A
m
?
A_m^-
Am??是
A
A
A的任一极小范数广义逆,则
A
{
1
,
4
}
=
{
G
∈
C
n
×
m
∣
G
A
=
A
m
?
A
}
A\{1,4\}=\{G\in C^{n\times m}|GA=A_m^-A\}
A{1,4}={G∈Cn×m∣GA=Am??A}
定理 3 3 3
设 A A A是 m × n m\times n m×n矩阵,则 G ∈ A { 1 , 4 } G\in A\{1,4\} G∈A{1,4}(即G为极小范数广义逆)的充分必要条件为 x = G b x=Gb x=Gb是相容线性方程组 A x = b Ax=b Ax=b的极小范数解。
利用 A m ? A_m^- Am??求解线性方程组 A x = b Ax=b Ax=b
设 A A A是 m × n m\times n m×n矩阵,则 G ∈ A { 1 , 4 } G\in A\{1,4\} G∈A{1,4}的充分必要条件为 x = G b x=Gb x=Gb是相容线性方程组 A x = b Ax=b Ax=b的极小范数解,即 x = A m ? b x=A_m^-b x=Am??b为相容线性方程组 A x = b Ax=b Ax=b的极小范数解
注意:极小范数解是唯一的,而最小二乘解不唯一
A + A^+ A+的性质
定理1
设 A A A是 m × n m\times n m×n矩阵,则 G G G是加号逆 A + A^+ A+的充分必要条件为 x = G b x=Gb x=Gb是不相容线性方程组 A x = b Ax=b Ax=b的极小最小二乘解。
重点
因为加号逆满足四个条件,所以它也是减号逆、最小二乘广义逆、极小范数广义逆。所以:
当
b
∈
R
(
A
)
b\in R(A)
b∈R(A)时,
A
x
=
b
Ax=b
Ax=b的通解为:
x
=
A
+
b
+
(
I
?
A
+
A
)
y
,
?
y
∈
R
n
x=A^+b+(I-A^+A)y,\forall y\in R^n
x=A+b+(I?A+A)y,?y∈Rn
当
b
∈
R
(
A
)
b\in R(A)
b∈R(A)时,
A
x
=
b
Ax=b
Ax=b的极小范数解为:
x
=
A
+
b
x=A^+b
x=A+b
极小范数解是唯一的
对于
?
b
\forall b
?b,
A
x
=
b
Ax=b
Ax=b的最小二乘解为:
x
=
A
+
b
+
(
I
?
A
+
A
)
y
,
?
y
∈
R
n
x=A^+b+(I-A^+A)y,\forall y\in R^n
x=A+b+(I?A+A)y,?y∈Rn
对于
?
b
\forall b
?b,
A
x
=
b
Ax=b
Ax=b的具有极小范数的最小二乘解为:
x
=
A
+
b
x=A^+b
x=A+b
求解 A + A^+ A+
Python代码如下:
import numpy as np
from sympy import Matrix, Symbol
def get_A_plus(A):
A_plus = None
# 判断A是行满秩还是列满秩,如果都不是则利用满秩分解求解A_plus
if A.rank() == A.rows:
print("A为行满秩矩阵")
A_plus = A.H * (A * A.H).inv()
elif A.rank() == A.cols:
print("A为列满秩矩阵")
A_plus = (A.H * A).inv() * A.H
else:
print("A为非满秩矩阵")
# 利用满秩分解求解A_plus,full_rank在另一篇矩阵论复习博客中
F, G = full_rank(A)
A_plus = G.H * ((G * G.H).inv()) * ((F.H * F).inv()) * F.H
return A_plus
利用 A + A^+ A+求解线性方程组 A x = b Ax=b Ax=b
Python代码如下:
import numpy as np
from sympy import Matrix, Symbol
def get_solution(A, b):
A_plus = get_A_plus(A)
# 单位矩阵
I = Matrix(np.eye(A_plus.rows))
print("I:", I)
# 生成符号列表
symbols_list = [Symbol(f'y{i+1}') for i in range(A_plus.rows)]
# 生成符号矩阵
symbols_matrix = Matrix(symbols_list)
print("symbols_matrix:", symbols_matrix)
if A * A_plus * b == b:
print("Ax = b有解")
print("通解为:")
print(A_plus.rows)
print(A_plus * b + (I - A_plus * A) * symbols_matrix)
print("唯一极小范数解为:")
print(A_plus * b)
else:
print("Ax = b无解")
print("全部最小二乘解为:")
print(A_plus.rows)
print(A_plus * b + (I - A_plus * A) * symbols_matrix)
print("唯一极小范数最小二乘解:")
print(A_plus * b)
get_solution(A, b)