几种矩阵完备算法的研究与实现_矩阵分析仿真大作业
矩阵的求解方法和技巧

矩阵的求解方法和技巧矩阵的求解是线性代数中的一个重要问题,涉及到矩阵的性质、运算和解析方法等多个方面。
下面将介绍一些矩阵求解的常用方法和技巧。
1. 高斯消元法:高斯消元法是一种常用的线性方程组求解方法,适用于任意大小的方阵。
该方法的基本思想是通过矩阵的初等行变换,将方程组化为行最简的形式,从而求解出未知数的值。
具体操作步骤如下:1) 将方程组转化为增广矩阵形式;2) 选择一个主元(通常选择第一列的第一个非零元素);3) 将该主元所在的行除以主元得到1;4) 用主元所在行乘以矩阵的某一行,再与原行相减,使得该行的主元所在列的其他元素都为0;5) 选择下一个主元,重复步骤3和4,直至将方程组化为行最简的形式(即上三角形矩阵);6) 回代求解每个未知数的值。
2. 克拉默法则:克拉默法则适用于求解n元线性方程组(n个方程、n 个未知数),它是一种基于行列式的方法。
具体操作步骤如下:1) 将方程组转化为增广矩阵形式;2) 求出系数矩阵的行列式D;3) 分别将方程组的等号右边替换为未知数列矩阵,并求出每个矩阵列的行列式Dj;4) 利用克拉默法则的公式,未知数xi的值等于Dj除以D的商。
克拉默法则的优点是理论简单,适用于少数方程未知数的求解,但对于大规模的方程组来说,计算量较大。
3. LU分解法:LU分解是将矩阵按照一定的规则分解为一个下三角矩阵L和一个上三角矩阵U的乘积。
LU分解法适用于求解一大类线性方程组,对于已经进行了LU分解的矩阵,可以节省计算量,提高计算效率。
具体操作步骤如下:1) 对矩阵进行LU分解,得到下三角矩阵L和上三角矩阵U;2) 利用前代法(也称为Ly=b法)求解方程Ly=b,求出向量y;3) 利用回代法(也称为Ux=y法)求解方程Ux=y,求出向量x。
4. 矩阵的逆:矩阵的逆是指如果一个方阵存在逆矩阵,那么它和它的逆矩阵相乘得到一个单位矩阵。
矩阵的逆可以用来求解线性方程组的解。
具体操作步骤如下:1) 对矩阵A进行LU分解;2) 利用前代法求解方程Ly=b,求出向量y;3) 利用回代法求解方程Ux=y,求出向量x;4) 得到矩阵的逆矩阵A^-1。
中科院矩阵分析与应用大作业

中科院矩阵分析与应用大作业1. 研究背景矩阵是数学领域中的重要概念之一,它在各个领域中都有广泛的应用。
在计算机科学中,矩阵常常用于图像处理、计算机视觉等领域;在数据分析中,矩阵则被用来描述数据之间的关系。
因此,深入研究矩阵的相关算法和应用,对于提高计算机科学和数据分析领域的研究水平具有重要意义。
2. 研究目的本次研究的主要目的是掌握矩阵分析的基本概念和相关算法,并将其应用于实际问题中,进一步提高对于矩阵分析的理解和应用能力。
3. 研究内容3.1 矩阵分解矩阵分解是矩阵分析中的一项重要任务,它将一个矩阵分解成为多个小的矩阵,从而更方便的进行处理。
常见的矩阵分解算法有:1.奇异值分解(SVD)2.QR分解3.LU分解4.特征值分解3.2 矩阵重构矩阵重构是指将矩阵进行转换、组合等操作,旨在从不同的角度探索和发现矩阵的内在规律。
常见的矩阵重构算法有:1.矩阵乘法2.矩阵转置3.矩阵拼接4.矩阵切片3.3 矩阵应用矩阵在各个领域的应用非常广泛,下面列举几个常见的应用场景:1.图像处理:将图像转化成为矩阵,对其进行矩阵分解、矩阵重构等操作,从而实现图像降噪、图像识别等功能。
2.推荐系统:利用矩阵分解的方法将原始数据转化为矩阵,再对其进行推荐系统的处理,从而为用户提供更好的推荐服务。
3.聚类分析:将大量数据转化为矩阵,从而利用聚类算法对其进行分析,发现数据之间的关系,进一步深入研究数据的内在规律。
4. 研究通过对于矩阵分解、矩阵重构、矩阵应用等领域的研究,我们可以得到以下:1.奇异值分解、QR分解、LU分解、特征值分解等矩阵分解算法各有优缺点,在实际应用中应该根据具体情况选用不同的算法。
2.矩阵乘法、矩阵转置、矩阵拼接、矩阵切片等矩阵重构算法可以帮助我们从不同的角度分析和处理矩阵,从而深入研究矩阵的内在规律。
3.矩阵在图像处理、推荐系统、聚类分析等领域有着广泛的应用,掌握矩阵分析算法可以帮助我们更好地解决实际问题。
基于matlab平台的三种迭代法求解矩阵方程

