- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
两点边值问题的不同迭代法比较及matlab实现
两点边值问题的不同迭代法比较及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);
hold on;
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=1 w=1.56
结果:
迭代次数k:3503
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
Eps=0.1 w=1.56
结果:
迭代次数k:1369
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
Eps=0.01 w=1.56
结果:
迭代次数k:131
结果与精确解的比较图(绿色粗线是精确解,黑色细线是迭代结果)
结果:
Jacobi、G-S、超松弛法,三者都能够取得对精确解的良好逼近,但是,在相同的精度条件下,三者的收敛速度是不一样的,jacobiG-S超松弛,也就是说,在迭代次数相同的条件下,精度:jacobiG-S超松弛。
代码附录:
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;
for i=1:n-1
for j=1:n-1
A(i,j)=0;
end
end
for i=1:n-1
A(i,i)=-(2*eps+h);
end
for i=1:n-1
for j=1:n-1
if i==j+1
A(i,j)=eps;
end
if i==j-1
A(i,j)=eps+h;
end
end
end
b=zeros(n-1,1);
for i=1:n-2
b(i,1)=a*h^2;
end
b(n-1,1)=a*h^2-eps-h;
D=zeros(n-1);
for i=1:n-1
D(i,i)=A(i,i);
end
L=zeros(n-1);
for i=1:n-1
for j=1:n-1
if ij
L(i,j)=-A(i,j);
end
end
end
U=zeros(n-1);
for i=1:n-1
for j=1:n-1
if ij
U(i,j)=-A(i,j);
end
end
end
B=D\(L+U);
g=D\b;
while 1
z=B*y+g;
if norm(z-y,inf)delta
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);
hold on;
grid
hold on;
文档评论(0)