matlab实现有限差分法计算电场强度(最新) 下载本文

内容发布更新时间 : 2024/5/24 7:00:40星期一 下面是文章的全部内容请认真阅读。

实验一:有限差分法研究静电场边值问题

实验报告人: 年级和班级: 学号:

1. 实验用软件工具: Matlab 2. 实验原理:电磁场课本P36-38

1) 差分方程

2) 差分方程组的解

简单迭代法

高斯-赛德尔迭代法 逐次超松弛法

3. 实验步骤: 1)简单迭代法 程序:

hx=41;hy=21; v1=zeros(hy,hx); v1(hy,:)=zeros(1,hx); v1(1,:)=ones(1,hx)*100; v1(:,1)=zeros(hy,1); v1(:,hx)=zeros(hy,1); v1

v2=v1;maxt=1;t=0; k=0;

while(maxt>1e-5) k=k+1; maxt=0; for i=2:hy-1 for j=2:hx-1

v2(i,j)=(v1(i,j+1)+v1(i+1,j)+v1(i-1,j)+v1(i,j-1))/4; t=abs(v2(i,j)-v1(i,j)); if(t>maxt) maxt=t;end end end v1=v2; end v2 k clf

subplot(1,2,1),mesh(v2) axis([0,41,0,21,0,100]) subplot(1,2,2),contour(v2,15) hold on

1

axis([-1,42,-1,25])

plot([1,1,hx,hx,1],[1,hy+1,hy+1,1,1],'r') text(hx/2,0.3,'0V','fontsize',11);

text(hx/2-0.5,hy+0.5,'100V','fontsize',11); text(-0.5,hy/2,'0V','fontsize',11); text(hx+0.3,hy/2,'0V','fontsize',11); hold off

当W=1e-5, 迭代次数:1401次 2)高斯-赛德尔迭代法 程序:

hx=41;hy=21; v1=ones(hy,hx); v1(hy,:)=zeros(1,hx); v1(1,:)=ones(1,hx)*100; v1(:,1)=zeros(hy,1); v1(:,hx)=zeros(hy,1); v2=v1;maxt=1;t=0; k=0;

while(maxt>1e-5) k=k+1; maxt=0; for i=2:hy-1 for j=2:hx-1

v2(i,j)=(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1))/4; t=abs(v2(i,j)-v1(i,j)); if(t>maxt) maxt=t;end end end v1=v2; end v2 k clf

subplot(1,2,1),mesh(v2) axis([0,41,0,21,0,100]) subplot(1,2,2),contour(v2,15) hold on

axis([-1,42,-1,25])

plot([1,1,hx,hx,1],[1,hy+1,hy+1,1,1],'r') text(hx/2,0.3,'0V','fontsize',11);

text(hx/2-0.5,hy+0.5,'100V','fontsize',11); text(-0.5,hy/2,'0V','fontsize',11); text(hx+0.3,hy/2,'0V','fontsize',11); hold off

2

当W=1e-5, 迭代次数:740次 3)逐次超松弛法 程序:

hx=41;hy=21; v1=zeros(hy,hx); v1(hy,:)=zeros(1,hx); v1(1,:)=ones(1,hx)*100; v1(:,1)=zeros(hy,1); v1(:,hx)=zeros(hy,1); v1

v2=v1;maxt=1;t=0;

alpha=input('please input the value of alpha(alpha>=1 && alpha<2):'); k=0;

while(maxt>1e-5) k=k+1; maxt=0; for i=2:hy-1 for j=2:hx-1

v2(i,j)=v1(i,j)+(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1)-4*v1(i,j))*alpha/4;

t=abs(v2(i,j)-v1(i,j)); if(t>maxt) maxt=t;end end end v1=v2; end v2 k clf

subplot(1,2,1),mesh(v2) axis([0,41,0,21,0,100]) subplot(1,2,2),contour(v2,15) hold on

axis([-1,42,-1,25])

plot([1,1,hx,hx,1],[1,hy+1,hy+1,1,1],'r') text(hx/2,0.3,'0V','fontsize',11);

text(hx/2-0.5,hy+0.5,'100V','fontsize',11); text(-0.5,hy/2,'0V','fontsize',11); text(hx+0.3,hy/2,'0V','fontsize',11); hold off

当W=1e-5, alpha取不同值时迭代次数

3