svd和eig的区别
1.eig-特征值分解
1.1回顾特征值
A
x
=
λ
x
Ax = \lambda x
Ax=λx
注:
∑
\sum
∑ 为特征值组成的对角阵
W
W
W为特征向量组成的矩阵
则有:
A
W
=
W
∑
AW=W\sum
AW=W∑
所以
A
=
W
∑
W
−
1
A=W \sum W^{-1}
A=W∑W−1
1.2matlab中eig应用
-
[
w
,
s
,
v
]
=
e
i
g
(
X
)
[w,s,v]=eig(X)
[w,s,v]=eig(X)
w-右特征矩阵;
s-特征值;
v-左特征向量;
X ∗ w = w ∗ s X*w=w*s X∗w=w∗s
v ′ ∗ X = s ∗ v ′ v'*X=s*v' v′∗X=s∗v′
其中特征值从小到大排序 -
[
V
,
D
]
=
e
i
g
(
A
,
B
)
[V,D]=eig(A,B)
[V,D]=eig(A,B)
A ∗ V = B ∗ V ∗ D A*V=B*V*D A∗V=B∗V∗D
2.svd-奇异值分解
当被处理的矩阵不是方阵时,就不能用特征值分解方法,就可以考虑奇异值分解。
2.1介绍奇异值分解
X 是 ( m ∗ n ) 矩 阵 X是(m*n)矩阵 X是(m∗n)矩阵
- 对 X T X ( n ∗ n ) X^TX(n*n) XTX(n∗n)进行特征值分解,得到特征向量矩阵,记做 V V V,是右奇异矩阵;
- 对 X X T ( m ∗ m ) XX^T(m*m) XXT(m∗m)进行特征值分解,得到特征向量矩阵,记做 U U U,是左奇异矩阵;
-
[
U
,
S
,
V
]
=
[U,S,V]=
[U,S,V]= svd
(
X
)
(X)
(X)
其中S是从大到小,组成对角阵 - 那么只剩下奇异值矩阵
S
(
m
∗
n
)
S(m*n)
S(m∗n)没有求解
实际上奇异值 σ i = λ i 2 \sigma_i=\sqrt{\lambda^{2}_i} σi=λi2
所以可以求 X T X X^TX XTX求特征值,然后开根号 - X = U S V T X=USV^T X=USVT
注: 考虑到奇异值从大到小和特征值从小到大,考虑实际求取的特征值对应的特征向量可以是成比例的,不一定是一样的,所以
①
[
u
,
s
2
]
=
e
i
g
(
A
∗
A
′
)
①[u,s_2]=eig(A*A')
①[u,s2]=eig(A∗A′)
②
[
u
1
,
s
1
,
v
1
]
=
s
v
d
(
A
)
②[u_1,s_1,v_1]=svd(A)
②[u1,s1,v1]=svd(A)
③
[
v
,
s
3
]
=
e
i
g
(
A
′
∗
A
)
③[v,s_3]=eig(A'*A)
③[v,s3]=eig(A′∗A)
其中奇异值
s
1
s_1
s1是对应的
s
2
和
s
3
s_2和s_3
s2和s3的根号倍;
u
u
u 对应的
u
1
u_1
u1,
v
v
v 对应的
v
1
v_1
v1的也不完全相同,要注意理解。