svd奇异值分解

简介

奇异值分解是线性代数中重要的矩阵分解,奇异值分解则是特征分解在任意矩阵上的推广。在信号处理、统计学等领域有重要作用。

原理推导

特征值与特征向量

定义:
svd奇异值分解

符号含义
An*n的矩阵
xn维特征向量
λ矩阵A的特征值

将n个特征值、特征向量进行组合:
svd奇异值分解
一般我们会对x进行单位化,即:向量内积为1。W的n个特征向量为标准正交基,即:
svd奇异值分解
W为酉矩阵(若酉矩阵所有元素为实数,即为正交矩阵),即:
svd奇异值分解

即:
svd奇异值分解

符号含义
Wn个特征向量组成n维方阵
\Lambdan个特征值组成的对角线方阵

这是对方阵A的分解原理,如果不是方阵就需要应用SVD。

SVD奇异值分解推导

  1. 假设一个矩阵M,大小为m*n。
    svd奇异值分解

  2. 对于实对称矩阵,有一个性质就是存在正交矩阵Q,使得:

    svd奇异值分解
    即存在:
    svd奇异值分解

  3. svd奇异值分解

  4. 令:
    svd奇异值分解
    则:
    svd奇异值分解

  5. 由于
    svd奇异值分解
    所以P为正交矩阵。(P,Q都为正交矩阵)

  6. 因此
    svd奇异值分解

  7. 得出结论:我们可以把任意矩阵分解成两个正交矩阵和一个对角阵。

SVD中P和Q的求解

  1. 由于
    svd奇异值分解

    svd奇异值分解


  2. svd奇异值分解

  3. svd奇异值分解

奇异值性质

  1. 奇异值在奇异值矩阵中是从大到小排列的。
  2. 奇异值的减小特别快。
  3. 常常用前几个奇异值和相应的左右向量取表述整个矩阵。如数据压缩,数据去噪,也可以用于推荐算法。

Matlab代码

filename='附件1.xls';
[num,txt,raw] = xlsread(filename,'gearbox00','B1:E29401');
x=1:1:29400;
plot(x,num(1:29400,4));
%奇异值分解,首先需要将数据处理成矩阵形式,矩阵形状应尽量接近方阵。
y1=reshape(num(1:29400,4),28,1050); %29400 = 28 *1050
[u,s,v]=svd(y1);
s1=s;
s(1:10,1:10)%输出奇异值,便是输出对角线元素
u1=u;v1=v;
%下面是滤波程序,假设我们要滤掉第二个奇异值之后的数值
s1(2:28,2:1050)=0;
for i=2:28
u1(i,i)=0;
end
for j=2:28
v1(j,j)=0;
end
%再将处理后的奇异值整合成数据集
y2=u1*s1*v1';
y2=reshape(y2,1,29400); 
%画图
figure();
subplot(2,1,1);
plot(x,num1(1:29400,4),'k');  grid on;             
title('a.原始信号'); 
subplot(2,1,2);
plot(x,y2,'k');grid on;              
title('e.SVD去掉的噪声的信号');

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年5月19日
下一篇 2022年5月19日

相关推荐