资 源 简 介
-
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