【矩阵论】Chapter 9— 广义逆矩阵知识点总结复习
Hermite 标准型实际上就是行最简行
1 广义逆矩阵定义
广义逆矩阵 的定义:对任意 矩阵的,如果存在某个 的矩阵,满足
Penrose
方程的一部分或全部,则称 为 的广义逆矩阵Penrose
方程的四个条件:- ;
- ;
- ;
满足第 个条件,则把 记为,这类矩阵的全体记为,所以
类似,满足第 个条件:
根据以上,满足 个, 个, 个, 个
Penrose
方程的广义逆矩阵有,但应用最多的,也就是我们所学的以下四种:- 减号逆或者 逆:
- 最小二乘广义逆:
- 极小范数广义逆:
- 加号逆或
Moore-Penrose
广义逆:
2 减号逆
的性质
设 为 矩阵, 和 分别是 阶和 阶非奇异方阵,且,为 A 的减号逆,则:
- 和 是幂等矩阵,并且
(
Penrose
定理)设 分别为 矩阵,则矩阵方程: 有解的充分必要条件是: 并且在有解的情况下,其通解为: 其中 是任意的矩阵。
求解
为 矩阵
,其中通过对 进行如下操作得到,均为常数矩阵,每一项均用表示常数,且 维度均为,是一个 的对角矩阵,其中 是矩阵 的秩,维度为 ,维度为,是一个 的矩阵。
利用求解线性方程组
有解的充分必要条件是,这时特解,通解
这里不给出,感兴趣的读者可以自己去实现,具体的算法如下:
- 构造水平增广矩阵: 将原矩阵和单位矩阵水平拼接,形成增广矩阵。
- 初等行变换: 利用初等行变换将增广矩阵转化为最简行阶梯形式。
- 提取:变换后的单位矩阵就是
- 构造垂直增广矩阵:再将最简行阶梯形与单位矩阵垂直拼接,形成增广矩阵。
- 初等列变换,提取:变换后的单位矩阵就是
3 最小二乘广义逆
定理 1
设, 的充分必要条件是 满足
这即为(最小二乘广义逆)的通式
定理 2
设,是 的任一最小二乘广义逆,则
定理 3
设 是 矩阵,则(即 G 为最小二乘广义逆)的充分必要条件为 是不相容线性方程组 的最小二乘解。
利用求解线性方程组
是不相容线性方程组 的最小二乘解当且仅当 是相容线性方程组 的解,并且 的最小二乘解的通式为
4 极小范数广义逆
定理 1
设, 的充分必要条件是 满足
这即为(极小范数广义逆)的通式
定理 2
设,是 的任一极小范数广义逆,则
定理
设 是 矩阵,则(即 G 为极小范数广义逆)的充分必要条件为 是相容线性方程组 的极小范数解。
利用求解线性方程组
设 是 矩阵,则 的充分必要条件为 是相容线性方程组 的极小范数解,即 为相容线性方程组 的极小范数解
注意:极小范数解是唯一的,而最小二乘解不唯一
5 Moore-Penrose(加号逆)
的性质
- 存在且唯一
定理 1
设 是 矩阵,则 是加号逆 的充分必要条件为 是不相容线性方程组 的极小最小二乘解。
重点
因为加号逆满足四个条件,所以它也是减号逆、最小二乘广义逆、极小范数广义逆。所以:
当 时, 的通解为:
当 时, 的极小范数解为: 极小范数解是唯一的
对于, 的最小二乘解为:
对于, 的具有极小范数的最小二乘解为:
求解
- 若 为行满秩矩阵,则:
- 若 为列满秩矩阵:则:
- 否则利用满秩分解求解:
Python 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
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
利用 求解线性方程组
- 有解(相容)的充要条件是
- 是相容方程组 的通解,或是不相容方程组 的全部最小二乘解
- 是相容方程组 的唯一极小范数解,或是不相容方程组 的唯一极小范数最小二乘解
Python 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
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)
相关内容
- 【矩阵论】Chapter 1— 向量空间知识点总结复习
- 【矩阵论】Chapter 2— 内积空间知识点总结复习
- 【矩阵论】Chapter 3— 线性映射和线性变换知识点总结复习
- 【矩阵论】Chapter 4— 特征值和特征向量知识点总结复习
- 【矩阵论】Chapter 5—lambda 矩阵与 Jordan 标准型

