两点边值问题的不同迭代法比较及matlab实现_精品文档.doc
- 文档编号:1520109
- 上传时间:2022-10-22
- 格式:DOC
- 页数:14
- 大小:583.50KB
两点边值问题的不同迭代法比较及matlab实现_精品文档.doc
《两点边值问题的不同迭代法比较及matlab实现_精品文档.doc》由会员分享,可在线阅读,更多相关《两点边值问题的不同迭代法比较及matlab实现_精品文档.doc(14页珍藏版)》请在冰豆网上搜索。
两点边值问题的不同迭代法比较及matlab实现
问题:
考虑两点边值问题:
容易知道它的精确解为:
为了将微分方程离散,把[0,1]区间n等分,令h=1/n,,得到差分方程
,从而得到迭代方程组的系数矩阵A。
对=1,a=1/2,n=100,分别用jacobi,G-S,超松弛迭代法分别求线性方程组的解,要求4位有效数字,然后比较与精确解的误差。
对=0.1,=0.01,=0.001,考虑同样问题。
思想:
利用书上的迭代公式即可。
注意问题:
迭代矩阵是n-1阶的,不是n阶;
等号右端向量b的最后一项,不是ah^2,而是ah^2-eps-h
精确解:
带入a=1/2,=1
代码:
>>clear
>>x=linspace(0,1);
truy=(1-0.5)/(1-exp(-1/1))*(1-exp(-x./1))+x.*0.5;
figure;
plot(x,truy,'g','LineWidth',1.5);
holdon;
Grid
图:
三种方法的实现
Jacobi法:
代码见附录
Eps=1
结果:
迭代次数k:
22273
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
Eps=0.1
结果:
迭代次数k:
8753
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
Eps=0.01
结果:
迭代次数k:
661
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
G-S迭代法:
代码见附录
Eps=1
结果:
迭代次数k:
11125
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
Eps=0.1
结果:
迭代次数k:
4394
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
Eps=0.01
结果:
迭代次数k:
379
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
超松弛法:
代码见附录
Eps=1w=1.56
结果:
迭代次数k:
3503
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
Eps=0.1w=1.56
结果:
迭代次数k:
1369
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
Eps=0.01w=1.56
结果:
迭代次数k:
131
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
结果:
Jacobi、G-S、超松弛法,三者都能够取得对精确解的良好逼近,但是,在相同的精度条件下,三者的收敛速度是不一样的,jacobi jacobi 代码附录: Jacobi: function[y,k]=jacobi2(a,eps,h,delta) n=1.0/h; A=ones(n-1); y=zeros(n-1,1); z=zeros(n-1,1); k=0; fori=1: n-1 forj=1: n-1 A(i,j)=0; end end fori=1: n-1 A(i,i)=-(2*eps+h); end fori=1: n-1 forj=1: n-1 ifi==j+1 A(i,j)=eps; end ifi==j-1 A(i,j)=eps+h; end end end b=zeros(n-1,1); fori=1: n-2 b(i,1)=a*h^2; end b(n-1,1)=a*h^2-eps-h; D=zeros(n-1); fori=1: n-1 D(i,i)=A(i,i); end L=zeros(n-1); fori=1: n-1 forj=1: n-1 ifi>j L(i,j)=-A(i,j); end end end U=zeros(n-1); fori=1: n-1 forj=1: n-1 ifi U(i,j)=-A(i,j); end end end B=D\(L+U); g=D\b; while1 z=B*y+g; ifnorm(z-y,inf) break; end y=z;k=k+1; end x=linspace(0,1); truy=(1-a)/(1-exp(-1/eps))*(1-exp(-x./eps))+x.*a; figure; plot(100*x,truy,'g','LineWidth',5); holdon; grid holdon; plot(y,'b') G-S: function[y,k]=gs2(a,eps,h,delta) n=1.0/h; A=ones(n-1); y=zeros(n-1,1); z=zeros(n-1,1); k=0; fori=1: n-1 forj=1: n-1 A(i,j)=0; end end fori=1: n-1 A(i,i)=-(2*eps+h); end fori=1: n-1 forj=1: n-1 ifi==j+1 A(i,j)=eps; end ifi==j-1 A(i,j)=eps+h; end end end b=zeros(n-1,1); fori=1: n-2 b(i,1)=a*h^2; end b(n-1,1)=a*h^2-eps-h; D=zeros(n-1); fori=1: n-1 D(i,i)=A(i,i); end L=zeros(n-1); fori=1: n-1 forj=1: n-1 ifi>j L(i,j)=-A(i,j); end end end U=zeros(n-1); fori=1: n-1 forj=1: n-1 ifi U(i,j)=-A(i,j); end end end B=D\(L+U); g=D\b; while1 z=(D-L)\U*y+(D-L)\b; ifnorm(z-y,inf) break; end y=z;k=k+1; end x=linspace(0,1); truy=(1-a)/(1-exp(-1/eps))*(1-exp(-x./eps))+x.*a; figure; plot(100*x,truy,'g','LineWidth',5); holdon; grid holdon; plot(y,'b') 超松弛: function[y,k]=sor(a,eps,h,delta,w) n=1.0/h; A=ones(n-1); y=zeros(n-1,1); z=zeros(n-1,1); k=0; fori=1: n-1 forj=1: n-1 A(i,j)=0; end end fori=1: n-1 A(i,i)=-(2*eps+h); end fori=1: n-1 forj=1: n-1 ifi==j+1 A(i,j)=eps; end ifi==j-1 A(i,j)=eps+h; end end end b=zeros(n-1,1); fori=1: n-2 b(i,1)=a*h^2; end b(n-1,1)=a*h^2-eps-h; D=zeros(n-1); fori=1: n-1 D(i,i)=A(i,i); end L=zeros(n-1); fori=1: n-1 forj=1: n-1 ifi>j L(i,j)=-A(i,j); end end end U=zeros(n-1); fori=1: n-1 forj=1: n-1 ifi U(i,j)=-A(i,j); end end end B=D\(L+U); g=D\b; Lw=((D-w*L)^-1)*((1-w)*D+w*U); while1 z=Lw*y+w*(D-w*L)^-1*b; ifnorm(z-y,inf) break; end y=z;k=k+1; end x=linspace(0,1); truy=(1-a)/(1-exp(-1/eps))*(1-exp(-x./eps))+x.*a; figure; plot(100*x,truy,'g','LineWidth',5); holdon; grid holdon; plot(y,'b')
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 两点 边值问题 不同 迭代法 比较 matlab 实现 精品 文档