matlab迭代法求某数平方根,基于matlab平台的三种迭代法求解矩阵方程.doc

《基于matlab平台的三种迭代法求解矩阵方程.doc》由会员分享,可在线阅读,更多相关《基于matlab平台的三种迭代法求解矩阵方程.doc(8页珍藏版)》请在人人文库网上搜索。

1、基于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)将结果进行分析对比。解:根据题目。

2、要求,编写了对应算法的matlab程序,求解结果如下:(求解精度为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.995328360833192 1.01431732497804 1.05286123930011 0.934006974137998 0.931493373808838 0.966508138403066 1.00661848511341 1.03799789809258 1.05180690303654 1.06。

4、215849948572 1.04857676431223 1.02856199041113 1.01999170162638 0.971831831519515 0.952526166634813 0.916996019179182. 最速下降法:(共需398次迭代,求解精度达到9.94e-5) X=0.998835379744322 1.01507463472900 0.9825890937201850.980191460759243 0.991245169713628 1.00378022225329 1.01350884374478 1.01928337905816 1.0208590。

5、9665194 1.01930314197028 1.01444777381651 1.00704058989297 0.998384452250809 0.987399404644377 0.975767814970912 0.963209150871750. 共轭梯度法:(共需4次迭代,求解精度达到3.98e-5) X= 0.996472751179456 1.02707840189049 0.9776233734098530.973206695321590 0.986133032967607 1.00128902564234 1.01322158496914 1.020473865022。

6、93 1.02300905060565 1.02163015083975 1.01678089454399 1.00920310863874 0.999772406055155 0.988443827498859 0.976094192496949 0.962844741655005.Matlab程序 主程序: clc;clear; %本程序用于计算第二次数值分析作业,关于希尔伯特矩阵方程的解,用三种方法,分析并比较,也可推广至任意n维的矩阵方程 % A=hilb(16);%生成希尔伯特系数矩阵 b=2877/851;3491/1431;816/409;2035/1187;2155/1423;。

7、538/395;1587/1279;573/502;947/895;1669/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=zuisuxiajiangf。

8、a(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。

9、;子函数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;end endD=diag(diag(A); L=-tril(A,-1); U=-triu(A,1); B=(。

10、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;endn=k;jingdu(k)=norm(A*x-b); end end子函数2(最速下降算法): function x,n,xx,jingdu=zuisuxiajiangfa(A,b,eps,M) %利用迭代方法求解矩阵方程这里是最速下降迭代方法 %A。

11、 为系数矩阵 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; whilenorm(r)eps r=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。

12、(k)=norm(r); end end子函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; whilenorm(r)eps x=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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值