矩阵理论和编程实践
近期学完了矩阵的相关知识点,想通过几个问题,将重要知识点和编程串联。
问题1:用克拉默法则求解线性方程组
解线性方程组:
{ x 1 + 2 x 2 − x 3 = 5 x 1 − x 2 + x 3 = 5 2 x 1 + 3 x 2 − x 3 = 1 \left\{
\begin{aligned}
&x_1 + 2x_2 - x_3 = 5 \\
&x_1 - x_2 + x_3 = 5 \\
&2x_1 + 3x_2 - x_3 = 1
\end{aligned}
\right.
⎩ ⎨ ⎧ x 1 + 2 x 2 − x 3 = 5 x 1 − x 2 + x 3 = 5 2 x 1 + 3 x 2 − x 3 = 1
解:
先计算行列式d d d ,并且判断是否d ≠ 0 d \neq 0 d = 0 $ $
d = ∣ 1 2 1 1 − 1 1 2 3 − 1 ∣ = ∣ 0 2 1 0 − 1 1 3 3 − 1 ∣ = 3 ∣ 2 1 − 1 1 ∣ = 9 ≠ 0 {d}=\left | \begin{matrix}
1 & 2 & 1 \\\\
1 & -1 & 1 \\\\
2 & 3 & -1 \\
\end{matrix} \right | =
\left | \begin{matrix}
0 & 2 & 1 \\\\
0 & -1 & 1 \\\\
3 & 3 & -1 \\
\end{matrix} \right | =
3\left | \begin{matrix}
2 & 1 \\\\
-1 & 1 \\
\end{matrix} \right | =
9 \neq 0
d = 1 1 2 2 − 1 3 1 1 − 1 = 0 0 3 2 − 1 3 1 1 − 1 = 3 2 − 1 1 1 = 9 = 0
计算d 1 、 d 2 、 d 3 d_1、d_2、d_3 d 1 、 d 2 、 d 3
d 1 = ∣ 5 2 1 5 − 1 1 1 3 − 1 ∣ = ∣ 0 0 1 0 − 3 1 6 5 − 1 ∣ = ∣ 0 − 3 6 5 ∣ = 18 {d_1}=\left | \begin{matrix}
5 & 2 & 1 \\\\
5 & -1 & 1 \\\\
1 & 3 & -1 \\
\end{matrix} \right | =
\left | \begin{matrix}
0 & 0 & 1 \\\\
0 & -3 & 1 \\\\
6 & 5 & -1 \\
\end{matrix} \right | =
\left | \begin{matrix}
0 & -3 \\\\
6 & 5 \\
\end{matrix} \right | =
18
d 1 = 5 5 1 2 − 1 3 1 1 − 1 = 0 0 6 0 − 3 5 1 1 − 1 = 0 6 − 3 5 = 18
d 2 = ∣ 1 5 1 1 5 1 2 1 − 1 ∣ = 0 {d_2}=\left | \begin{matrix}
1 & 5 & 1 \\\\
1 & 5 & 1 \\\\
2 & 1 & -1 \\
\end{matrix} \right |
=0
d 2 = 1 1 2 5 5 1 1 1 − 1 = 0
d 3 = ∣ 1 2 5 1 − 1 5 2 3 1 ∣ = ∣ 0 3 0 1 − 1 5 2 3 1 ∣ = − 3 ∣ 1 5 2 1 ∣ = 27 {d_3}=\left | \begin{matrix}
1 & 2 & 5 \\\\
1 & -1 & 5 \\\\
2 & 3 & 1 \\
\end{matrix} \right | =
\left | \begin{matrix}
0 & 3 & 0 \\\\
1 & -1 & 5 \\\\
2 & 3 & 1 \\
\end{matrix} \right | =
-3\left | \begin{matrix}
1 & 5 \\\\
2 & 1 \\
\end{matrix} \right | =
27
d 3 = 1 1 2 2 − 1 3 5 5 1 = 0 1 2 3 − 1 3 0 5 1 = − 3 1 2 5 1 = 27
得出线性方程的唯一解$ $
唯一解为:x 1 = d 1 d , x 2 = d 2 d , x 3 = d 3 d x_1 = \frac{d_1}d,x_2 = \frac{d_2}d,x_3 = \frac{d_3}d x 1 = d d 1 , x 2 = d d 2 , x 3 = d d 3
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import numpy as np d = np.array([[1 , 2 , 1 ], [1 , -1 , 1 ], [2 , 3 , -1 ]]) b = np.array([5 , 5 , 1 ]) det_d = np.linalg.det(d)if det_d != 0 : d1 = d.copy(); d1[:,0 ] = b d2 = d.copy(); d2[:,1 ] = b d3 = d.copy(); d3[:,2 ] = b x1 = np.linalg.det(d1)/det_d x2 = np.linalg.det(d2)/det_d x3 = np.linalg.det(d3)/det_d print (f"x1={x1:.1 f} , x2={x2:.1 f} , x3={x3:.1 f} " )else : print ("无唯一解" )
知识点:
行列式的计算方法(书P51)(7个):
化三角法
降阶法(选择0最多的行(列)展开,降为低阶)
加边法(*非对角线元素具有相同规律)
拆行(列)法
递归法(找规律)
析因子法
行列式的基本性质(书P38)(6个):
行列互换,行列式不变
行列式中一行乘k k k ,行列式变为原来的k k k 倍
行列式中某行元素均为两个元素的和,行列式等于两个行列数的和
行列式某两行相同或者成比例,行列式为0
一行的k k k 倍加到另一行,行列式不变
两行互换,行列式反号
克拉默法则(书P58)
行列式的定义
问题二:分块矩阵求逆
设m + n m+n m + n 阶方阵D D D 为:
D = ( A 0 C B ) {D}= \begin{pmatrix}
A & 0 \\\\
C & B
\end{pmatrix}
D = A C 0 B
其中A A A 为m m m 阶可逆矩阵,B B B 为n n n 阶可逆矩阵,证明D D D 可逆,并求D − 1 D^{-1} D − 1 .
解:
因为$A,B 均可逆,则 均可逆,则 均可逆,则 \begin{vmatrix} A \end{vmatrix} \neq 0 , , , \begin{vmatrix} B \end{vmatrix} \neq 0 , 又 ,又 , 又 \begin{vmatrix} D \end{vmatrix}= \begin{vmatrix} A \end{vmatrix} \cdot \begin{vmatrix} B \end{vmatrix} ,故 ,故 ,故 \begin{vmatrix} D \end{vmatrix} \neq 0, , , D可逆 . 可逆. 可逆 . $
设
D − 1 = ( X 11 X 12 X 21 X 22 ) D^{-1} =
\begin{pmatrix}
X_{11} & X_{12} \\\\
X_{21} & X_{22} \end{pmatrix}
D − 1 = X 11 X 21 X 12 X 22
此时D D − 1 = E m + n DD^{-1}= E_{m+n} D D − 1 = E m + n
( A O C B ) ( X 11 X 12 X 21 X 22 ) = ( E m O O E n ) \begin{pmatrix} A & O \\ C & B \end{pmatrix}
\begin{pmatrix} X_{11} & X_{12} \\ X_{21} & X_{22} \end{pmatrix}=
\begin{pmatrix} E_m & O \\ O & E_n \end{pmatrix}
( A C O B ) ( X 11 X 21 X 12 X 22 ) = ( E m O O E n )
{ A X 11 = E m A X 12 = O C X 11 + B X 21 = O C X 12 + B X 22 = E n \begin{cases}
AX_{11} = E_m \\
AX_{12} = O \\
CX_{11} + BX_{21} = O \\
CX_{12} + BX_{22} = E_n
\end{cases}
⎩ ⎨ ⎧ A X 11 = E m A X 12 = O C X 11 + B X 21 = O C X 12 + B X 22 = E n
由第一、二式可知:
X 11 = A − 1 , X 12 = O X_{11} = A^{-1}, \quad X_{12} = O \\
X 11 = A − 1 , X 12 = O
由第三、四式可知:
X 21 = − B − 1 C A − 1 , X 22 = B − 1 X_{21} = -B^{-1}CA^{-1}, \quad X_{22} = B^{-1}
X 21 = − B − 1 C A − 1 , X 22 = B − 1
故:
D − 1 = ( A − 1 O − B − 1 C A − 1 B − 1 ) D^{-1} =
\begin{pmatrix}
A^{-1} & O \\
-B^{-1}CA^{-1} & B^{-1}
\end{pmatrix}
D − 1 = ( A − 1 − B − 1 C A − 1 O B − 1 )
若C = 0 C = 0 C = 0 ,则:
D − 1 = ( A − 1 O 0 B − 1 ) D^{-1} =
\begin{pmatrix}
A^{-1} & O \\
0 & B^{-1}
\end{pmatrix}
D − 1 = ( A − 1 0 O B − 1 )
Python求矩阵的逆
1 2 3 4 5 6 7 import numpy as np D = np.array([[A, 0 ], [C, B]]) D_inv = np.linalg.inv(D)
知识点:
矩阵分块
可逆矩阵的性质(书P83页):
问题三:矩阵秩的计算
如何通过初等行变换化为行阶梯形矩阵,并计算秩?矩阵为:
A = ( 1 2 3 4 5 6 7 8 9 ) A =
\begin{pmatrix}
1 & 2 & 3 \\\\
4 & 5 & 6 \\\\
7 & 8 & 9 \end{pmatrix}
A = 1 4 7 2 5 8 3 6 9
解:
通过矩阵的初等行变换得到阶梯形矩阵:
A = ( 1 2 3 0 1 2 0 0 0 ) A =
\begin{pmatrix}
1 & 2 & 3 \\\\
0 & 1 & 2 \\\\
0 & 0 & 0 \end{pmatrix}
A = 1 0 0 2 1 0 3 2 0
确定矩阵的秩:
阶梯形矩阵中有2个非零行。所以R ( A ) = 2 R ( A ) = 2 R(A)=2R(A)=2 R ( A ) = 2 R ( A ) = 2 .$ $
Python将矩阵变换为阶梯形矩阵,并求矩阵的秩
1 2 3 4 5 6 7 8 9 10 11 from sympy import Matrix A = Matrix([ [1 , 2 , 3 ], [4 , 5 , 6 ], [7 , 8 , 9 ] ]) rref_matrix, pivots = A.rref() rank = len (pivots)
知识点:
矩阵的秩(书P103)
矩阵的初等变换(书P90)
问题四:如何理解范数的定义及其在不同场景下的应用?
知识点 :
1. 范数的基本性质 :
非负性、齐次性、三角不等式(适用于向量和矩阵)
2. 向量范数类型 :
L 1 L^1 L 1 范数:(曼哈顿距离):稀疏性优化(如LASSO回归)
∣ ∣ x ∣ ∣ 1 = ∑ i ∣ x i ∣ ||x||_1=\sum_{i} |x_i|
∣∣ x ∣ ∣ 1 = i ∑ ∣ x i ∣
L 2 L^2 L 2 范数(欧氏距离):几何长度和正交性(如主成分分析)
∣ ∣ x ∣ ∣ 2 = ( ∑ i x i 2 ) 1 / 2 ⇔ ∑ i x i 2 ||x||_2=(\sum_i x_i^2)^{1/2}\Leftrightarrow \sqrt{\sum_i x_i^2}
∣∣ x ∣ ∣ 2 = ( i ∑ x i 2 ) 1/2 ⇔ i ∑ x i 2
L ∞ L^∞ L ∞ 范数(最大值):误差分析中的最坏情况评估
∑ i ∣ x i ∣ 2 \sum_i|x_i|^2
i ∑ ∣ x i ∣ 2
3. 矩阵范数 :
∣ ∣ A ∣ ∣ F = ∑ i , j A i , j 2 ||A||_F=\sqrt{\sum_{i,j}A^2_{i,j}}
∣∣ A ∣ ∣ F = i , j ∑ A i , j 2
应用 :
在机器学习中,L 1 L^1 L 1 范数用于特征选择,L 2 L^2 L 2 范数用于防止过拟合,Frobenius范数用于矩阵分解(如SVD).
问题五 :特征向量和特征值如何描述矩阵的线性变换特性?
知识点 :
定义 :对矩阵AA,若存在非零向量v v v 和标量λ λ λ 满足A v = λ v Av=λv A v = λ v ,则λ λ λ 为特征值,v v v 为特征向量
几何意义 :特征向量表示变换后方向不变的轴,特征值表示沿该轴的缩放比例(如旋转矩阵的特征值可能为复数)
物理意义 :在振动分析中,特征值对应系统的固有频率,特征向量为振动模态。计算 :通过求解d e t ( A − λ I ) = 0 det(A−λI)=0 d e t ( A − λ I ) = 0 得到特征值,再解方程组求特征向量
Python计算特征值和特征向量:
1 2 3 4 5 6 import numpy as np eigenvalues, eigenvectors = np.linalg.eig(matrix)
问题六:如何理解奇异值分解(SVD)以及它和特征值分解的关系
SVD原理:
SVD 是一种将任意矩阵分解为三个更简单矩阵相乘的方法。例如,一个复杂的数据表格(矩阵)可以拆解成三个表格的组合:左特征表 、核心数值表 和右特征表 。这三个表格能保留原始数据的核心特征,同时简化计算和存储。公式为:
A = U D V T A=UDV^T
A = U D V T
其中:
U矩阵 (左奇异矩阵):由正交单位列向量组成,代表数据在行方向(如用户、文档)的潜在特征。
D矩阵 (奇异值矩阵):对角线上元素为奇异值,按从大到小排列,代表各个潜在特征的重要性强度。
V矩阵 (右奇异矩阵):由正交单位行向量组成,代表数据在列方向(如物品、词语)的潜在特征。
Python求 **U 、 D 、 V T U、D、V^T U 、 D 、 V T **
1 U, D, V^T = np.linalg.svd(A)
SVD与特征值分解的比较与关系
1. 适用矩阵类型
2. 分解形式
3. 数学性质
特征值 :
特征值可以是复数 (如非对称方阵)或实数(对称方阵)
特征向量是矩阵自身空间中的方向,表示线性变换的缩放比例
奇异值 :
奇异值始终是非负实数 ,是A T A A^TA A T A 或A A T AA^T A A T 特征值的平方根
奇异向量(U U U 和V V V )分别对应输入空间和输出空间的正交基 ,描述矩阵在不同方向上的伸缩效应
4. 应用场景
特征值分解 :
主成分分析(PCA)的基础,用于数据降维
分析物理系统的稳定性(如振动模态分析。
奇异值分解 :
处理非方阵数据,如图像压缩(保留主要奇异值)、推荐系统(矩阵补全)、噪声去除(丢弃小奇异值)
更普适的降维工具(如文本分类中的LSA算法)
5. 核心关系
数学联系 :
若(A)是方阵且可进行特征值分解,其奇异值为特征值的绝对值
SVD可视为对任意矩阵的广义特征值分解 ,通过A T A A^TA A T A 和A A T AA^T A A T 间接关联特征值
互补性 :
特征值分解关注矩阵本身的线性变换特性 ,而SVD描述矩阵在输入/输出空间中的正交基变换与伸缩
补充:
本文已涵盖了目前学到的绝大部分知识点,具体的奇异值分解应用实例以及彭罗斯伪逆(The Moore-Penrose Pseudoinverse)、迹(The Trace)的相关知识,请参考MonitSharma/Numerical-Linear-Algebra: A course on Linear Algebra using Python in Jupyter notebooks