矩阵的奇异值分解(MATLAB自编)实验报告

合集下载

矩阵的奇异值分解及其实际应用

矩阵的奇异值分解及其实际应用

矩阵的奇异值分解及其实际应用矩阵的奇异值分解(Singular Value Decomposition,SVD)是一种重要的矩阵分解方法,它在数据处理、信号处理、图像处理、自然语言处理等领域有广泛的应用。

一、SVD的定义和原理SVD是一种矩阵分解方法,把一个矩阵分解为三个矩阵的乘积,即:$A=U\Sigma V^T$其中,$A$为一个$m\times n$的矩阵,$U$为$m\times m$的酉矩阵,$\Sigma$为$m\times n$的对角矩阵,$V$为$n\times n$的酉矩阵,$T$表示转置。

$\Sigma$中的对角元素称为奇异值,是矩阵$A$的奇异值分解中的核心。

$\Sigma$中的奇异值按从大到小的顺序排列,它们可以用来表示原始矩阵$A$的主要特征。

在一些情况下,我们只需要保留前$k$个最大的奇异值对应的列向量组成的$\Sigma$和对应的$U$、$V$矩阵,即可以得到一个$k$维的近似矩阵,这种方法称为截断奇异值分解。

SVD的原理可以利用矩阵的特征值和特征向量的概念来解释。

对于一个$n\times n$的矩阵$A$,它可以表示为:$A=Q\Lambda Q^{-1}$其中,$Q$为特征向量矩阵,$\Lambda$为特征值矩阵,这里我们假设$A$是对称矩阵。

SVD可以看做是对非对称矩阵的特征值和特征向量的推广,它把矩阵$A$分解为$U\Sigma V^T$,其中,$U$矩阵的列向量为$AA^T$的特征向量,$V$矩阵的列向量为$A^TA$的特征向量,而$\Sigma$则由$AA^T$和$A^TA$的特征值的平方根构成。

二、SVD的应用SVD在数据处理、信号处理、图像处理、自然语言处理等领域都有广泛的应用。

1、数据处理在数据分析和数据挖掘中,我们常常需要对数据进行降维,以便于可视化和分析。

SVD可以对数据进行降维,并且保留了数据的主要特征。

例如,我们可以利用SVD对用户-物品评分矩阵进行降维,得到一个低维的用户-主题矩阵和一个低维的主题-物品矩阵,从而实现推荐系统。

使用奇异值分解进行矩阵分解的实际应用(七)

使用奇异值分解进行矩阵分解的实际应用(七)

在实际生活和工作中,我们经常会遇到需要对大量数据进行分析和处理的情况。

而在进行数据分析时,矩阵分解是一种非常重要的技术手段。

而奇异值分解(Singular Value Decomposition,简称SVD)作为一种常用的矩阵分解方法,在实际应用中有着广泛的应用场景。

本文将就奇异值分解在实际应用中的一些典型案例进行介绍和讨论。

首先,奇异值分解在图像压缩和降噪中有着重要的应用。

在数字图像处理中,图像可以看作是一个二维矩阵,而奇异值分解可以将这个矩阵分解成三个矩阵的乘积。

通过保留最重要的奇异值和对应的左右奇异向量,可以实现对图像的压缩和降噪。

这种方法不仅可以减小图像所占用的存储空间,还可以去除图像中的噪声,提高图像的质量和清晰度。

因此,奇异值分解在图像处理领域有着广泛的应用,例如在数字摄影、医学影像处理和视频压缩等方面都有着重要的作用。

其次,奇异值分解在推荐系统和信息检索中也有着重要的应用。

在推荐系统中,常常需要分析用户和物品之间的关系,而这种关系可以看作是一个矩阵。

通过对这个矩阵进行奇异值分解,可以得到用户和物品的隐含特征,从而实现对用户的个性化推荐。

同时,在信息检索中,奇异值分解也可以用于对文本数据进行降维和表示。

通过将文本数据转化为矩阵,并对这个矩阵进行奇异值分解,可以得到文本的语义信息和主题结构,从而实现对文本数据的有效表示和分析。

因此,奇异值分解在推荐系统和信息检索领域有着重要的应用,可以帮助提高用户体验和信息检索的准确度。

此外,奇异值分解还在信号处理和通信系统中有着重要的应用。

