当前位置:文档之家› 高斯-赛德尔迭代法matlab程序

高斯-赛德尔迭代法matlab程序

disp('划分为M*M个正方形')
M=5 %每行的方格数,改变M可以方便地改变剖分的点数
u=zeros(M+1);%得到一个(M+1)*(M+1)的矩阵
disp('对每个剖分点赋初值,因为迭代次数很高,所以如何赋初值并不重要,故采用对列线性赋值。

')
disp('对边界内的点赋初值并使用边界条件对边界赋值:')
for j=1:M-1
for i=1:M-1
u(i+1,j+1)=100*sin(pi/M*j)/M*(M-i);%对矩阵(即每个刨分点)赋初值
end
end
for i=1:M+1
u(1,i)=100*sin(pi*(i-1)/M);%使用边界条件对边界赋值
u(1,M+1)=0;
end
u
tic %获取运行时间的起点
disp('迭代次数为N')
N=6 %迭代次数,改变N可以方便地改变迭代次数
disp('n为当前迭代次数,u为当前值,结果如下:')
for n=1:N
for p=2:M
i=M+2-p;
for j=2:M
u(i,j)=0.25*(u(i,j-1)+u(i+1,j)+u(i-1,j)+u(i,j+1));%赛德尔迭代法
end
end
n %输出n
u %输出u
end
disp('所用的时间:')
t=toc %获取算法运行需要的时间
[x,y]=meshgrid(0:1/M:1,0:1/M:1);
z=u(1,:);
for a=2:M+1
z=[z;u(a,:)];%获取最终迭代的结果,幅值给z,z的值代表该点的点位值
end
mesh(x,y,z)%绘制三维视图以便清楚地显示结果
mesh(x,y,z,'FaceColor','white','EdgeColor','black') %绘制三维视图以便清楚地显示结果。

相关主题