数值分析第二次作业学院:电子工程学院基于matlab平台的三种迭代法求解矩阵方程组求解系数矩阵由16阶Hilbert方程组构成的线性方程组的解,其中右端项为[2877/851,3491/1431,816/409,2035/1187,2155/1423,538/395,1587/1279,573/502,947 /895,1669/1691,1589/1717,414/475,337/409,905/1158,1272/1711,173/244].要求:1)Gauss_Sedel迭代法;2)最速下降法;3)共轭梯度法;4)将结果进行分析对比。
解:根据题目要求,编写了对应算法的matlab程序,求解结果如下:(求解精度为10e-4,最大迭代次数1000)1、方程的解:如下图1所示图1 三种方法求解的结果对比图2 Gause_Sedel算法收敛特性图3 最速下降法收敛特性图3 共轭梯度法收敛特性从图中可以看到,在相同的最大迭代次数和预设求解精度条件下,共轭梯度算法仅需要4次迭代便可求出方程组的解,耗时0.000454秒,而且求出解的精度最高;Gauss_Sedel方法需要465次迭代,耗时0.006779秒,求解精度最差;最速下降法需要398次迭代,耗时0.007595秒,求解精度与共轭梯度算法差不多,因此两者求出的解也几乎相同。
从中可以得出结论,共轭梯度算法无论从求解精度还是求解速度上都优于其他两种,最速下降法在求解精度上几乎与共轭梯度算法持平,但求解速度更慢。
Gauss_Sedel方法在求解精度和速度两方面都最差。
具体的解为:Gauss_Sedel迭代法:(共需465次迭代,求解精度达到9.97e-5) X=[0.995328360833192 1.01431732497804 1.052861239300110.934006974137998 0.931493373808838 0.9665081384030661.00661848511341 1.03799789809258 1.051806903036541.06215849948572 1.04857676431223 1.028561990411131.01999170162638 0.971831831519515 0.9525261666348130.916996019179182].最速下降法:(共需398次迭代,求解精度达到9.94e-5)X=[0.998835379744322 1.01507463472900 0.9825890937201850.980191460759243 0.991245169713628 1.003780222253291.01350884374478 1.01928337905816 1.020859096651941.01930314197028 1.01444777381651 1.007040589892970.998384452250809 0.987399404644377 0.9757678149709120.963209150871750].共轭梯度法:(共需4次迭代,求解精度达到3.98e-5)X=[0.996472751179456 1.02707840189049 0.9776233734098530.973206695321590 0.986133032967607 1.001289025642341.01322158496914 1.02047386502293 1.023009050605651.02163015083975 1.01678089454399 1.009203108638740.999772406055155 0.988443827498859 0.9760941924969490.962844741655005].Matlab程序主程序:clc;clear;%% 本程序用于计算第二次数值分析作业,关于希尔伯特矩阵方程的解,用三种方法,分析并比较,也可推广至任意n维的矩阵方程%%A=hilb(16); %生成希尔伯特系数矩阵b=[2877/851;3491/1431;816/409;2035/1187;2155/1423;538/395;1587/1279;573/502;947/895;166 9/1691;1589/1717;414/475;337/409;905/1158;1272/1711;173/244]; %右端向量M=1000; %最大迭代次数err=1.0e-4; %求解精度[x,n,xx,cc,jingdu]=yakebi_diedai(A,b,err,M); % 雅克比算法求解tic;[x1,n1,xx1,cc1,jingdu1]=gauss_seidel(A,b,err,M); % gauss_seidel算法求解toc;tic;[x2,n2,xx2,jingdu2]=zuisuxiajiangfa(A,b,err,M); % 最速下降法求解toc;tic;[x3,flag,jingdu3,n3]=bicg(A,b,err); % matlab内置双共轭梯度算法求解toc;tic;[x4,xx4,n4,jingdu4]=con_grad(A,b,err,M); % 教材共轭梯度算法求解toc;%% 计算相应结果,用于作图%%num=[1:16]';jie=[num,x1,x2,x4]; % 三者的解对比% 三者的收敛情况对比num1=[1:n1]';fit1=[num1,jingdu1'];num2=[1:n2]';fit2=[num2,jingdu2'];num4=[1:n4]';fit4=[num4,jingdu4'];子函数1(Gause_Sedel算法):function [x,n,xx,cc,jingdu] = gauss_seidel(A,b,err,M)% 利用迭代方法求解矩阵方程这里是高斯赛尔得迭代方法% A 为系数矩阵b 为右端向量err为精度大小返回求解所得向量x及迭代次数% M 为最大迭代次数cc 迭代矩阵普半径jingdu 求解过程的精度n 所需迭代次数xx 存储求解过程中每次迭代产生的解for ii=1:length(b)if A(ii,ii)==0x='error';break;endendD=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);B=(D-L)\U;cc=vrho(B); %迭代矩阵普半径FG=(D-L)\b;x0=zeros(length(b),1);x=B*x0+FG;k=0;xx(:,1)=x;while norm(A*x-b)>errx0=x;x=B*x0+FG;k=k+1;xx(:,k+1)=x;if k>=Mdisp('迭代次数太多可能不收敛!');break;endjingdu(k)=norm(A*x-b);endend子函数2(最速下降算法):function [x,n,xx,jingdu]=zuisuxiajiangfa(A,b,eps,M)% 利用迭代方法求解矩阵方程这里是最速下降迭代方法% A 为系数矩阵b 为右端向量err为精度大小返回求解所得向量x及迭代次数% % M 为最大迭代次数jingdu 求解过程的精度n 所需迭代次数xx 存储求解过程中每次迭代产生的解x0=zeros(length(b),1);r0=b-A*x0;t0=r0'*r0/(r0'*A*r0);x=x0+t0*r0;r=b-A*x;xx(:,1)=x;k=0;while norm(r)>epsr=r;x=x;t=r'*r/(r'*A*r);x=x+t*r;r=b-A*x;k=k+1;xx(:,k+1)=x;if k>=Mdisp('迭代次数太多可能不收敛!');break;endn=k;jingdu(k)=norm(r);endend子函31(共轭梯度法):function [x,xx,n,jingdu]=con_grad(A,b,eps,M)% 利用迭代方法求解矩阵方程这里是共轭梯度迭代方法% A 为系数矩阵b 为右端向量err为精度大小返回求解所得向量x及迭代次数% M 为最大迭代次数jingdu 求解过程的精度n 所需迭代次数xx 存储求解过程中每次迭代产生的解x0=zeros(length(b),1);r0=b-A*x0;p0=r0;% t0=r0'*r0/(r0'*A*r0);% x=x0+t0*r0;% xx(:,1)=x;k=0;x=x0;r=r0;p=p0;while norm(r)>epsx=x;r=r;p=p;afa=r'*r/(p'*A*p);x1=x+afa*p;r1=r-afa*A*p;beta=r1'*r1/(r'*r);p1=r1+beta*p;x=x1;r=r1;p=p1;k=k+1;xx(:,k)=x;if k>=Mdisp('迭代次数太多可能不收敛!');break;endn=k;jingdu(k)=norm(r);endend。
矩阵分析在运筹学中的应用 案例解析

矩阵分析在运筹学中的应用案例解析矩阵分析是一种重要的运筹学工具,在各种实际问题的解决中发挥着关键作用。
本文将以几个案例为例,详细解析矩阵分析在运筹学中的应用。
案例一:城市交通规划假设某城市的交通系统需要进行优化规划,以提高整体的交通效率。
这个问题可以通过矩阵分析来解决。
将城市划分为若干个交通网络节点,并使用矩阵来表示节点间的道路连接情况和交通流量。
通过分析这个矩阵,可以得出各个节点之间的联系程度和交通流量的分布情况。
基于这些信息,可以采取一系列措施,包括增加道路容量、调整交通信号灯时长等,以提高整个交通系统的运行效率。
案例二:物流配送优化某物流公司需要设计最佳的送货路线,以降低成本和提高服务质量。
这个问题可以通过矩阵分析来解决。
将送货点和配送中心抽象成矩阵中的节点,并使用矩阵来表示它们之间的距离、运输费用和送货时效等关系。
通过分析这个矩阵,可以找出最佳的送货路线,使得总运输成本最小化,并且满足送货时效的要求。
案例三:供应链管理某公司在不同的供应链环节中面临着众多决策问题,需要综合考虑各种因素来进行优化。
这个问题可以通过矩阵分析来解决。
将各个供应链环节和相关的因素抽象成矩阵中的节点,通过矩阵元素来表示它们之间的关系和相互作用。
通过分析这个矩阵,可以找出最佳的供应链管理策略,从而提高整个供应链系统的效率和利润水平。
通过以上案例的分析,我们可以看出矩阵分析在运筹学中的重要性和应用广泛性。
无论是城市交通规划、物流配送优化还是供应链管理,矩阵分析都可以帮助我们找到最佳的解决方案。
因此,矩阵分析在实际问题的解决中具有不可替代的作用。
总结起来,矩阵分析在运筹学中的应用多种多样,可以在各个领域中解决实际问题。
通过对问题进行抽象和建模,将问题转化为矩阵的形式,然后通过矩阵分析来找到最佳的解决方案。
在实际应用中,我们可以根据具体问题的特点和需求,选择适当的矩阵分析方法和工具,以达到最佳的效果。
矩阵分析的应用将会进一步推动运筹学的发展,为解决实际问题提供更加有效的手段和方法。
矩阵解方程组的方法

矩阵解方程组的方法全文共四篇示例,供读者参考第一篇示例:矩阵是线性代数中的重要概念,而矩阵解方程组也是线性代数中的基础内容之一。
在实际应用中,往往会遇到包含多个未知数和多个方程的方程组,如何通过矩阵的方法来高效地解决这些方程组成了一项重要的技能。
本文将介绍矩阵解方程组的方法,包括高斯消元法、矩阵求逆法以及克拉默法则等。
一、高斯消元法高斯消元法是解线性方程组的一种基本方法。
它的基本思想是通过对方程组进行一系列的行变换,将其转化为简化的阶梯形或行最简形,从而得到方程组的解。
下面通过一个具体的例子来说明高斯消元法的应用。
考虑如下的线性方程组:\begin{cases}2x + 3y - z = 1 \\3x + 2y + z = 3 \\x - y + 2z = 9\end{cases}首先将上述的方程组写成增广矩阵的形式:然后通过一系列的行变换,将增广矩阵转化为简化的阶梯形:\begin{bmatrix}1 & -1 &2 & | & 9 \\0 & 5 & -5 & | & -10 \\0 & 0 & 1 & | & 0\end{bmatrix}最后通过反向代入法,可以求得方程组的解为x=2, y=-2, z=0。
二、矩阵求逆法A = \begin{bmatrix}1 &2 \\2 & 1\end{bmatrix},X = \begin{bmatrix}x \\y\end{bmatrix},B = \begin{bmatrix}3 \\4\end{bmatrix}然后求解系数矩阵A 的逆矩阵A^{-1}:最后通过矩阵乘法,可以求得方程组的解为X = A^{-1}B =\begin{bmatrix}1 \\1\end{bmatrix}。
三、克拉默法则首先求解系数矩阵A 的行列式|A|:然后求解系数矩阵A 分别替换成结果矩阵B 的行列式|B_x| 和|B_y|:最后通过克拉默法则,可以求得方程组的解为x = \frac{|B_x|}{|A|} = \frac{-5}{-3} = \frac{5}{3},y = \frac{|B_y|}{|A|} = \frac{-2}{-3} = \frac{2}{3}。
矩阵法中常用的方法

矩阵法中常用的方法说实话矩阵法这事,我一开始也是瞎摸索。
经过一段时间的折腾,我总算也找到点门道,今天就跟你唠叨唠叨矩阵法中常用的那些方法。
我最开始接触的就是消元法。
就好比一群人站在一起,有些是多余的、捣乱的,我就要把那些干扰的因素一个个去掉。
在矩阵里呢,就是通过行变换或者列变换,把那些能让计算简单的元素逐步消除。
我刚开始做的时候,老容易搞混行变换和列变换的规则,本该行之间做运算的,我搞成列的了,那结果自然是错得一塌糊涂。
后来我就想了个办法,自己画了个小方格来代表矩阵的格子,在上面标上行号和列号,每次要做变换的时候就先看看这小方格上的标记,这样就很少出错了。
还有行列式展开法。
这就像剥洋葱一样,你可以选择一层一层从某一个方向去剥开它。
在矩阵里就可以按照某一行或者某一列展开。
我记得有一次我做得特别着急,没注意符号的变化,结果算出的值跟正确答案差了个正负号。
从那以后我就知道了,这展开的时候符号一定得小心。
每一次按照元素乘以它对应的代数余子式的时候,这个代数余子式的符号是根据行列的位置来决定的,可千万不能马虎。
相似变换法我也捣鼓过。
这就好比给一群形状有点类似但不太一样的东西找到共同之处,然后通过一个桥梁(相似变换矩阵)把它们联系起来。
不过这个方法可有点难,得先找到那个合适的相似变换矩阵。
我也不确定什么样的矩阵容易找到它对应的相似变换矩阵,但是多做些练习,见识过不同类型的矩阵之后,就比较有感觉了。
就像你见多了不同种的人,下次见到类似的就知道他大概是什么样的性格一样。
再就是特征值和特征向量法。
其实它有点像找到了矩阵内部的一些特殊属性。
确定矩阵的特征值和特征向量之后,对于理解矩阵的很多性质特别有用。
比如说,在求矩阵的幂的时候,如果知道了特征值和特征向量,那就相当于找到了一条捷径。
我以前总是觉得这部分特别抽象,不过当我在做一个实际的动态系统模型里用到矩阵的幂计算时,开始认认真真研究特征值和特征向量,当我真正算出那些结果并且代入模型发现完全合理的时候,真有一种恍然大悟的感觉。
北航研究生数值分析编程大作业1

数值分析大作业一、算法设计方案1、矩阵初始化矩阵[]501501⨯=ij a A 的下半带宽r=2,上半带宽s=2,设置矩阵[][]5011++s r C ,在矩阵C 中检索矩阵A 中的带内元素ij a 的方法是:j s j i ij c a ,1++-=。
这样所需要的存储单元数大大减少,从而极大提高了运算效率。
2、利用幂法求出5011λλ,幂法迭代格式:0111111nk k k k kk T k k k u R y u u Ay y u ηηβ------⎧∈⎪⎪=⎪=⎨⎪=⎪⎪=⎩非零向量 当1210/-≤-k k βββ时,迭代终止。
首先对于矩阵A 利用幂法迭代求出一个λ,然后求出矩阵B ,其中I A B λ-=(I 为单位矩阵),对矩阵B 进行幂法迭代,求出λ',之后令λλλ+'='',比较的大小与λλ'',大者为501λ,小者为1λ。
3、利用反幂法求出ik s λλ,反幂法迭代格式:0111111nk k k k kk T k k k u R y u Au y y u ηηβ------⎧∈⎪⎪=⎪=⎨⎪=⎪⎪=⎩非零向量 当1210/-≤-k k βββ时,迭代终止,1s k λβ=。
每迭代一次都要求解一次线性方程组1-=k k y Au ,求解过程为:(1)作分解LU A =对于n k ,...,2,1=执行[][]s k n r k k k i c c c c c n s k k k j c cc c k s ks k t k s k r i t t s t i k s k i k s k i js j t k s j r k t t s t k j s j k j s j k <+++=-=++=-=+++----=++-++-++-++----=++-++-++-∑∑);,min(,...,2,1/)(:),min(,...,1,:,1,11),,1max(,1,1,1,11),,1max(,1,1,1(2)求解y Ux b Ly ==,(数组b 先是存放原方程组右端向量,后来存放中间向量y))1,...,2,1(/)(:/:),...,3,2(:,1),min(1.1.11),1max(,1--=-===-=+++-++-+--=++-∑∑n n i c x c b x c b x n i b c b b i s t n s i i t t s t i i i ns n n ti r i t t s t i i i使用反幂法,直接可以求得矩阵按模最小的特征值s λ。
大规模矩阵计算算法及其并行化研究

大规模矩阵计算算法及其并行化研究矩阵计算是一种广泛应用的数学方法,用于解决许多实际问题,例如图像处理、机器学习、人工智能等领域。
由于矩阵计算涉及大量的数学运算,处理大规模的数据集需要强大的计算资源和高效的算法。
因此,研究大规模矩阵计算算法及其并行化是当前计算机科学领域的一个重要课题。
在矩阵计算中,可将矩阵视为一个二维数组,其中每个元素表示矩阵中的一个值。
矩阵计算在很多领域中都有广泛的应用,例如图像处理中的卷积、人工智能中的神经网络等。
然而,由于矩阵计算涉及大量的数学运算,处理大规模数据集时需要巨大的计算资源和高效的算法。
这也是矩阵计算研究的主要方向之一。
常见的大规模矩阵计算算法包括LU分解、QR分解等,其主要思想是将矩阵拆分为更小的部分进行计算。
例如,在LU分解中,矩阵被分解为一个下三角矩阵和一个上三角矩阵,通过矩阵乘法计算得出。
这种算法在处理小规模的数据时表现良好,但在处理大规模的数据时需要更高效的算法。
并行化研究是一种有效的优化大规模矩阵计算算法的方法。
并行化算法可以将数据集分解为多个子集,并通过多个计算机上执行计算任务。
这种方法可以显著提高计算速度,提高算法效率和可扩展性。
研究大规模矩阵计算算法的主要任务是提高算法效率。
常用的算法优化技术包括数据结构优化、算法复杂度优化、并行化设计等。
例如,在LU分解中,通过使用离散余弦变换,将矩阵拆分为更小的矩阵进行计算,可以显著提高算法效率。
同时,设计高效的并行化算法也可以显著提高算法的效率。
例如,使用MPI等并行化工具可以显著提高矩阵计算的效率。
总之,矩阵计算是解决众多实际问题的重要工具,研究大规模矩阵计算算法及其并行化是当前计算机科学领域的一个重要课题。
通过优化算法效率和设计更高效的并行化算法,可以显著提高矩阵计算的速度和效率,为解决许多现实问题提供更好的手段和工具。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
几种矩阵完备算法的研究与实现——《矩阵分析》课程仿真作业报告*刘鹏飞电⼦系2016210858摘要矩阵完备是指从⼀⼩部分已知的矩阵元素中恢复出整个矩阵。
它在计算机视觉、推荐系统以及社交⽹络等⽅⾯具有⼴泛的应⽤。
矩阵恢复可以通过求解⼀个与核范数有关的凸优化问题来实现。
由此诞⽣了许多矩阵恢复的算法,⽐如FPC算法等。
FPC算法虽然实现简单,但其迭代速度较慢。
在此基础上,APG算法经过改进,能够提升迭代速度。
但最⼩化核范数并不是求解矩阵完备问题的唯⼀⽅法,其中OptSpace算法构造了⼀个在流形上的优化问题,相⽐于前两种算法能够以更⾼的精度恢复出原始矩阵。
本⽂主要总结了FPC、APG和OptSpace三种算法的步骤。
特别地,对于OptSpace算法,本⽂提出了求解其中两个⼦优化问题的具体算法。
最后,本⽂通过仿真实验和理论分析⽐较了三种算法的特点,并给出了OptSpace算法的精度⾼于APG算法的解释。
关键词:矩阵完备,核范数,FPC,APG,OptSpace1介绍1.1矩阵完备及其算法综述矩阵完备是指从⼀⼩部分已知的矩阵元素中恢复出整个矩阵。
它在计算机视觉、推荐系统以及社交⽹络等⽅⾯具有⼴泛的应⽤。
矩阵完备可以描述成这样⼀个问题:对于⼀个m×n的矩阵M,其秩为r,我们只有对M中的部分采样,记*报告中所涉及到的仿真代码可在https:///s/1jHRcY8m下载1这些采样位置组成的集合为Ω,那么是否有可能从已知的部分元素中恢复出整个矩阵M。
假如M为低秩矩阵,并且已知的元素⾜够多并且⾜够均匀地分布在整个矩阵中,那么我们可以通过解如下优化问题来恢复出原始矩阵[1]:min rank(W)s.t.W ij=M ij,(i,j)∈Ω(1-1)但是,问题(1-1)是⼀个NP难的⾮凸问题。
在⼀定条件下,问题(1-1)可以转化成⼀个最⼩化核范数的问题。
对于矩阵W m×n,W的核范数定义为其奇异值之和,即∥W∥∗=min(m,n)∑k=1σk(W)(1-2)其中,σk(W)表⽰W第k⼤的奇异值。
问题(1-1)可以转化成:min∥W∥∗s.t.W ij=M ij,(i,j)∈Ω(1-3)对于(1-3)中带等式约束的问题,进⼀步地,可以将它凸松弛成⼀个⽆约束的优化问题[2][3][4]:min 12∥A(W)−b∥22+µ∥W∥∗(1-4)其中,b是由矩阵中采样位置对应的元素组成的p×1维向量,p=|Ω|(|·|表⽰集合的势);A:R m×n−→R p是⼀个线性映射,A(W)=(W ij)|(i,j)∈Ω;µ是⼀个可以调整的参数。
对于(1-4)中的⽆约束问题,⽂献[2][3]分别提出了Fixed Point Continuation (FPC)和Singular Value Thresholding(SVT)的算法。
本⽂认为,这两种算法虽然出发点不同,但其实质都是梯度下降法,没有本质的差别,在算法实现上也基本⼀样。
因此,本⽂只研究其中⼀种,即FPC算法。
FPC算法虽然实现简单,但其迭代速度慢,效率不⾼。
在此基础上,⽂献[4]做出了改进,提出⼀种Accelerated Proximal Gradient Singular Value Thresholding(APG)算法(该算法是在SVT算法上改进的,本⽂认为FPC和SVT实质上是⼀种算法,故不做区别),能够⼤幅度地提⾼收敛速度。
前⾯提到的⼏种算法,都是从(1-1)中的最⼩化秩的问题出发,经过⼀步步凸松弛得到的。
与上述基本思路不同,⽂献[5]提出了OptSpace算法,它实质上是通过解另⼀种优化问题来实现矩阵完备:min F(W)=∑(i;j)∈Ω∥M ij−W ij∥2s.t.rank(W)=r(1-5)该优化问题旨在找到⼀个秩为r的矩阵,使得该矩阵在对应采样元素的位置上和原始矩阵尽量接近。
在(1-5)中,秩为r的矩阵W可以表⽰成如下分解形式:W=XSY T(1-6)其中,X∈R m×r,Y∈R n×r,S∈R r×r,并且X T X=mI,Y T Y=nI。
注意到(1-6)中的分解与奇异值分解具有类似的形式,X、Y的各列互相正交,但S不是对⾓阵。
如果给定⼀组(X,Y),则可以找到最佳的S,使得XSY T在对应采样元素的位置上和原始矩阵尽量接近。
因此可以定义如下函数:F(X,Y)=minS∈R r×r∑(i;j)∈Ω∥M ij−(XSY T)ij∥2(1-7)该函数的定义域为D(F)={(X,Y)|X T X=mI,Y T Y=nI,X∈R m×r,Y∈R n×r}。
优化问题(1-5)可以等价为:min F(X,Y)(X,Y)∈D(F)(1-8)函数F的定义域D(F)实质上是两个Grassmann流形的笛卡尔积。
对于在Grass-mann流形上的优化问题,⽂献[6]做了相关研究,并提出了有效的求解算法,⽐如⽜顿法和共轭梯度算法。
⽂献[5]提出的OptSpace算法本质上是求解(1-8)中的优化问题。
仿真结果证明,OptSpace算法相对于FPC、APG算法,能够以更⾼的精度恢复出原始矩阵。
从(1-5)-(1-8)式中可以发现,OptSpace算法似乎要求已知对待恢复矩阵的秩。
但⽂献[7]提出了⼀种从不完全采样矩阵中估计矩阵的秩的算法。
因此,在本⽂中可以假设秩r已知。
1.2本文主要内容本⽂主要对FPC、APG和OptSpace三种算法进⾏了研究,总结了三种算法的基本流程,并通过仿真对三种算法的性能进⾏⽐较,主要⽐较指标为迭代次数、运算时间和恢复精度。
本⽂原创性的⼯作在于,⽂献[5]提出的OptSpace算法,只给出了其⼀般流程,其中包含了两个⼦优化问题,原⽂并没有给出具体算法。
本⽂给出了求解这两个⼦问题的具体算法,完善了OptSpace算法流程。
2FPC算法FPC算法实质上是求解(1-4)中优化问题的⼀种梯度下降求法。
FPC算法的基本思路是:固定某⼀点,在该点对⽬标函数进⾏⼀阶近似,求得最⼩值点,作为下⼀步迭代的固定点,通过这样反复迭代得到全局最⼩值。
记⽬标函数Q(W)=f(W)+µ∥W∥∗f(W)=12∥A(W−b)∥22(2-9)对⽬标函数Q(W)在Z点进⾏⼀阶展开得Qτ(W,Z)=f(Z)+<∇f(Z),W−Z>+τ2∥W−Z∥2F+µ∥W∥∗=τ2∥W−G∥2F+µ∥W∥∗−12τ∥∇f(Z)∥2F(2-10)其中,τ为确定的常数,G的表达式如下:G=Z−τ−1∇f(Z)=Z−τ−1A∗(A(Z)−b)(2-11)在式(2-11)中,A∗表⽰映射A的伴随算⼦。
注意到,映射A实际上是将矩阵中采样位置上的元素提出来排成⼀个向量,⽽A∗是将向量还原到矩阵对应的采样位置上,其余位置上的元素置为0。
由于(2-10)是⼀个关于W凸函数,对于这样⼀个凸优化问题,它的最优解可以表⽰成:Sµτ(G)=U Diag((σ−µ/τ)+)V T(2-12)其中,G的奇异值分解为G=U Diag(σ)V T,(·)+=max{·,0}。
根据上述FPC算法的基本思路以及式(2-12),算法1给出了FPC算法的⼀般步骤。
算法1FPC算法给定参数µ>0,选取初值W0∈R m×n,对于k=0,1,2,···,按照下述步骤进⾏迭代1:计算G k=X k−(τk)−1A∗(A(X k)−b)2:对G k进⾏奇异值分解,并计算Sµτk(G k)=U Diag((σ−µ/τk)+)V T3:令W k+1=Sµτk(G k),返回第1步在上述算法中,τk 可以取函数f 的Lipschitz 常数L f 。
对于(2-9)中的函数f (W )=12∥A (W −b )∥22,L f =1。
因此,在上述算法中,可取τk =1。
迭代停⽌的条件为∥W k +1−W k ∥F <ϵ,ϵ为给定精度。
3APG 算法FPC 算法思路简单,易于实现,但是收敛速度⽐较慢。
⽂献[4]对FPC 算法进⾏了加速改进,通过改进下降步长,能够提⾼算法速度。
APG 算法的基本思路与FPC 算法基本⼀致,唯⼀的不同是改进了下降步长。
算法2给出了APG 算法的⼀般步骤。
算法2APG 算法给定参数µ>0,选取初值W 0=W −1∈R m ×n ,初始化步长参数t 0=t −1=0,对于k =0,1,2,···,按照下述步骤进⾏迭代1:令Z k =W k +t k −1−1t k(W k −W K −1)2:计算G k =Z k −(τk )−1A ∗(A (Z k )−b )3:对G k 进⾏奇异值分解,并计算S µτk (G k )=U Diag ((σ−µ/τk )+)V T 4:令W k +1=S µτk (G k )5:计算tk +1=1+√1+4(t k )22,返回第1步同样,在算法2中,取τk =1。
迭代停⽌的条件为∥W k +1−W k ∥F <ϵ,ϵ为给定精度。
4OptSpace 算法⽂献[5]中提出的OptSpace 算法,通过求解下⾯的优化问题来实现矩阵完备:min F (X,Y )=min S ∈Rr ×r∑(i ;j )∈Ω∥M ij −(XSY T )ij ∥2(4-13)由于优化的⽬标函数F (X,Y )的定义域,D (F )={(X ,Y )|X T X =mI,Y T Y =nI,X ∈R m ×r ,Y ∈R n ×r },为Grassmann 流形,采⽤流形上的梯度下降算法,能够得到该优化问题的解。
注意到,函数F (X,Y )本⾝就是⼀个优化后的最⼩值,没有明确的解析解,但只要给定⼀组(X,Y ),就能求得最⼩化∑(i ;j )∈Ω∥M ij −(XSY T )ij ∥2的S ,进⽽得到F (X,Y )的值。
为后⾯表⽰⽅便,记x =(X,Y )。
4OPTSPACE算法6在给出算法之前,先给出函数F(x)在流形上梯度的表达式。
⾸先,定义⼀个投影算⼦PΩ,∀W∈R m×n,PΩ(W)ij={M ij if(i,j)∈Ω0otherwise(4-14)函数F(x)对于X、Y两部分的梯度分别是grad F(x)X=PΩ(W)(XSY T−M)Y S T−XQ X(4-15)grad F(x)Y=PΩ(W)(XSY T−M)T XS−Y Q Y(4-16)其中,S为给定(X,Y)后最⼩化∑(i;j)∈Ω∥M ij−(XSY T)ij∥2的解,Q X,Q Y∈R r×r分别为:Q X=1mX T PΩ(W)(XSY T−M)Y S T(4-17)Q X=1nY T PΩ(W)(XSY T−M)T XS(4-18)算法3给出OptSpace算法的⼀般流程:算法3OptSpace算法选取初值x0=(X0,Y0)∈D(F),对于k=0,1,2,···,按照下述步骤进⾏迭代1:针对给定的x k,计算相应的S k2:计算负梯度w k=−grad F(x)3:令x k(t)=x k+t w k(t>0),求得使F(x k(t))最⼩的步长t4:令x k+1=x k+t w k,返回第⼀步迭代停⽌的条件为∥X k+1S k+1Y Tk+1−X k S k Y T k∥F<ϵ,ϵ为给定精度。