基于matlab平台的三种迭代法求解矩阵方程文档格式.doc
- 文档编号:471965
- 上传时间:2023-04-29
- 格式:DOC
- 页数:7
- 大小:283.50KB
基于matlab平台的三种迭代法求解矩阵方程文档格式.doc
《基于matlab平台的三种迭代法求解矩阵方程文档格式.doc》由会员分享,可在线阅读,更多相关《基于matlab平台的三种迭代法求解矩阵方程文档格式.doc(7页珍藏版)》请在冰点文库上搜索。
图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.05286123930011 0.934006974137998 0.931493373808838 0.966508138403066 1.00661848511341 1.03799789809258 1.05180690303654 1.06215849948572 1.04857676431223 1.02856199041113 1.01999170162638 0.971831831519515 0.952526166634813 0.916996019179182].
最速下降法:
(共需398次迭代,求解精度达到9.94e-5)
X=[0.998835379744322 1.01507463472900 0.982589093720185 0.980191460759243 0.991245169713628 1.00378022225329 1.01350884374478 1.01928337905816 1.02085909665194 1.01930314197028 1.01444777381651 1.00704058989297 0.998384452250809 0.987399404644377 0.975767814970912 0.963209150871750].
共轭梯度法:
(共需4次迭代,求解精度达到3.98e-5)
X=[0.996472751179456 1.02707840189049 0.977623373409853 0.973206695321590 0.986133032967607 1.00128902564234 1.01322158496914 1.02047386502293 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;
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;
[x2,n2,xx2,jingdu2]=zuisuxiajiangfa(A,b,err,M);
%最速下降法求解
[x3,flag,jingdu3,n3]=bicg(A,b,err);
%matlab内置双共轭梯度算法求解
[x4,xx4,n4,jingdu4]=con_grad(A,b,err,M);
%教材共轭梯度算法求解
%%计算相应结果,用于作图%%
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存储求解过程中每次迭代产生的解
forii=1:
length(b)
ifA(ii,ii)==0
x='
error'
break;
end
end
D=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;
whilenorm(A*x-b)>
err
x0=x;
x=B*x0+FG;
k=k+1;
xx(:
k+1)=x;
ifk>
=M
disp('
迭代次数太多可能不收敛!
'
);
n=k;
jingdu(k)=norm(A*x-b);
子函数2(最速下降算法):
function[x,n,xx,jingdu]=zuisuxiajiangfa(A,b,eps,M)
%利用迭代方法求解矩阵方程这里是最速下降迭代方法
%%M为最大迭代次数jingdu求解过程的精度n所需迭代次数xx存储求解过程中每次迭代产生的解
r0=b-A*x0;
t0=r0'
*r0/(r0'
*A*r0);
x=x0+t0*r0;
r=b-A*x;
whilenorm(r)>
eps
r=r;
x=x;
t=r'
*r/(r'
*A*r);
x=x+t*r;
k=k+1;
ifk>
n=k;
jingdu(k)=norm(r);
子函31(共轭梯度法):
function[x,xx,n,jingdu]=con_grad(A,b,eps,M)
%利用迭代方法求解矩阵方程这里是共轭梯度迭代方法
%M为最大迭代次数jingdu求解过程的精度n所需迭代次数xx存储求解过程中每次迭代产生的解
p0=r0;
%t0=r0'
%x=x0+t0*r0;
%r=b-A*x;
%xx(:
x=x0;
r=r0;
p=p0;
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)=x;
n=k;
end
单纯的课本内容,并不能满足学生的需要,通过补充,达到内容的完善
教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。
教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 matlab 平台 迭代法 求解 矩阵 方程