微分方程数值解法编程作业三.doc
文本预览下载声明
微分方程数值解法编程作业三
用数值方法求解正方形域上的Poisson方程边值问题
解: (一)用Gauss-seidel迭代法求解线性方程组Au=f,具体程序和结果如下:
function [u,k,T]=tygs(n)
h=1/(n+1);
f(2:n+1,2:n+1)=2*h^2;
u=zeros(n+2,n+2);
e=0.000000001;
tic;
for k=1:1000 %迭代求解
er=0;
for j=2:n+1
for i=2:n+1
Ub=u(i,j); u(i,j)=(u(i-1,j)+u(i+1,j)+u(i,j-1)+u(i,j+1)+f(i,j))/4;
er=er+abs(Ub-u(i,j)); %估计误差
end
end
if er/n^2e,break;end %判断是否达到计算精度,如果达到则退出循环end
T=toc
k
结果:
tygs(8)
T =
0.0028
k =
131
ans =
0 0 0 0 0 0 0 0 0 0
0 0.0300 0.0476 0.0577 0.0623 0.0623 0.0577 0.0476 0.0300 0
0 0.0476 0.0780 0.0961 0.1045 0.1045 0.0961 0.0780 0.0476 0
0 0.0577 0.0961 0.1195 0.1305 0.1305 0.1195 0.0961 0.0577 0
0 0.0623 0.1045 0.1305 0.1429 0.1429 0.1305 0.1045 0.0623 0
0 0.0623 0.1045 0.1305 0.1429 0.1429 0.1305 0.1045 0.0623 0
0 0.0577 0.0961 0.1195 0.1305 0.1305 0.1195 0.0961 0.0577 0
0 0.0476 0.0780 0.0961 0.1045 0.1045 0.0961 0.0780 0.0476 0
0 0.0300 0.0476 0.0577 0.0623 0.0623 0.0577 0.0476 0.0300 0
0 0 0 0 0 0 0 0 0 0
(二)用块Gauss-Seidel迭代法求解线性方程组Au=f,具体程序及结果如下:
function[u,k,T]=tygsk(n)
% u: 方程组的解; k: 迭代次数; n: 非边界点数
% a: 方程组系数矩阵的下对角线元素; b: 方程组系数矩阵的主对角线元素;
% c: 方程组系数矩阵的上对角线元素;d: 追赶法所求方程的右端向量;
% e: 允许误差界; er:迭代误差;
h=1/(n+1);
f(2:n+1,2:n+1)=2*h^2;
a=-1*ones(1,n); b=4*ones(1,n);c=-1*ones(1,n);
u=zeros(n+2,n+2);
e=0.000000001;
tic;
for k=1:1000
er=0;
for j=2:n+1
Ub=u(:,j);
d(1:n)=f(2:n+1,j)+u(2:n+1,j-1)+u(2:n+1,j+1) ; %
显示全部