在信号处理中,奇异值分解可以用于对信号进行降维和去噪,从而提高信号的质量和准确度。

同时,在通信系统中,奇异值分解也可以用于多输入多输出(MIMO)系统的信道估计和预编码,从而实现对信道的有效建模和利用。

因此,奇异值分解在信号处理和通信系统领域也有着广泛的应用,并可以帮助提高信号处理和通信系统的性能和效率。

综上所述,奇异值分解作为一种重要的矩阵分解方法,在实际应用中有着广泛的应用场景。

使用奇异值分解进行数据降维的最佳实践(七)

使用奇异值分解进行数据降维的最佳实践(七)

奇异值分解(SVD)是一种常用的矩阵分解方法,被广泛应用于数据降维、特征提取和信号处理等领域。

在实际应用中,如何有效地使用奇异值分解进行数据降维是一个关键的问题。

本文将从应用角度出发,介绍使用奇异值分解进行数据降维的最佳实践。

一、奇异值分解简介奇异值分解是将一个矩阵分解为三个矩阵的乘积的过程,即A=UΣV^T,其中 A 是m×n 的矩阵,U 是m×m 的正交矩阵,Σ 是m×n 的对角矩阵,V^T 是n×n 的正交矩阵。

奇异值分解的基本思想是将原始矩阵表示为一系列特征的线性组合,通过保留最重要的特征来实现数据降维。

二、数据降维的意义数据降维是指通过保留数据的主要特征,将数据映射到低维空间中。

在大数据时代,数据量呈指数级增长,高维数据不仅增加了存储和计算的成本,也增加了数据分析和挖掘的难度。

因此,数据降维成为了解决高维数据问题的重要手段,可以有效地提高数据处理和分析的效率。

三、奇异值分解在数据降维中的应用在实际应用中,奇异值分解可以被用于特征提取、噪声去除和数据压缩等方面。

通过保留最重要的奇异值和对应的左右奇异向量,可以实现高效的数据降维。

首先,奇异值分解可以被用于特征提取。

在图像处理和模式识别领域,奇异值分解可以提取图像的主要特征,实现图像的压缩和去噪。

其次,奇异值分解也可以被用于数据压缩。

通过保留最重要的奇异值和对应的奇异向量,可以将原始数据压缩到较低的维度,从而节省存储空间和降低计算成本。

最后,奇异值分解还可以被用于噪声去除。

在信号处理和通信领域,奇异值分解可以通过去除小的奇异值来消除噪声,提高信号的质量和可靠性。

四、使用奇异值分解进行数据降维的最佳实践在实际应用中,使用奇异值分解进行数据降维需要考虑多个因素,包括选择合适的奇异值个数、选择合适的距离度量和选择合适的应用场景等。

首先,选择合适的奇异值个数是使用奇异值分解进行数据降维的关键。

一般来说,可以根据奇异值的大小和累积能量来选择合适的奇异值个数。

利用Matlab进行线性代数问题求解的方法与案例

利用Matlab进行线性代数问题求解的方法与案例

利用Matlab进行线性代数问题求解的方法与案例引言线性代数是数学的一个重要分支,广泛应用于工程、物理、计算机科学等领域。

而Matlab作为一种功能强大的数值计算软件,提供了各种实用的工具和函数,可以方便地解决线性代数问题。

本文将介绍一些常用的线性代数问题求解方法,并通过具体的案例来展示Matlab在实际应用中的效果。

一、线性方程组的求解线性方程组是线性代数中最基础的问题之一。

Matlab提供了多种求解线性方程组的函数,如“backslash”操作符(\)和“linsolve”函数等。

下面通过一个实例来说明Matlab的线性方程组求解功能。

案例:假设有以下线性方程组需要求解:2x + 3y - 4z = 53x - 2y + z = 8x + 5y - 3z = 7在Matlab中输入以下代码:A = [2 3 -4; 3 -2 1; 1 5 -3];b = [5; 8; 7];x = A\b;通过以上代码,我们可以得到线性方程组的解x=[1; -2; 3]。

这表明在满足以上方程组的条件下,x=1,y=-2,z=3。

可以看出,Matlab在求解线性方程组时,使用简单且高效。

二、矩阵的特征值和特征向量求解矩阵的特征值和特征向量也是线性代数中的重要概念。

