文章目录
- 线性代数的常用操作
- 1.向量的内积
- 2.向量的外积
- 3.正交向量
- 4.正交向量组
- 5.向量空间的基与维数
- 6.正交矩阵
- 7.反对称矩阵
- 8.齐次坐标与齐次变换矩阵
- 9.相似矩阵
- 10.相似对角化
- 11.矩阵的特征分解
- 12.奇异值分解SVD
- 12.1 SVD求齐次矩阵方程的最小二乘解
- 13.满秩分解
- 14.Pseudo-Inverse Matrix
- reference
欢迎访问个人网络日志🌹🌹知行空间🌹🌹
线性代数的常用操作
1.向量的内积
- 定义
向量的内积即点乘,其定义如下:
向量 a ⃗ = [ a 1 , a 2 , . . . , a n ] \vec{a} = [a_1,a_2,...,a_n] a=[a1,a2,...,an]
向量 b ⃗ = [ b 1 , b 2 , . . . , b n ] \vec{b} = [b_1,b_2,...,b_n] b=[b1,b2,...,bn]
a ⃗ \vec{a} a和 b ⃗ \vec{b} b的内积公式表示为:
a ⃗ ∙ b ⃗ = a 1 b 1 + a 2 b 2 + . . . + a n b n = ∣ a ⃗ ∣ ∣ b ⃗ ∣ c o s θ \vec{a}\bullet\vec{b}=a_1b_1+a_2b_2+...+a_nb_n=|\vec{a}||\vec{b}|cos\theta a∙b=a1b1+a2b2+...+anbn=∣a∣∣b∣cosθ - 几何意义
两个向量之间的夹角,向量 a ⃗ \vec{a} a在向量 b ⃗ \vec{b} b上的投影。
2.向量的外积
- 定义
a ⃗ × b ⃗ = [ i ⃗ j ⃗ k ⃗ a 1 b 1 c 1 a 2 b 2 c 2 ] = [ b 1 c 2 − b 2 c 1 a 2 c 1 − a 1 c 2 a 1 b 2 − a 2 b 1 ] = [ 0 − c 1 b 1 c 1 0 − a 1 − b 1 a 1 0 ] b ⃗ = a ⃗ ∧ b ⃗ \vec{a} \times \vec{b} = \begin{bmatrix} \vec{i} & \vec{j} & \vec{k}\\ a_1 & b_1 & c_1\\ a_2 & b_2 & c_2 \end{bmatrix}=\begin{bmatrix} b_1c_2-b_2c_1\\ a_2c_1-a_1c_2\\ a_1b_2-a_2b_1 \end{bmatrix}=\begin{bmatrix} 0 & -c_1 & b_1\\ c_1 & 0 & -a_1\\ -b_1 & a_1 &0 \end{bmatrix}\vec{b}=\vec{a}^\wedge \vec{b} a×b= ia1a2jb1b2kc1c2 = b1c2−b2c1a2c1−a1c2a1b2−a2b1 = 0c1−b1−c10a1b1−a10 b=a∧b
式中 ∧ \wedge ∧符号表示把向量 a ⃗ \vec{a} a写成一个反对称矩阵。即:
a ⃗ ∧ = [ 0 − c 1 b 1 c 1 0 − a 1 − b 1 a 1 0 ] \vec{a}^\wedge = \begin{bmatrix} 0 & -c_1 & b_1\\ c_1 & 0 & -a_1\\ -b_1 & a_1 &0 \end{bmatrix} a∧= 0c1−b1−c10a1b1−a10 - 几何意义
外积的结果是一个向量,该向量的模等于向量 a ⃗ \vec{a} a和向量 b ⃗ \vec{b} b围成的平行四边形的面积
3.正交向量
向量的内积等于两个向量长度乘上向量之间的夹角,当两个向量之间夹角的余弦值等于0时,在二维空间,我们称之为垂直,在高维空间中我们称之为正交。
因此正交向量是内积为零的向量。
a ⃗ ⋅ b ⃗ = 0 \vec{a} \cdot \vec{b} = 0 a⋅b=0
4.正交向量组
正交向量组是指一组两两正交且非零的向量。
如果
n
n
n维的向量组:
a
1
⃗
,
a
2
⃗
,
a
3
⃗
,
.
.
.
,
a
r
⃗
\vec{a_1},\vec{a_2},\vec{a_3},...,\vec{a_r}
a1,a2,a3,...,ar两两正交,那么,它们彼此之间一定线性无关。即不存在一组不为0
系数
λ
\lambda
λ满足:
λ 1 a 1 ⃗ + λ 2 a 2 ⃗ + . . . + λ r a r ⃗ = 0 \lambda_1\vec{a_1}+\lambda_2\vec{a_2}+...+\lambda_r\vec{a_r}=0 λ1a1+λ2a2+...+λrar=0
证明很简单,只需要左右同时乘以一个 a 1 ⃗ T \vec{a_1}^T a1T,发现只有 λ 1 = 0 \lambda_1=0 λ1=0时上式才成立。
欢迎访问个人网络日志🌹🌹知行空间🌹🌹
5.向量空间的基与维数
向量空间的定义,向量空间
R
n
\bold{R}^n
Rn由所有的n
维向量
v
⃗
\vec{v}
v组成,向量中的每个元素都是实数。
设 V \bold{V} V为向量空间,如果 r r r个向量 a 1 ⃗ , a 2 ⃗ , a 3 ⃗ , . . . , a r ⃗ ∈ V \vec{a_1},\vec{a_2},\vec{a_3},...,\vec{a_r}\in\bold{V} a1,a2,a3,...,ar∈V,且满足:
- a 1 ⃗ , a 2 ⃗ , a 3 ⃗ , . . . , a r ⃗ \vec{a_1},\vec{a_2},\vec{a_3},...,\vec{a_r} a1,a2,a3,...,ar线性无关;
- V \bold{V} V中任一向量都可由 a 1 ⃗ , a 2 ⃗ , a 3 ⃗ , . . . , a r ⃗ \vec{a_1},\vec{a_2},\vec{a_3},...,\vec{a_r} a1,a2,a3,...,ar线性表示,也就是可由它们生成整个空间。
那么,向量组 a 1 ⃗ , a 2 ⃗ , a 3 ⃗ , . . . , a r ⃗ \vec{a_1},\vec{a_2},\vec{a_3},...,\vec{a_r} a1,a2,a3,...,ar就称为向量空间 V \bold{V} V的一组基, r r r称为向量空间 V \bold{V} V的维数。
对于给定向量空间,虽然会有很多组基,但空间中的任一组基都有相同的向量的数量。
基向量可能不同,但基向量的个数一定相同。
把正交向量组的概念和基的概念融合,设向量组 a 1 ⃗ , a 2 ⃗ , a 3 ⃗ , . . . , a r ⃗ \vec{a_1},\vec{a_2},\vec{a_3},...,\vec{a_r} a1,a2,a3,...,ar是向量空间 V \bold{V} V的一个基,若它们之间彼此正交,那么就称它们是一组规范正交基。
对于一个向量 a ⃗ \vec{a} a,可以很方便地求出它在规范正交基 a i ⃗ \vec{a_i} ai下各个维度的坐标 λ i \lambda_i λi:
λ i = a i ⃗ T a ⃗ \lambda_i=\vec{a_i}^T\vec{a} λi=aiTa
即对于向量 a ⃗ \vec{a} a,在规范正交基下某一个维度的坐标,等于它和整个维度的正交基向量的内积。
若已知向量空间 V \bold{V} V中的一组基 a 1 ⃗ , a 2 ⃗ , a 3 ⃗ , . . . , a r ⃗ \vec{a_1},\vec{a_2},\vec{a_3},...,\vec{a_r} a1,a2,a3,...,ar,如何求 V \bold{V} V的规范正交基呢?
可以使用施密特算法对基进行规范正交化,该算法公式可写成:
b 1 = a 1 b 2 = a 2 − [ b 1 , a 2 ] [ b 1 , b 1 ] b 1 . . . b r = a r − [ b 1 , a 2 ] [ b 1 , b 1 ] b 1 − [ b 2 , a 2 ] [ b 2 , b 2 ] b 2 − . . . − [ b r − 1 , a r − 1 ] [ b r − 1 , b r − 1 ] b r − 1 \begin{align}b_1 &= a_1 \\ b_2 &= a_2 - \frac{[b_1,a_2]}{[b_1,b_1]}b_1\\ ...\\ b_r&=a_r - \frac{[b_1,a_2]}{[b_1,b_1]}b_1 - \frac{[b_2,a_2]}{[b_2,b_2]}b_2- ...-\frac{[b_{r-1},a_{r-1}]}{[b_{r-1},b_{r-1}]}b_{r-1} \end{align} b1b2...br=a1=a2−[b1,b1][b1,a2]b1=ar−[b1,b1][b1,a2]b1−[b2,b2][b2,a2]b2−...−[br−1,br−1][br−1,ar−1]br−1
上式中 [ b 1 , a 2 ] [b_1,a_2] [b1,a2]表示两个向量的内积。
将 b ⃗ \vec{b} b单位归一化后即可求得规范正交基。
6.正交矩阵
正交矩阵矩阵是转置等于逆的方阵,即满足
A T A = E A^TA = E ATA=E
三个性质,
- A − 1 = A T A^{-1}=A^T A−1=AT,且都是正交矩阵, d e t ( A ) = ± 1 det(A)=\pm 1 det(A)=±1
A
和B
都是正交矩阵,并且它们阶数一样,那么AB
也是正交矩阵A
是正交矩阵,向量y
经过A
变换之后行列式保持不变
7.反对称矩阵
反对称矩阵是一个方阵,其转置矩阵和自身的加法逆元相等,即 A T = − A A^T=-A AT=−A
( A + B ) ∨ = A ∨ + B ∨ (A+B)^{\vee}=A^{\vee}+B^{\vee} (A+B)∨=A∨+B∨
8.齐次坐标与齐次变换矩阵
简而言之,齐次坐标就是用N+1维来代表N维坐标。最后新增的一维值为1
或0
(无穷远处的点)。
齐次(homogeneous)从字面上解释是“次数相等”的意思。使用齐次坐标的方便之处在于,对笛卡尔点齐次坐标的任何标量的乘积仍然表示同一个笛卡尔点。齐次坐标有规模不变性。因此被称为齐次坐标。如齐次坐标
(
1
,
2
,
1
)
/
(
2
,
4
,
2
)
/
(
3
,
6
,
3
)
(1,2,1)/(2,4,2)/(3,6,3)
(1,2,1)/(2,4,2)/(3,6,3)都表示同一个笛卡尔点
(
1
,
2
)
(1,2)
(1,2)。对齐次坐标进行变换的矩阵称为齐次变换矩阵。
9.相似矩阵
A和B都是n×n的方阵,若存在可逆矩阵M,使得 B = M − 1 A M B=M^{-1}AM B=M−1AM,则称A和B互为相似矩阵,记作A~B。相似矩阵具有同样的特征值。
如果A有n个线性无关的特征向量,则A可以对角化为 A = S Λ S − 1 A=SΛS^{-1} A=SΛS−1,相当于 S − 1 A S = Λ S^{-1}AS=Λ S−1AS=Λ,A和其特征值矩阵Λ互为相似矩阵,这里的M=S,是特征向量矩阵。实际上A的相似矩阵有很多,我们可以用任意可逆矩阵M代替S,从而求得其他的相似矩阵,Λ是众多相似矩阵中最简洁的一个。
对于 B = M − 1 A M B=M^{-1}AM B=M−1AM,设A,B和C是任意同阶方阵,则有:
(1)反身性:A~A
(2)对称性:若AB,则BA
(3)传递性:若AB,BC,则A~C
(4)若A~B,则二者的特征值相同、行列式相同、秩相同、迹相同。
(5)若A~B,且A可逆,则B也可逆, A − 1 ∼ B − 1 A^{-1}\sim B^{-1} A−1∼B−1。
10.相似对角化
如果一个方阵 A A A相似于对角矩阵,也就是说存在一个可逆矩阵 P P P使得 P − 1 A P P^{-1}AP P−1AP是对角矩阵,则 A A A就被称为可以相似对角化的。
矩阵
A
=
[
1
−
2
−
2
1
]
A=\begin{bmatrix} 1 & -2\\ -2 &1 \end{bmatrix}
A=[1−2−21]
的相似对角化为
[
−
1
1
−
1
−
1
]
−
1
[
1
−
2
−
2
1
]
[
−
1
1
−
1
−
1
]
=
[
−
1
0
0
3
]
\begin{bmatrix} -1 & 1\\ -1 &-1 \end{bmatrix}^{-1}\begin{bmatrix} 1 & -2\\ -2 &1 \end{bmatrix}\begin{bmatrix} -1 & 1\\ -1 &-1 \end{bmatrix}=\begin{bmatrix} -1 & 0\\ 0 &3 \end{bmatrix}
[−1−11−1]−1[1−2−21][−1−11−1]=[−1003]
使用numpy
计算
A
A
A的特征值和特征向量可知:
from numpy import linalg as LA
import numpy as np
mat = np.array([[1, -2],[-2, 1]])
W, V = LA.eig(mat)
print(W,V)
"""output
[ 3. -1.]
[[ 0.70710678 0.70710678]
[-0.70710678 0.70710678]]
"""
对角矩阵中的元素是 A A A的特征值。
相似对角化的好处:
- 1)相似对角化使得同一个线性变换表达方式变的简单
图片引用自https://zhuanlan.zhihu.com/p/138285148
- 2)通过相似对角化(实际为坐标轴旋转)可以消去二次型中的交叉项
图片引用自https://zhuanlan.zhihu.com/p/138285148
11.矩阵的特征分解
对于 m × m m\times m m×m的矩阵 A A A的特征值分解为 A = U Λ U − 1 A = U\Lambda U^{-1} A=UΛU−1, U U U的每一列都是特征向量, Λ \Lambda Λ对角线上的元素是从大到小排列的特征值。
当矩阵
A
A
A是一个对称矩阵时,则存在一个对称对角化分解,即
A
=
Q
Λ
Q
T
A=Q\Lambda Q^T
A=QΛQT,
Q
Q
Q的每一列都是相互正交的特征向量,且是单位向量,
Λ
\Lambda
Λ对角线上的元素是从大到小排列的特征值。将矩阵
Q
Q
Q记作
Q
=
(
q
⃗
1
,
q
⃗
2
,
.
.
.
,
q
⃗
m
)
Q=(\vec{q}_1,\vec{q}_2,...,\vec{q}_m)
Q=(q1,q2,...,qm),则矩阵A可以写为:
A
=
λ
1
q
⃗
1
q
⃗
1
T
+
λ
2
q
⃗
2
q
⃗
2
T
+
.
.
.
+
λ
m
q
⃗
m
q
⃗
m
T
A = \lambda_1\vec{q}_1\vec{q}_1^T + \lambda_2\vec{q}_2\vec{q}_2^T + ... + \lambda_m\vec{q}_m\vec{q}_m^T
A=λ1q1q1T+λ2q2q2T+...+λmqmqmT
12.奇异值分解SVD
当给定一个大小为
m
×
n
m\times n
m×n的矩阵A,虽然矩阵A不一定是方阵,但大小为
m
×
m
m\times m
m×m的
A
A
T
AA^T
AAT和
n
×
n
n\times n
n×n的
A
T
A
A^TA
ATA却是对称矩阵,若
A
A
T
=
P
Λ
1
P
T
AA^T=P\Lambda_1P^T
AAT=PΛ1PT,
A
T
A
=
Q
Λ
2
Q
T
A^TA=Q\Lambda_2Q^T
ATA=QΛ2QT,则矩阵A的奇异值分解为:
A
=
P
Σ
Q
T
A = P\Sigma Q^T
A=PΣQT
P的列向量称为矩阵A的左奇异向量,Q中的列向量称为矩阵A的右奇异向量,矩阵
Λ
1
\Lambda_1
Λ1大小为
m
×
m
m\times m
m×m,矩阵
Λ
2
\Lambda_2
Λ2大小为
n
×
n
n\times n
n×n,两个矩阵对角线上的非零元素相同,矩阵
Σ
\Sigma
Σ的大小为
m
×
n
m\times n
m×n,位于对角线上的元素称为奇异值。若矩阵
Λ
1
\Lambda_1
Λ1对角线的非零元素为
λ
1
,
λ
2
,
.
.
.
,
λ
k
\lambda_1,\lambda_2,...,\lambda_k
λ1,λ2,...,λk,这些特征值也都是非负的,且
Λ
2
\Lambda_2
Λ2与
Λ
1
\Lambda_1
Λ1对角线上的非零元素相同,则矩阵
Σ
\Sigma
Σ对角线上的元素为:
σ 1 = λ 1 , σ 2 = λ 2 , . . . , σ k = λ k , \sigma_1 = \sqrt{\lambda_1},\sigma_2 = \sqrt{\lambda_2},...,\sigma_k = \sqrt{\lambda_k}, σ1=λ1,σ2=λ2,...,σk=λk,
在奇异值分解中,较大的奇异值会决定原矩阵的“主要特征”,可以使用奇异值分解的低秩逼近来截取原矩阵中的主要成分。numpy.linalg
中提供了
.
s
v
d
.svd
.svd函数可用来计算矩阵的奇异值分解:
from numpy import linalg as LA
import numpy as np
mat = np.array([[4, 4],[-3, 3]])
u,s,v = LA.svd(mat)
print(u)
print(s)
print(v)
"""output
[[-1.00000000e+00 0.00000000e+00]
[ 3.70074342e-18 1.00000000e+00]]
[5.65685425 4.24264069]
[[-0.70710678 -0.70710678]
[-0.70710678 0.70710678]]
"""
12.1 SVD求齐次矩阵方程的最小二乘解
13.满秩分解
取自《矩阵论》p179
设A为 m × n m\times n m×n且秩为 r > 0 r\gt0 r>0的复矩阵,记为 A ∈ C r m × n A\in\mathbb{C}_r^{m\times n} A∈Crm×n,如果存在矩阵 B ∈ C r m × r B\in \mathbb{C}^{m\times r}_r B∈Crm×r和 C ∈ r × n r C\in\mathbb{r\times n}_r C∈r×nr,使得 A = B C A=BC A=BC,则称 B , C B,C B,C为矩阵A的最大秩分解,满秩分解。
设 A ∈ C r m × n A\in\mathbb{C}_r^{m\times n} A∈Crm×n,则一定存在 B ∈ C r m × r B\in \mathbb{C}_r^{m\times r} B∈Crm×r和 C ∈ C r r × n C\in \mathbb{C}_r^{r\times n} C∈Crr×n,使得 A = B C A=BC A=BC
例如求矩阵A的满秩分解:
A = [ 1 4 − 1 5 6 2 0 0 4 6 − 1 2 − 4 − 4 − 19 1 − 2 − 1 − 1 − 6 ] A=\begin{bmatrix} 1 & 4 & -1 & 5 & 6\\ 2 & 0 & 0 & 4 & 6\\ -1 & 2 & -4 & -4 & -19\\ 1 & -2 & -1 & -1 & -6 \end{bmatrix} A= 12−11402−2−10−4−154−4−166−19−6
A进行初等行变换化为行标准形为:
A ≃ [ 1 0 0 2 3 0 1 0 1 2 0 0 1 1 5 0 0 0 0 0 ] A\simeq\begin{bmatrix} 1 & 0 & 0 & 2 & 3\\ 0 & 1 & 0 & 1 & 2\\ 0 & 0 & 1 & 1 & 5\\ 0 & 0 & 0 & 0 & 0 \end{bmatrix} A≃ 10000100001021103250
取A的前三列组成矩阵
B
=
[
1
4
−
1
2
0
0
−
1
2
−
4
1
−
2
−
1
]
B = \begin{bmatrix} 1 & 4 & -1\\ 2 & 0 & 0\\ -1 & 2 & -4\\ 1 & -2 & -1 \end{bmatrix}
B=
12−11402−2−10−4−1
再取A的行标准形的前三个非零行,组成矩阵
C
=
[
1
0
0
2
3
0
1
0
1
2
0
0
1
1
5
]
C=\begin{bmatrix} 1 & 0 & 0 & 2 & 3\\ 0 & 1 & 0 & 1 & 2\\ 0 & 0 & 1 & 1 & 5\\ \end{bmatrix}
C=
100010001211325
可以求得 A = B C A=BC A=BC
14.Pseudo-Inverse Matrix
1920年摩尔提出广义逆的概念,1955年以4个方程的形式给出了广义逆矩阵的定义。
定义:设
A
∈
R
m
×
n
A\in\mathbb{R}^{m\times n}
A∈Rm×n,若存在
n
×
m
n\times m
n×m阶矩阵G,同时满足:
A
G
A
=
A
G
A
G
=
G
(
A
G
)
T
=
A
G
(
G
A
)
T
=
G
A
AGA=A \\ GAG=G \\ {(AG)}^T=AG \\ {(GA)^T}=GA
AGA=AGAG=G(AG)T=AG(GA)T=GA
则称G为A的加号逆,或伪逆,或摩尔彭斯逆(Moore–Penrose pseudoinverse
),通常记为
A
+
A^+
A+
对于任意 A ∈ R m × n A\in \mathbb{R}^{m\times n} A∈Rm×n,其伪逆存在且唯一。
伪逆的求法:
- (1)如果A为满秩方阵,则 A + = A − 1 A^+=A^{-1} A+=A−1
- (2)如果
A
=
d
i
a
g
(
d
1
,
d
2
,
.
.
.
,
d
n
)
A=diag(d_1,d_2,...,d_n)
A=diag(d1,d2,...,dn),
d
i
∈
R
(
i
=
1
,
2
,
.
.
,
n
)
d_i\in\mathbb{R}(i=1,2,..,n)
di∈R(i=1,2,..,n),则
A + = d i a g ( d 1 + , d 2 + , . . . d n + ) , 其中 , d i + = { 0 , d i = 0 时 1 d i , d i ≠ 0 时 A^+ = diag(d_1^+,d_2^+,...d_n^+),\\其中,d_i^+=\left\{\begin{matrix} 0,d_i=0时 \\ \frac{1}{d_i},d_i\neq0时 \end{matrix}\right. A+=diag(d1+,d2+,...dn+),其中,di+={0,di=0时di1,di=0时 - (3)如果A为行满秩矩阵,
A + = A R − 1 = A T ( A A T ) − 1 A^+=A_R^{-1}=A^T(AA^T)^{-1} A+=AR−1=AT(AAT)−1 - (4)如果A为列满秩矩阵,
A + = A L − 1 = ( A T A ) − 1 A T A^+ = A_L^{-1} = (A^TA)^{-1}A^T A+=AL−1=(ATA)−1AT - (5)如果A为降秩的
m
×
n
m\times n
m×n矩阵,可用满秩分解求
A
+
A^+
A+,即将A满秩分解为
A
=
B
C
A=BC
A=BC,其中B列满秩,C行满秩,且
r a n k ( B ) = r a n k ( C ) = r = r a n k ( A ) < m i n m , n , rank(B) = rank(C) = r = rank(A) \lt min{m,n}, rank(B)=rank(C)=r=rank(A)<minm,n,
则有:
A + = C R − 1 B L − 1 = C + B + A^+ = C_R^{-1}B_L^{-1} = C^{+}B^+ A+=CR−1BL−1=C+B+
这里:
B L − 1 = ( B T B ) − 1 B T , C R − 1 = C T ( C C T ) − 1 B_L^{-1} = (B^TB)^{-1}B^T,C_R^{-1}=C^T(CC^T)^{-1} BL−1=(BTB)−1BT,CR−1=CT(CCT)−1
from numpy import linalg as LA
import numpy as np
A = np.array([[1,1,0,1,0],[0,1,1,1,1],[1,0,1,1,0]])
LA.pinv(A)
"""output
array([[ 0.33333333, -0.33333333, 0.33333333],
[ 0.5 , 0.25 , -0.5 ],
[-0.5 , 0.25 , 0.5 ],
[ 0.16666667, 0.08333333, 0.16666667],
[-0.16666667, 0.41666667, -0.16666667]])
"""
欢迎访问个人网络日志🌹🌹知行空间🌹🌹
reference
- 1.https://zhuanlan.zhihu.com/p/50066691
- 2.https://zhuanlan.zhihu.com/p/75060237
- 3.https://zhuanlan.zhihu.com/p/103636446