matlab实现有限差分法计算电场强度(最新)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:有限差分法研究静电场边值问题
实验报告人:年级和班级:学号:
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
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
当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取不同值时迭代次数