SVD之前大多讨论的是理论推导, 这次亲自算一算, 看看计算「奇异值」难不难
Example 1
设 A=[101011], x∈R, 计算 A 的奇异值分解.
以下分两步计算:
Step 1
计算右奇异矩阵 V. 因为 A=UΣVT, 所以 ATA=V(ΣTΣ)VT
ATA=100111101011=2112利用 det(ATA−λI)=0 计算特征值
2−λ112−λ\[3pt]\[3pt]=(2−λ)2−1=λ2−4λ+3=(λ−3)(λ−1)所以, 特征值 λ_1=3,λ_2=1. 代入 [2−λ112−λ]x=0 计算特征向量
- λ_1=3
−111−1x=0
易得, v1=∥x∥x=21[1,1]T.
- λ_1=1
1111x=0
易得, v_2=∥x∥x=21[1,−1]T. 所以, 右奇异值矩阵
V=21111−1
以及奇异值矩阵
Σ=λ_1000λ_20=300010
Step 2
计算左奇异矩阵, 利用 AV=UΣ
AV=10101121111−1=211121−10=U300010如果记得
左乘行变换, 右乘列变换
, 可以立即..看..出答案
U=1/61/62/61/2−1/20u_13u_23u_33从 奇异值分解初探 中可知, [u_13,u_23,u_33]T∈N(AT) 即
ATu_13u_23u_33=100111u_13u_23u_33=0解得 [u_13,u_23,u_33]T=31[1,1,−1]T, 所以
U=611123−3022−2
最终得到 A 的奇异值分解为
A=101011=611123−3022−230001021111−1矩阵“奇异度”
上面矩阵 A=[101011] 的秩为 2, 奇异值分别是 3 和 1. 如果第 3 行是两个比上面大得多的数呢? 不妨将它们都设为 x, 求矩阵的奇异值
ATA=1001xx10x01x=1+x2x2x21+x2利用 det(ATA−λI)=0 计算特征值
1+x2−λx2x21+x2−λ\[3pt]\[3pt],(λ−1)=[(1+x2)−λ]2−x4=λ2−2(1+x2)λ+(1+2x2)=[λ−(1+2x2)]则特征值以及对应的奇异值为
⎩⎨⎧λ_1=1+2x2λ_2=1⎩⎨⎧σ_1=1+2x2σ_2=1所以, 当 x 足够大时, 矩阵 A 的“头部”所占信息比重更大, 其更“奇异”,更接近于..秩一矩阵..
Example 2
为展现奇异值分解所表现的“奇异性”, 分别计算 A=[111222334] 和 B=[114222331] 的奇异值, 这次利用 Matlab 求解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| clear
clc
A = [1, 2, 3;
1, 2, 3;
1, 2, 4];
B = [1, 2, 3;
1, 2, 3;
4, 2, 1];
[~, sigma1, ~] = svd(A);
[~, sigma2, ~] = svd(B);
A = sigma1(1,1)/trace(sigma1);
B = sigma2(1,1)/trace(sigma2);
disp("A 的奇异值")
disp(sigma1)
disp(['第一奇异值占比:',num2str(A*100),'%'])
fprintf('\n');
disp("B 的奇异值")
disp(sigma2)
disp(['第一奇异值占比:',num2str(B*100),'%'])
|
得到
A 的奇异值
6.9853 0 0
0 0.4527 0
0 0 0.0000
第一奇异值占比:
93.9137%
B 的奇异值
6.3597 0 0
0 2.9249 0
0 0 0.0000
第一奇异值占比:
68.4975%
两个矩阵都是秩为 2 的矩阵, 只是第 3 行略有不同, 仔细观察, 我们会感觉到矩阵 A 比矩阵 B 更奇异, 而奇异值分解的结果也说明了这一点.
更多..奇异值分解..的内容可以戳 这里