有限差分法求解有两种介质的正方形区域的二维拉普拉斯方程的数值解

源代码在线查看: 有限差分超松弛迭代程序.txt

软件大小: 2 K
上传用户: huajunun
关键词: 有限差分 介质 二维 拉普拉斯
下载地址: 免注册下载 普通下载 VIP

相关代码

				function [alpha,N,U]=youxianchafen2(r1,r2,up,under,num,deta)
				
				%[alpha,N,U]=youxianchafen2(a,r1,r2,up,under,num,deta)
				%该函数用有限差分法求解有两种介质的正方形区域的二维拉普拉斯方程的数值解
				%函数返回迭代因子、迭代次数以及迭代完成后所求区域内网格节点处的值
				%a为正方形求解区域的边长
				%r1,r2分别表示两种介质的电导率
				%up,under分别为上下边界值
				%num表示将区域每边的网格剖分个数
				%deta为迭代过程中所允许的相对误差限
				
				n=num+1; %每边节点数
				U(n,n)=0; %节点处数值矩阵
				N=0; %迭代次数初值
				alpha=2/(1+sin(pi/num));%超松弛迭代因子
				k=r1/r2; %两介质电导率之比
				U(1,1:n)=up; %求解区域上边界第一类边界条件
				U(n,1:n)=under; %求解区域下边界第一类边界条件
				U(2:num,1)=0;U(2:num,n)=0;
				
				for i=2:num
				U(i,2:num)=up-(up-under)/num*(i-1);%采用线性赋值对上下边界之间的节点赋迭代初值
				end
				G=1;
				while G>0 %迭代条件:不满足相对误差限要求的节点数目G不为零
				Un=U; %完成第n次迭代后所有节点处的值
				G=0; %每完成一次迭代将不满足相对误差限要求的节点数目归零
				for j=1:n
				for i=2:num
				U1=U(i,j); %第n次迭代时网格节点处的值
				
				if j==1 %第n+1次迭代左边界第二类边界条件
				U(i,j)=1/4*(2*U(i,j+1)+U(i-1,j)+U(i+1,j));
				end
				
				
				if (j>1)&&(j				U2=1/4*(U(i,j+1)+ U(i-1,j)+ U(i,j-1)+ U(i+1,j)); 
				U(i,j)=U1+alpha*(U2-U1); %引入超松弛迭代因子后的网格节点处的值
				
				end
				
				if i==n+1-j %第n+1次迭代两介质分界面(与网格对角线重合)第二类边界条件
				U(i,j)=1/4*(2/(1+k)*(U(i,j+1)+U(i+1,j))+2*k/(1+k)*(U(i-1,j)+U(i,j-1)));
				
				end
				
				if j==n %第n+1次迭代右边界第二类边界条件
				U(i,n)=1/4*(2*U(i,j-1)+U(i-1,j)+U(i+1,j));
				end
				end
				end
				N=N+1 %显示迭代次数
				Un1=U; %完成第n+1次迭代后所有节点处的值
				err=abs((Un1-Un)./Un1);%第n+1次迭代与第n次迭代所有节点值的相对误差
				err(1,1:n)=0; %上边界节点相对误差置零
				err(n,1:n)=0; %下边界节点相对误差置零 
				G=sum(sum(err>deta))%显示每次迭代后不满足相对误差限要求的节点数目G
				end			

相关资源