利用特征值和特征向量可以得到矩阵的许多性质和信息。

在Matlab中,我们可以通过“eig”函数来求解矩阵的特征值和特征向量。

案例:假设有一个2x2矩阵A,需要求解其特征值和特征向量。

在Matlab中输入以下代码:A = [2 3; 1 4];[V, D] = eig(A);通过以上代码,我们可以得到矩阵A的特征向量矩阵V和特征值矩阵D。

具体结果如下:特征向量矩阵V = [0.8507 -0.5257; 0.5257 0.8507]特征值矩阵D = [1.5858 0; 0 4.4142]由结果可知,矩阵A的特征向量矩阵V和特征值矩阵D可以提供有关该矩阵的很多信息,如相关线性变换、对称性等。

matlab基于svd算法计算点集之间的变换矩阵

matlab基于svd算法计算点集之间的变换矩阵

一、概述在计算机视觉和图像处理领域,点集之间的变换矩阵是非常重要的一部分。

通过计算点集之间的变换矩阵,可以实现图像的配准、目标跟踪、姿态估计等应用。

而在matlab中,基于奇异值分解(SVD)算法来计算点集之间的变换矩阵是一种常见且有效的方法。

本文将介绍如何利用matlab中的SVD算法来计算点集之间的变换矩阵。

二、奇异值分解(SVD)算法简介SVD是一种矩阵分解的方法,它将一个矩阵分解为三个矩阵的乘积。

对于一个矩阵A,其SVD分解可以表示为:A = U * S * V',其中U 和V是正交矩阵,S是对角矩阵。

SVD分解可以帮助我们理解矩阵的性质,并在计算点集之间的变换矩阵时提供了重要的数学基础。

三、点集之间的变换矩阵在计算机视觉和图像处理中,我们常常需要计算一个点集到另一个点集之间的变换矩阵,以实现图像的配准和对齐。

假设有两个点集P和Q,它们分别包含了n个点,我们希望找到一个变换矩阵T,使得对于任意的点p_i∈P,都存在一个对应的点q_i∈Q,满足q_i = T * p_i。

四、 matlab中基于SVD算法计算变换矩阵的实现在matlab中,可以利用SVD算法来计算点集之间的变换矩阵。

以下是一个基于SVD算法计算点集之间的变换矩阵的matlab代码示例:```matlabfunction transformation_matrix = calculate_transform_matrix(P, Q)P和Q分别为两个点集,每一列代表一个点计算均值中心化mean_P = mean(P, 2);mean_Q = mean(Q, 2);P_centered = P - mean_P;Q_centered = Q - mean_Q;计算协方差矩阵covariance_matrix = P_centered * Q_centered';对协方差矩阵进行SVD分解[U, ~, V] = svd(covariance_matrix);计算旋转矩阵RR = V * U';计算平移矩阵tt = mean_Q - R * mean_P;构造变换矩阵transformation_matrix = eye(3);transformation_matrix(1:2, 1:2) = R;transformation_matrix(1:2, 3) = t;end```五、结论通过使用matlab中的SVD算法,我们可以有效地计算点集之间的变换矩阵,从而实现图像的配准、目标跟踪等应用。

矩阵的LU分解(自编MATLAB)实验报告

矩阵的LU分解(自编MATLAB)实验报告

1矩阵的LU 分解LU 分解原理定理:设A C n n,如果 A 的顺序主子式A 11≠0, |a 11a 12a21a 22|≠0,…,|a 11a 12a 21a 22…a 12…a 22⋮⋮a n−11a n−12⋮⋯a n−1n−1|≠0 则存在唯一的主对角线上元素全为 1 的下三角矩阵L 与唯一的上三角矩阵 U ,使得A =LU .证明:对矩阵A 的阶数使用数学归纳法.显然,当 n=1 时,A 11=1 ∙A 11 就是唯一的分解式。

现假定对 n-1 阶矩阵,定理的结论成立。

