电磁场实验一_有限差分法的matlab实现
电磁场与电磁波实验报告
实验项目:_______有限差分法__ ____
班 级:_____ __12电子2 ____ __
实验日期:__ 2014年12月2日1、学习有限差分法的原理与计算步骤;
2、学习用有限差分法解静电场中简单的二维静电场边值问题;
?3、学习用Matlab语言描述电磁场与电磁波中内容,用matlab求解问题并用图形表示出了,学习matlab语言在电磁波与电磁场中的编程思路。
二、实验内容
理论学习:学习静电场中边值问题的数值法中的优先差分法的求解知识;????实践学习:学习用matlab语言编写有限差分法计算二维静电场边值问题;
三、实验仪器或软件
电脑(WIN7)、Matlab7.11
四、实验原理
基本思想是把连续的定解区域用有限个离散点构成的网格来代替, 这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似, 积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组 , 解此方程组就可以得到原问题在离散点上的近似解。然后再利用插值方法便可以从离散解得到定解问题在整个区域上的近似解。,这里上标(0)表示0次(初始)近似值。然后按Laplace方程
(i,j=1,2,…)
进行反复迭代(k=0,1,2,…)。若当第N次迭代以后,所有的内节点的相邻两次迭代值之间的最大误差不超过允许范围,即
这里的W是预设的允许误差,此时即可终止迭代,并将第N次迭代结果作为内节点上电位的最终数值解。
五、实验步骤
1.理论学习
2.编写matlab程序
六、结果分析与问题讨论
1.简单迭代法
程序:
hx=1;%设置x步长
hy=1;%设置y步长
hv=10;%等势线条数
Accuracy=10^-3;%精度为0.001
t=0;%迭代次数
x=4/hx+1;%x轴点数
y=4/hy+1;%y轴点数
v0=100;%导体盖电位
v=zeros(x,y);%用零矩阵对网格各节点电位进行初始化
v_pre=zeros(x,y);%用零矩阵对前一时刻网格各节点电位进行初始化
v(y,:)=v0;%对沿盖板各节点赋初始值v0
%设初始迭代值值
for k=2:y-1
v(k,2:x-1)=(k-1)*(v0/(y-1));
end
%开始迭代
while(max(max(abs(v-v_pre)))>Accuracy)
v_pre=v;
t=t+1;
for i=2:x-1
for j=2:y-1
v(i,j)=(v_pre(i-1,j)+v_pre(i,j-1)+v_pre(i+1,j)+v_pre(i,j+1))/4;
end
end
end
%输出
fprintf('节点电势值矩阵:\n');
disp(fliplr(flipud(v)));
fprintf('迭迭代次数:%d\n',t);
%绘制等势线
contour(v,hv,'linewidth',2);
axis([0.5 x+0.5 0.5 y+0.5]);
hold on;
plot([1,1,x,x,1],[1,y,y,1,1],'k','linewidth',2);
text((x+1)/2,0.8,'0V','fontsize',11);
text((x+1)/2,y+0.2,'100V','fontsize',11);
text(0.7,(y+1)/2,'0V','fontsize',11);
text(x+0.1,(y+1)/2,'0V','fontsize',11);
title('无限长直金属槽的等势线图','fontsize',16,'color','k');
hold off;
输出结果:
可见点数太少,等势线不够平滑。重新设置步长
hx=0.1;%设置x步长
hy=0.1;%设置y步长
可得下图:
相对可以得出比较准确的等势线图。当然,这里也可以通过插值的方法实现。
2.算法比较
以允许误差为0.001为准,将场域16等分。
输出如下:
可见迭代次数为28次。
发现迭代次数明显减少了。