基于matlab平台的三种迭代法求解矩阵方程_第1页
基于matlab平台的三种迭代法求解矩阵方程_第2页
基于matlab平台的三种迭代法求解矩阵方程_第3页
基于matlab平台的三种迭代法求解矩阵方程_第4页
基于matlab平台的三种迭代法求解矩阵方程_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数值分析第二次作业 学院:电子工程学院基于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程序,

2、求解结果如下:(求解精度为10e-4,最大迭代次数1000)1、 方程的解:如下图1所示图1 三种方法求解的结果对比图2 Gause_Sedel算法收敛特性 图3 最速下降法收敛特性图3 共轭梯度法收敛特性从图中可以看到,在相同的最大迭代次数和预设求解精度条件下,共轭梯度算法仅需要4次迭代便可求出方程组的解,耗时0.000454秒,而且求出解的精度最高;Gauss_Sedel方法需要465次迭代,耗时0.006779秒,求解精度最差;最速下降法需要398次迭代,耗时0.007595秒,求解精度与共轭梯度算法差不多,因此两者求出的解也几乎相同。从中可以得出结论,共轭梯度算法无论从求解精度还是求解

3、速度上都优于其他两种,最速下降法在求解精度上几乎与共轭梯度算法持平,但求解速度更慢。Gauss_Sedel方法在求解精度和速度两方面都最差。具体的解为:Gauss_Sedel迭代法: (共需465次迭代,求解精度达到9.97e-5)X=0.9953283608331921.052861239300110.9340069741379980.9665081384030661.006618485113411.037997898092581.048576764312231.028561990411130.952526166634813.最速下降法: (共需398次迭代,求解精度达到9.94e-5)X=

4、0.9988353797443220.9825890937201851.003780222253291.020859096651941.007040589892970.9983844522508090.9873994046443770.9757678149709120.963209150871750.共轭梯度法: (共需4次迭代,求解精度达到3.98e-5)X= 0.9964727511794561.027078401890490.977623373409853 0.9732066953215901.020473865022931.023009050605651.009203108638740

5、.9997724060551550.9884438274988590.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;1669/1691;1589/1717;414/475;337/409;905/1158

6、;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内置双共轭梯度算法

7、求解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

8、(A,b,err,M)% 利用迭代方法求解矩阵方程 这里是高斯赛尔得迭代方法% A 为系数矩阵 b 为右端向量 err为精度大小 返回求解所得向量x及迭代次数 % M 为最大迭代次数 cc 迭代矩阵普半径 jingdu 求解过程的精度 n 所需迭代次数 xx 存储求解过程中每次迭代产生的解for ii=1:length(b) if A(ii,ii)=0 x='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(l

9、ength(b),1);x=B*x0+FG;k=0;xx(:,1)=x;while norm(A*x-b)>err x0=x; x=B*x0+FG; k=k+1; xx(:,k+1)=x; if k>=M disp('迭代次数太多可能不收敛!'); break; end n=k; jingdu(k)=norm(A*x-b);endend子函数2(最速下降算法):function x,n,xx,jingdu=zuisuxiajiangfa(A,b,eps,M)% 利用迭代方法求解矩阵方程 这里是最速下降迭代方法% A 为系数矩阵 b 为右端向量 err为精度大小 返回

10、求解所得向量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>=M disp('迭代次数太多可能不收敛!'); break; e

11、ndn=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;% r=b-A*x;% 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*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论