对 A 进行分块A =(A A −A A A A AAA AA)其中A A ,A A ∈A A −A.由于 n-1 阶矩阵 A A −A 的 k 阶顺序主子式就是 A 的 k 阶主子式(k=1,2,…,n-2),故它们都不为零.从而由归纳法假设,A A −A 有唯一的 LU 分解A A −A =A A −A A A −A其中A A −A 的主对角线上的元素都1.由于 |A A −A |=|A 11A 12A 21A 22…A 12…A 22⋮⋮A A −11A A −12⋮⋯A A −1A −1|=|A A −A A A −A |≠0所以A A −A 及A A −A 是n-1阶可逆矩阵 先假设已有 A =LU ,其中L =(A A −A 0AA1), U= (A A −A A AAA AA)A ,A ∈A A −A是待定向量。

作乘积AA = (A A −A A A −A A A −A A A A A A −A A AA +A A A ) =(A A −A A AA A AA AA)=A 则A,A 必须满足A A −A A =A A ,A A A A −A =A A A ,A AA +A AA =A AA注意到A A −A 及A A −A 都是n-1阶可逆矩阵,则由上式可惟一确定A =A A −A −A A A ,A A =A A A A A −A −A, A AA =A AA −A A A这就证明了 A 的 LU 分解的存在性和唯一性.LU 分解算法当 n 阶矩阵满足定理的条件时,可以用初等变换的方法求出 L 和 U .因为当 A=LU 时,由于 L 可逆,故必存在可逆矩阵 P 使得AA =A即 PA=PLU=U .也就是说,可以先对 A 施行行的初等变换得出上三角矩阵U ,而矩阵 P 可以通过对单位矩阵I 进行相同的行初等变换得出,即P(A,I) =(PA,PI) =(U,P)于是A =A −A A ,为保持P 为下三角矩阵(从而A −A也是下三角矩阵),在进行行初等变换时,不能进行行的对换,上行的倍数应加到下行的对应元.LU 分解用于解方程组矩阵的三角分解在求解线性方程组时十分方便.如对线性方程组 AA =A ,设A =AA .我们先求解方程组 AA =A . 由于A 是下三角矩阵,则解向量A 可以通过依次求出其分量 A 1,A 2,⋯A A 而求出,在求解方程组AA =A .解向量A 可以通过该方程组依次求出分量A A ,⋯,A 2,A 1而快速得出.于是由两个方程组AA =A ,AA =A 的求解而给出AAA =AA =A = AA 的解.程序流程图MATLAB程序function f=LU_decom(A)[m,n]=size(A)if m~=nfprintf('Error:m and n must be equal!m=%d,n=%d\n',m,n) endfor i=1:n-1if (det(A(1:i,1:i))==0)fprintf('Error:det A(%d,%d)=0!\n',i,i) flag='failure'return;elseflag='ok';endendL=eye(n);U=zeros(n);for i=1:nU(1,i)=A(1,i);endfor r=2:nL(r,1)=A(r,1)/U(1,1);endfor i=2:nfor j=i:nz=0;for r=1:i-1z=z+L(i,r)*U(r,j);endU(i,j)=A(i,j)-z;endif abs(U(i,i))<epsflag='failure'return;endfor k=i+1:nm=0;for q=1:i-1m=m+L(k,q)*U(q,i);endL(k,i)=(A(k,i)-m)/U(i,i); endendLU实际数据计算已知矩阵A=(211 410−221),A=(121),先对A进性LU分解,并求解方程 A A=A的解.(1)A的LU分解在MATLAB命令行中输入A=[2 1 1;4 1 0;-2 2 1];并调用以上函数可得如下结果>> A=[2 1 1;4 1 0;-2 2 1];LU_decom(A)m =3n =3L =1 0 02 1 0-1 -3 1U =2 1 10 -1 -20 0 -4(2)解方程组,程序及结果如下%-----用LU分解解线性方程组------y=zeros(n,1);y(1)=b(1);for i=2:ny(i)=b(i)-sum(L(i,1:i-1)'.*y(1:i-1));endyx(n)=y(n)/U(n,n);for i=n-1:-1:1x(i)=(y(i)-sum(U(i,i+1:n)'.*x(i+1)))/U(i,i);endx=x'运行结果如下:y =12x =数据分析调用MATLAB固有的LU分解函数,以及解方程组相关函数对以上数据进行计算,运行结果如下:>> A=[2 1 1;4 1 0;-2 2 1];>> b=[1 2 1]';>> [L,U]=lu(A)L =0 0U =0 0>> X=inv(A)*bX =经比对结果相同,可见以上程序可行。

矩阵计算——MATLAB——奇异值分解在A+上的应用

