电磁场与电磁波演示验证实验1 下载本文

基于有限差分法的二维边值问题的数值分析

一、实验目的

1.掌握简单二维边值问题的分离变量求解方法; 2.通过有限差分法的实现来熟悉数值法的求解过程。

二、实验内容及步骤

ybUax

具体参数为:盖板电位U=100V,其余三面电位=0,尺寸a=10,b=10; 求解矩形槽内电位函数分布

1. 在matlab中分析基于分离变量法的解析解:

1

解析法沿一半宽度处电压随长度的变化25解析法沿一半长度处电压随宽度的变化10090208070电压(V)电压(V)156050403010520100

2. 利用简单迭代法求解,与解析法结论对比,分析求解结果的精确度。分析过

-10

程至少包括:在网格尺寸为0.1和1两种条件下,两次迭代差值最大为10时的分析结论;

0123456长度(m)7891000123456宽度(m)78910

沿一半宽度处电压随长度的变化25网格尺寸=0.190 沿一半长度处电压随宽度的变化100 2080网格尺寸=0.170电压(V)15------网格尺寸=1电压(V)605040301052010------网格尺寸=10 0123456长度(m)789100 0123456宽度(m)78910

结论: 1.当网格尺寸为0.1时,可从上图中观察到电位函数分布基本与解析解

一致;

2.当网格尺寸为1时,可从上图对比中看出与解析函数有较大误差; 3.尺寸取得越小,有限差分法取得的函数解越接近于解析解,可计算量会相应增大

3.利用超松弛迭代法分析,选择松弛因子,分析其对收敛速度(即迭代次数)的影响,并确定最优值。分析过程至少包括:在网格尺寸为0.1和1两种条件下,

2

两次迭代差值最大为10-10时,松弛因子随迭代次数的变化,得到对应的最优松弛因子。

240网格尺寸为1220200180160 迭代次数140120100806040 11.11.21.31.41.5超松弛因子1.61.71.81.92.5x 104 网格尺寸为0.121.5迭代次数10.50 11.11.21.31.41.51.6超松弛因子1.71.81.92

根据最佳收敛因子公式:α=2/(1+sin(pi/(p-1))),可求得网格尺寸为1时αopt1=1.5279;当网格尺寸为0.1时,αopt2=1.9391

结论: 1.当α取最佳收敛因子时,迭代次数最小,收敛速度最快. α越靠近最

佳收敛因子,收敛速度越快.

三.附录

1.解析法程序: for k=1:length(n)

for i=1:length(X) for j=1:length(Y)

s(i,j)=z*sinh(n(k)*pi*Y(j)/a)*sin(n(k)*pi*X(i)/a)/n(k)/sinh(n(k)*pi*b

/a);

end end

phai=phai+s;

end %循环求解电位函数解析解

3

2.简单迭代法程序:

gridsize=0.1;%%网格尺寸

nodenumx=a/gridsize;nodenumy=b/gridsize; %离散节点数 jingdu=10^(-10); %%求解精度 num=0; %%迭代次数初始化

%%%%?赋初值

v1=zeros(nodenumy+1,nodenumx+1);v1(nodenumy+1,:)=ones(1,nodenumx+1)*U;v2=v1;

%%前后两次迭代值

r=zeros(nodenumy-1,nodenumx-1); %迭代差值

d=3; %求解精度初始化 可以赋值任意大于精度的值 while(d>jingdu) num=num+1; v1=v2;

for I=2:nodenumy for J=2:nodenumx

v2(I,J)=(v1(I,J+1)+v1(I+1,J)+v1(I-1,J)+v1(I,J-1))/4;%%简单迭代 r(I,J)=abs(v2(I,J)-v1(I,J)); end end

d=max(max(r)); end

3.超松弛迭代法程序:

for i=2:M

for j=2:M+1 x(i,j)=j-1; end end y=x; %赋初值

flag=1;N=[ 0 0 0 0 0 0 0 0 0 0 0]; %迭代次数赋初值 for z=1:11 while flag==1 for i=2:M for j=2:M

b=0.25*(y(i-1,j)+x(i+1,j)+y(i,j-1)+x(i,j+1)); y(i,j)=x(i,j)+a1(z)*(b-x(i,j)); end

end %循环迭代 if max(abs(x-y))

flag=0; %跳出循环 end x=y;

N(z)=N(z)+1; %迭代次数加1 end flag=1;

4

for i=2:M for j=2:M+1 x(i,j)=j-1; end end

y=x; %切记再赋初值 end

5