矩阵计算——MATLAB——奇异值分解在A+上的应用

pinv(A)和inv(A)的对比结果:
六、心得体会 通过本次实验我会利用 MATLAB 求矩阵的 A+,在实验时,首先要了解 A+数学求法思路,然 后利用所学的 MATLAB 知识,对矩阵进行各种变换,即可求出 A 。当然也可通过 pinv 函数直接 求 A+。 本次实验中我理解了 inv 函数与 pinv 函数的不同,通过实验的验证,我知道用 inv 函数 不能求出矩阵的广义逆,是因为 inv 函数只能求方阵的逆,而 pinv 函数可以直接求矩阵 A 的广 义逆。
四、实验步骤 1、用奇异值分解的方法求 A+ 法一: (1)在实验时,双击 matlab 软件,首先建立 M 文件。具体操作:File→new→M-file →写代码→保存。 算法代码如下: function [U D V]=UDV(A) [m,n]=size(A); B=A'*A; [V,D1]=eigs(B); r=rank(A); orth(V); V1=V(:,1:r); D2=sqrtm(D1); D3=D2(1:r,1:r); U1=A*V1*inv(D3); D4=inv(D3); [m1,n1]=size(U1); [m3,n3]=size(V); [m4,n4]=size(D4); 利用法二得到的结果:
+
姓 名
学 号
专业班级 实验名称 奇异值分解在 A+上的应用 实验日期 指导教师
课程名称 矩阵分析与计算 同组人员
得分
一、实验目的 1、掌握用奇异值分解的方法求 A+ ; 2、学会使用 pinv 函数求广义矩阵; 3、理解 inv 函数与 pinv 函数的不同; 4、利用 MATLAB 编程求矩阵的奇异值 A+; 二、实验内容 利用奇异值分解的方法求 A+ 。

基于Matlab的数值分析实验的设计r——以矩阵的奇异值分解为例

基于Matlab的数值分析实验的设计r——以矩阵的奇异值分解为例

基于Matlab的数值分析实验的设计r——以矩阵的奇异值分解为例杨海涛【摘要】基于Matlab的数学实验,目的是为了提高普通高校学生的数学兴趣和动手能力,为培养解决实际数学问题的能力而设计的实验方法和步骤.利用矩阵的奇异值分解svd函数的数值算法设计了一种在实验课上用svd算法仿真的实验方案.【期刊名称】《内蒙古民族大学学报(自然科学版)》【年(卷),期】2016(031)006【总页数】4页(P465-468)【关键词】数学实验;数值计算;Matlab;奇异值分解【作者】杨海涛【作者单位】内蒙古民族大学数学学院,内蒙古通辽 028043【正文语种】中文【中图分类】O241.4利用计算机计算解决实际问题时需要建立数学模型,同时也需要相应数学软件的支持,为了更好的掌握数学软件这一有利的工具,本文通过Matlab中的矩阵的奇异值分解〔1〕svd函数设计了如何学习和掌握该函数的实验方法,从而可以进一步学习其它函数.目前,Matlab在计算仿真和图形图像的压缩处理〔2~4〕有着广泛的应用,希望这个实验方法能够给正在学习数学软件的学生起到抛砖引玉的作用.1.1 理论基础任意复长方矩阵的奇异值分解定理如下(Autonne-Eckart-Young定理):〔5〕设A为一个m×n的实矩阵(m≥n),则存在正交矩阵V和U,使得:其中∑=diag(σ1,σ2,…,σr),而且σ1≥σ2≥…≥σr≥0.奇异值分解在统计分析、信号与图像处理、系统理论和控制中有着广泛的应用. 1.2 SVD的数值算法〔6〕求解一般矩阵奇异值问题最常用的算法可分为两大类:一类是QR分解的方法;另一类是Jacobi旋转的方法.奇异值分解的QR分解法分为两个阶段:一是矩阵的二重对角化,即利用Householder变换把矩阵A变换成二重对角矩阵.这个过程就是追赶(chasing)过程〔7〕.二是QR分解,即保持二重对角矩阵形式不变,利用正交变换使对角线元素逐渐减小,使得矩阵接近对角矩阵.1.2.1 svd函数.对于matlab中的svd函数不是开源的,但通过调研得知该函数的算法就是采用propack中的lansvd函数的算法.其算法过程如下:对于任意的矩阵Am×n可以利用lanczos过程将其双对角化,即存在m阶正交矩阵Q和n阶正交矩阵W满足:其中为一双对角阵,且αi, βi∈R (i=1, 2, …, n),这里假设了m>n.上面的分解是逐步的利用Householder左右变换得到的.算法中利用了已知函数完成的双对角化过程.这里如果我们已经知道Bn的svd分解为其中Vn+1为n+1阶正交矩阵,的广义对角矩阵Un为n阶正交矩阵.则有令V=Qn+1Vn+1,其前r列为对应的左奇异向量,令U=WUn,其前r列为对应的右奇异向量.因此算法的关键在于计算矩阵Bn的svd分解.因为Bn是一个双对角矩阵,它的奇异值分解计算比较简单,运算量较小,利用Givens变换,算法复杂度仅为O(n).在我们这个程序中,直接调用了库函数svd 计算Bn的奇异值.1.2.2 svds函数.对于matlab中的svds函数,算法流程如下:(1)对于m×n阶矩阵A,构造(m+n)×(m+n)阶矩阵,其中O是稀疏矩阵. (2)利用eigs函数计算出B矩阵的特征值矩阵D,以及D对应的正交阵W. (3)根据输入参数,按要求输出最大特征值、最接近某参数的特征值或对特征值进行排序等.(4)根据设定的阀值,对矩阵进行筛选得到U矩阵,对矩阵筛选得到V矩阵,对D矩阵进行筛选得到S矩阵.(5)根据S中元素的大小对U、V、S进行排序.(6)输出结果.有如下J-W定理(Jordan-Wielandt定理):若σ1≥σ2≥…≥σp-1≥σp是矩阵Am×n的奇异值(其中,p=min{m,n}),则上述B矩阵具有2p个非零特征值-σ1,…,-σp,σp,…,σ1和|m-n|个零特征值,与非零特征值(±σj)相对应的特征向量为若m≠n,另有特征向量分别对应于m>n或m<n.svds函数的基本思想就是构造出这样的矩阵B,并且求出其特征值和特征向量,然后根据函数重构的条件(所需奇异值的数量、最大最小等),求出所需的奇异值和对应的向量.2.1 矩阵生成生成10个不同的m×n的矩阵,这里取m=120 , n=50,对这10个矩阵进行svd分解.矩阵生成的方法是先做出矩阵的奇异值,然后用QR分解做出10个120阶正交阵和10个50阶正交阵,再利用奇异值分解公式生成10个矩阵A.10个矩阵的奇异值(均为25个)如表1所示.2.2 仿真结果2.2.1 计算时间svd和svds两种方法对十个矩阵进行奇异值分解消耗的时间如表2,单位是秒.可见,svd函数运行时间一般要小于svds函数运行时间.2.2.2 最小奇异值计算准确率.通过对比最小特征值的计算准确度,将每种算法特征值的最小值与矩阵最开始生成时的最小特征值进行比较.比较结果两种方法对10个矩阵的svd分解运算最小特征值的误差均几乎为0,都在10-15次方的量级左右,见表3.其中delta_min_svd和delta_min_svds是matlab程序中两个变量值.这个误差已经和截断误差非常接近了,因此可以认为两种方法都能较好的进行奇异值计算.2.2.3 左右奇异值向量计算准确率.由于svd分解后U、V矩阵的不唯一性,这里我们只看生成的U、V的正交性是不是依然比较完好.通过计算每一列和它的转置相乘减去单位阵也都在10-15这样的量级,因此svd和svds对于正交性的保持都是非常好的.综上所述,通过上述设计的方法和步骤,完全可以掌握matlab中的M-文件和.mat文件的使用方法,并且能熟练掌握奇异值分解的理论知识和具体计算方法,才能为以后svd应用打下基础,这样的实验方法才有实际的意义,才是真正的综合设计实验.本文的宗旨在于引导学生如何用数学软件完成一个实验设计,同时掌握这个实验的目的、相关内容实验的方法和手段.〔1〕尹芳黎,杨雁莹,王传栋,等.矩阵奇异值分解及其在高维数据处理中的应用〔J〕.数学的实践与认识,2011,45(15): 171-176.〔2〕胡乡峰,卫金茂.基于奇异值分解(SVD)的图像压缩〔J〕.东北师大学报:自然科学版,2006,38(3):36-39.〔3〕曾超,张陈,徐永利.基于奇异值分解的图像压缩及其matlab实现〔J〕.科技信息,2010,14:484.〔4〕向培素.一种自适应AP算法的matlab实现〔J〕.西南民族大学学报:自然科学版,2014,40(16):877-882.〔5〕张贤达.矩阵分析与应用〔M〕.北京:清华大学出版社,2004.358-360. 〔6〕姜健飞,胡良剑,唐俭.数值分析及其matlab实验〔M〕.北京:科学出版社,2004.6,219-224.〔7〕山晓东,李园.一类不可约L-矩阵的预条件AOR迭代法〔J〕.湖北民族学院学报:自然科学版,2014,32(2):128-132.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

end B=B(:,1:n); B=B.'; V=qr(B); V1=V(:,1:r); U(:,1:r)=A*V1*(inv(D(1:r,1:r))); U(:,r+1:m)=null(A*A'); end
2.5 运行与数据分析
以教材上的 A=[1 0;0 1;1 0]为例来验证上述求矩阵的奇异值分解 程序的正确性。在 matlab 运行结果如下: >> A=[1 0;0 1;1 0]; >> [U1,D1,V1] = SVDecom(A) U1 = 0.7071 0 0.7071 D1 = 1.4142 0 0 V1 = 1 0 0 1 0 1.0000 0 0 1.0000 0 0.7071 0 -0.7071
s11 1 1 即有 U1=AV1 .其中 =
s2 1
sr 1
第四步: 解方程组 AAHy = 0, 对基础解系单位正交化可以求得 γr+1, γr+2,…,γm,令 U =(γ1 , γ2 , … , γr , γr+1 , γr+2 , … , γm).
2 矩阵的奇异值分解
2.1 原理
设 A∈Cm×n,s1,s2,…,sr 是 A 的非零奇异值,则存在 m 阶酉矩 阵 U∈Cm×n 及 n 阶酉矩阵 V,m× n 矩阵 D,
s1 0 0 0 0 D= 0 0 sr 0 0 0 0 0 0 = 0 0 0 0
使得 A=UDVH 这就是矩阵 A 的奇异值分解.
2.2 算法
第一步:求出 AHA 的特征值 1 ≥ 2 ≥…≥ r >0= r 1 =…= n ,确定非 零奇异值 si = i ,i=1,2 …, r. 第二步:分别求出矩阵 AHA 的对应于特征值 i 的特征向量并将其 单位正交化,得到标准正交向量组 α1 , α2 , … , αn 令 V=(α1 , α2 , … , αn)=(V1 , V2) ,V1=(α1 , α2 , … , αr) ,V2= (αr+1 ,αr+2 , …, αn) 第三步:若 U=(γ1 , γ2 , … , γr , γr+1 , γr+2 , … , γm)=(U1 , U2) ,其 中 U1=(γ1 , γ2 , … , γr) , U2=(γr+1 , γr+2 , … , γm) , 则因(Aα1 , Aα2 , … , Aαr)=(s1γ1 , s2γ2 , … , srγratlab 自带求解矩阵奇异值分解函数: [U,S,V] = svd(A)其 中 U 就是所求的 U 矩阵,S 是所求的对角阵,V 就是所求的酉矩阵
V. 在 matlab 中运行下述指令: >> A=[1 0;0 1;1 0]; >> [U0,D0,V0] = svd(A) U0 = -0.7071 0 -0.7071 D0 = 1.4142 0 0 V0 = -1 0 0 1 0 1.0000 0 0 1.0000 0 -0.7071 0 0.7071
2.3 程序流程图
输入矩阵A
AHA的特征值及对应特征 向量
AHA的特征值由大到小排 列并排列及对应特征向量
单位化得V
计算U1 ,U2
计算D
结束
2.4 MATLAB 程序
function [U,D,V] = SVDecom(A) [m,n]=size(A); U=zeros(m);V=zeros(n); r=rank(A); D=zeros(m,n); [B,C]=eig(A'*A); x=diag(C); B=[B.',x]; B=sortrows(B,-(n+1)); for i=1:r D(i,i)=sqrt(B(i,n+1));
相关文档
最新文档