电磁场实验之有限差分法求解金属槽电位问题matlab程序
有限差分法Matlab实现课件
函数与脚本
03
Matlab中的函数和脚本可以用来组织代码和实现特
定功能,支持参数传递和局部变量。
Matlab的数据类型
数值型
数值型变量用于存储数字数据,包括整数 和浮点数。
单元数组
单元数组是一种特殊的数据类型,可以用 来存储多个字符串或数值型数据,每个元 素用方括号括起来。
总结词:三维有限差分法是求解偏微分方程的一种数值 方法,通过在三个方向上将方程离散化,用差分近似代 替微分,从而将原问题转化为求解一系列线性方程组。
1. 将求解区域划分为一系列离散的网格点;
详细描述:三维有限差分法通常采用如下的步骤进行实 现
2. 用差分近似代替微分,将原微分方程转化为差分方 程;
3. 利用线性方程组的求解方法,如高斯消元法、迭代法 等,求解差分方程;
r(i,i+1) = -2/h^2 + x(i+1)^2/h^2;
b(i) = (u(i+1) - 2*u(i) + u(i-1))/h^2 x(i)^2*u(i)/h^2;
一维有限差分法的代码示例及解析
end
r(1,1) = r(N,N) = 4/h^2;
b(1) = b(N) = (u(2) - u(1))/h^2;
在图像处理中的应用
图像去噪
有限差分法可以用来对图像进行去噪处理,通过减少图像中的噪声 来提高图像质量。
图像增强
有限差分法可以用来增强图像的边缘和细节,提高图像的视觉效果 。
图像重建
有限差分法可以用来从部分图像中重建出完整的图像,应用于计算 机视觉、模式识别等领域。
05
CATALOGUE
Matlab实现的代码示例及解析
工程电磁场C++编程作业-一、用超松弛迭代法求解接地金属槽内电位的分布二、按对称场差分格式求解电位的分布
工程电磁场实验报告——C++编程课题一、用超松弛迭代法求解接地金属槽内电位的分布二、按对称场差分格式求解电位的分布一、用超松弛迭代法求解接地金属槽内电位的分布一、实验原理二、程序框图:三、实验内容:1、用超松弛迭代法求解接地金属槽内点位分布1)内容及要求:2)实验思路:由超松弛迭代法,将网格分成5*5列,边界点正好都是网格的节点,对所有的节点进行编号,并记录节点的坐标位置,并用一个二维数组进行表示u1[5][5],此数组表示的是迭代后的值。
考虑到迭代前后的数值不一样,再用一个二维数组表示迭代之前的数值u2[5][5]。
运用C++的知识在计算机上将边界值和内节点进行赋值,即将节点离散化。
然后开始迭代。
迭代开始之前将另一个数组b赋值,用数组a给其赋值,表示迭代之前的值,好用于后面精度的比较。
开始进行迭代时,根据超松弛公式将迭代方程编写输入。
每次迭代结束后将数组a和数组b对应的值进行比较,即是精度的计算。
如果误差大于所规定的误差0.00001,将a的值赋给b,然后继续进行迭代。
直到当迭代前后数值误差小于所规定的误差时停止迭代。
并比较迭代因子的大小对收敛次数的影响,选取最烧收敛次数的迭代因子作为实验最后的输出结果。
最后输出最适合迭代因子、迭代的次数和迭代后各点的电位值。
3)程序如下://********用超松弛迭代法求解接地金属槽内电位的分布********#include<iostream.h>#include<math.h>#include<iomanip.h>Void main(){double u1[5][5],u2[5][5];int flag=1000,i,j,e,n;double a,d;//a最佳加速收敛因子for(i=0;i<5;i++)for(j=0;j<5;j++){if(i==0)u1[i][j]=100;else u1[i][j]=0;}cout<<"迭代前各电位点上的初始值:"<<endl;for(i=0;i<5;i++){for(j=0;j<5;j++){cout<<u1[i][j]<<" ";//输出迭代初值}cout<<endl;}cout<<"\n";for(d=1;d<2;d+=0.01)//找取迭代次数最少的加速收敛因子{n=0;for(j=0;j<5;j++){u1[0][j]=100;}for(i=1;i<5;i++)for(j=0;j<5;j++){u1[i][j]=0;}do//迭代x次{for(i=0;i<5;i++){for(j=0;j<5;j++){u2[i][j]=u1[i][j];}}for(i=1;i<4;i++)for(j=1;j<4;j++){u1[i][j]=u2[i][j]+(d/4)*(u2[i+1][j]+u2[i][j+1]+u1[i-1][j]+u1[i][j-1]-4*u2[i][j]);}for(i=1;i<4;i++)//判断精度{{for(j=1;j<4;j++){if(fabs(u1[i][j]-u2[i][j])>1e-5){e=1; break; }else e=0; }if(e==1) break; }}n++;//迭代次数}while(e);if(n<flag) {flag=n; a=d; }}cout<<"收敛因子:"<<a<<endl;cout<<endl;cout<<"迭代次数:"<<flag<<endl;cout<<endl;cout<<"各节点上最终电位近似值:"<<endl;for(i=0;i<5;i++){for(j=0;j<5;j++){cout<<setiosflags(ios::fixed)<<setprecision(5)<<setw(8)<<u1[i][j]<<" ";//对齐输出}cout<<endl; }cout<<endl; }4)输出结果:5)总结:最佳收敛因子:1.18此时的最少迭代次数:102、按对称场差分格式求解电位的分布1)内容及要求:2)实验思路:类似与第一题的思路,但只计算一半的区域,对另一半进行对称性计算,减小计算量。
有限差分法
班级:通信13-4 姓名:学号:指导教师:**成绩:电子与信息工程学院信息与通信工程系求解金属槽的电位分布1.实验原理利用有限差分法和matlab软件解决电位在金属槽中的分布。
有限差分法基本思想是把连续的定解区域用有限个离散点构成的网格来代替,这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解.然后再利用插值方法便可以从离散解得到定解问题在整个区域上的近似解.在采用数值计算方法求解偏微分方程时,若将每一处导数由有限差分近似公式替代,从而把求解偏微分方程的问题转换成求解代数方程的问题。
2.有限差分法方程的定解问题就是在满足某些定解条件下求微分方程的解。
在空间区域的边界上要满足的定解条件称为边值条件。
如果问题与时间有关,在初始时刻所要满足的定解条件,称为初值条件。
不含时间而只带边值条件的定解问题,称为边值问题。
与时间有关而只带初值条件的定解问题,称为初值问题。
同时带有两种定解条件的问题,称为初值边值混合问题。
定解问题往往不具有解析解,或者其解析解不易计算。
所以要采用可行的数值解法。
有限差分方法就是一种数值解法,它的基本思想是先把问题的定义域进行网格剖分,然后在网格点上,按适当的数值微分公式把定解问题中的微商换成差商,从而把原问题离散化为差分格式,进而求出数值解。
此外,还要研究差分格式的解的存在性和唯一性、解的求法、解法的数值稳定性、差分格式的解与原定解问题的真解的误差估计、差分格式的解当网格大小趋于零时是否趋于真解(即收敛性),等等。
有限差分方法具有简单、灵活以及通用性强等特点,容易在计算机上实现。
2.1有限差分法原理图1-1 有限差分法的网格划分导体槽中静电场的边值问题的拉普拉斯方程为:22220x y ϕϕ∂∂+=∂∂ (1-1) 为简单起见,将场域分成足够小的正方形网格,网格线之间的距离为h ,0h →。
Matlab实现电磁场数值计算
第2章
第2章
Matlab直观描述复杂的物理现象
均匀带电线段的电场和电势分布
电量均匀分布在长2L的线段上,单位长度上的电荷密度为τ。 (1)求任一点的电场强度,电场强度分布曲面的规律是什么? (2)求任一点的电势,电势分布曲面的规律是什么?电场线和等 势线是如何分布的?
距离带电线段越近, 电势就越高。
数值法
有限差分法 有限元法 边界元法 矩量法 积分方程法
计算电磁场问题的方法 数值法 解析法 分离变量法:严格求解偏微分方程的经典方法 变换数学法:严格求解积分方程的方法 解析法的优点是: ①可将解答表示为已知函数的显式,从而计算出精确的数值结果; ②可以作为近似解和数值解的检验标准; ③在解析过程中和在解的显式中可以观察到问题的内在联系和各个 参数对数值结果所起的作用。
电磁场分布型问题的数值积分法 梯形法
Matlab实现电磁场数值计算
均匀带电线段的电场
真空中有一长为L的均匀带电直导线,带 电量为Q ,试求中垂线上P 点的电场。
dz
解析法:
z 1 1 Ez - ( ) 3 dz 2 2 2 2 L1 4 π ( z ) 2 2 2 4 π o L L o 2 1 L2 L1 L ( 2 2 ) E L d z 2 2 2 2 4 π L L o 4π o ( z ) 2 1
N越大,子区间越窄,数值解和解析解越接近;
当距离ρ 大于30后,数值解与解析解十分接近,能够满足电磁场工程的一般要求。
z L / 2 (n 0.5)z NMAX=1000; Q=1; N z L=10; E p=Q/L; 4 0 n1 2 L / 2 (n 0.5)z 2 3 2 aa=[1,5,10,20,30,40,50,100,600,1000,0]; eplot1=aa L eplot2=aa E E0=(1/36/pi)*1e-9; 2 0 L2 4 2 disp(' ') disp('参数取值:') disp([ ‘ ','棒长L=',num2str(L),',','棒的总电荷Q=',num2str(Q),',','N=',num2str(NMAX)]) disp(' ') disp([ ‘ ','距离a',' ','数值解E',' ','精确解E1']); i=1; while(1); a=aa(i); if a<=0 break;end dz=L/NMAX; E=0; for n=1:NMAX temp=sqrt(a*a+((n-0.5)*dz-L/2)^2); E=E+dz/temp^3; end E=p*a/(4*pi*E0)*E; eplot1(i)=log(E) E1=p*L/(2*pi*E0*a*sqrt(4*a*a+L*L)); eplot2(i)=log(E1) disp([' ',num2str(a),' ',num2str(E),' ',num2str(E1)]); i=i+1; end clf plot(aa(1:10),eplot1(1:10),'r-',aa(1:10),eplot2(1:10),'b.','MarkerSize',20,'LineWidth',2) legend('数值解','解析解','Location','Best') xlabel('距离\rho') ylabel('log(E)')
有限差分法的Matlab程序
有限差分法的M a t l a b程序有限差分法的Matlab程序(椭圆型方程)function FD_PDE(fun,gun,a,b,c,d)% 用有限差分法求解矩形域上的Poisson方程tol=10^(-6); % 误差界N=1000; % 最大迭代次数n=20; % x轴方向的网格数m=20; % y轴方向的网格数h=(b-a)/n; % x轴方向的步长l=(d-c)/m; % y轴方向的步长for i=1:n-1x(i)=a+i*h;end % 定义网格点坐标for j=1:m-1y(j)=c+j*l;end % 定义网格点坐标u=zeros(n-1,m-1); %对u赋初值% 下面定义几个参数r=h^2/l^2;s=2*(1+r);k=1;% 应用Gauss-Seidel法求解差分方程while k<=N% 对靠近上边界的网格点进行处理% 对左上角的网格点进行处理z=(-h^2*fun(x(1),y(m-1))+gun(a,y(m-1))+r*gun(x(1),d)+r*u(1,m-2)+u(2,m-1))/s; norm=abs(z-u(1,m-1));u(1,m-1)=z;% 对靠近上边界的除第一点和最后点外网格点进行处理for i=2:n-2z=(-h^2*fun(x(i),y(m-1))+r*gun(x(i),d)+r*u(i,m-2)+u(i+1,m-1)+u(i-1,m-1))/s;if abs(u(i,m-1)-z)>norm;norm=abs(u(i,m-1)-z);endu(i,m-1)=z;end% 对右上角的网格点进行处理z=(-h^2*fun(x(n-1),y(m-1))+gun(b,y(m-1))+r*gun(x(n-1),d)+r*u(n-1,m-2)+u(n-2,m-1))/s; if abs(u(n-1,m-1)-z)>normnorm=abs(u(n-1,m-1)-z);endu(n-1,m-1)=z;% 对不靠近上下边界的网格点进行处理for j=m-2:-1:2% 对靠近左边界的网格点进行处理z=(-h^2*fun(x(1),y(j))+gun(a,y(j))+r*u(1,j+1)+r*u(1,j-1)+u(2,j))/s;if abs(u(1,j)-z)>normnorm=abs(u(1,j)-z);endu(1,j)=z;% 对不靠近左右边界的网格点进行处理for i=2:n-2z=(-h^2*fun(x(i),y(j))+u(i-1,j)+r*u(i,j+1)+r*u(i,j-1)+u(i+1,j))/s;if abs(u(i,j)-z)>normnorm=abs(u(i,j)-z);endu(i,j)=z;end% 对靠近右边界的网格点进行处理z=(-h^2*fun(x(n-1),y(j))+gun(b,y(j))+r*u(n-1,j+1)+r*u(n-1,j-1)+u(n-2,j))/s;if abs(u(n-1,j)-z)>normnorm=abs(u(n-1,j)-z);endu(n-1,j)=z;end% 对靠近下边界的网格点进行处理% 对左下角的网格点进行处理z=(-h^2*fun(x(1),y(1))+gun(a,y(1))+r*gun(x(1),c)+r*u(1,2)+u(2,1))/s;if abs(u(1,1)-z)>normnorm=abs(u(1,1)-z);endu(1,1)=z;% 对靠近下边界的除第一点和最后点外网格点进行处理for i=2:n-2z=(-h^2*fun(x(i),y(1))+r*gun(x(i),c)+r*u(i,2)+u(i+1,1)+u(i-1,1))/s;if abs(u(i,1)-z)>normnorm=abs(u(i,1)-z);endu(i,1)=z;end% 对右下角的网格点进行处理z=(-h^2*fun(x(n-1),y(1))+gun(b,y(1))+r*gun(x(n-1),c)+r*u(n-1,2)+u(n-2,1))/s;if abs(u(n-1,1)-z)>normnorm=abs(u(n-1,1)-z);endu(n-1,1)=z;% 结果输出if norm<=tolfid = fopen('FDresult.txt', 'wt');fprintf(fid,'\n********用有限差分法求解矩形域上Poisson方程的输出结果********\n\n'); fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,' x的值 y的值 u的值 u的真实值 |u-u(x,y)|\n');for i=1:n-1for j=1:m-1fprintf(fid, '%8.3f %8.3f %14.8f %14.8f %14.8f\n', [x(i),y(j),u(i,j),gun(x(i),y(j)),abs(u(i,j)-gun(x(i),y(j)))]);endendfclose(fid);break; % 用来结束while循环endk=k+1;endif k==N+1fid = fopen('FDresult.txt', 'wt');fprintf(fid,'超过最大迭代次数,求解失败!');fclose(fid);endclc[a1 a2 a3 a4] = textread('F:\aa.txt','%f %f %f %f');a = [a1 a2 a3];a=a';b=a4';[pa,mina,maxa,pb,minb,maxb]=premnmx(a,b);net =newrb(pa,pb,0,1.3,24,2);an =sim(net,pa);E = an - pb;m =sse(E)n = mse(E)[f1 f2 f3 f4]= textread('F:\bb.txt','%f %f %f %f');f = [f1 f2 f3];f=f';pf = tramnmx(f,mina,maxa);an2 = sim(net,pf);g =postmnmx(an2,minb,maxb);g= g';E2 = g- f4;mm =sse(E2)nn = mse(E2)。
matlab实现有限差分法计算电场强度(最新)
实验一:有限差分法研究静电场边值问题实验报告人:年级和班级:学号:1. 实验用软件工具: Matlab2. 实验原理:电磁场课本P36-381)差分方程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);v1v2=v1;maxt=1;t=0;k=0;while(maxt>1e-5)k=k+1;maxt=0;for i=2:hy-1for j=2:hx-1v2(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;endendendv1=v2;endv2kclfsubplot(1,2,1),mesh(v2)axis([0,41,0,21,0,100])subplot(1,2,2),contour(v2,15)hold onaxis([-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-1for j=2:hx-1v2(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;endendendv1=v2;endv2kclfsubplot(1,2,1),mesh(v2)axis([0,41,0,21,0,100])subplot(1,2,2),contour(v2,15)hold onaxis([-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);v1v2=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-1for j=2:hx-1v2(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;endendendv1=v2;endv2kclfsubplot(1,2,1),mesh(v2)axis([0,41,0,21,0,100])subplot(1,2,2),contour(v2,15)hold onaxis([-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取不同值时迭代次数4)画三维曲面图和等位线图(逐次超松弛法最佳迭代次数时)程序: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);v1v2=v1;maxt=1;t=0;alpha=1.8;k=0;while(maxt>1e-5)k=k+1;maxt=0;for i=2:hy-1for j=2:hx-1v2(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;endendendv1=v2;endv2kclfsubplot(1,2,1),mesh(v2)axis([0,41,0,21,0,100])subplot(1,2,2),contour(v2,15)hold onaxis([-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贴图:4.实验结论(1)matlab软件在使用有限差分法研究静电场边值问题中有着重要的作用,它能够快捷有效并且准确的解决边值问题,是解决计算相对复杂问题的有效工具。
Matlab-求解金属槽槽内电位分布---副本培训讲学
M a t l a b-求解金属槽槽内电位分布---副本Matlab 求解金属槽槽内电位分布摘要运用有限差分法将场域离散为许多小网格,将求解连续函数ϕ的泊松方程的问题换为求解网格节点上ϕ的差分方程组的问题。
用matlab程序计算出槽内电位分布的结果。
通过数值解和精确解的比较来验证有限差分法的可行性。
关键词:有限差分法; Matlab;金属槽槽内电位Solving the metal slots potential with MatlabAbstract:U sing the finite difference method (FDM)field is discreted into many small grid, transform ing the problem solving poisson equation with continuous function ϕ for solving the differential equations of grid node ϕ. We use Matlab program to calculate the potential distribution in slot results. The values got from these two methods are compared, which would be a validation of the feasibility of the Finite Difference Method.1 引言如图1所示,尺寸为a×a的正方形金属导体槽三面接地,上方是一块密实的但与之绝缘的金属盖板,其电位100Vϕ=,求槽内电位的分布情况。
这是二维静态场域的边值问题,在直角坐标系中,接地导体矩形槽中的电位函数p满足拉普拉斯方程2222x yϕϕ∂∂+=∂∂。
Xaa图1 正方形金属槽其边界条件满足第一类边界条件问题0(x,y)0x ϕ== (x,y)0x aϕ==(x,y)0y ϕ== (x,y)100y aϕ==我们由此可求出矩形导体槽内电位的分布数值解.将金属槽内场域D 用正方形网格进行粗略划分,其网格节点分布如图2所示网格间距为h=a/4,各边的节点数为L+1=5.234512345图2 网格划分2 求解2.1数值解求解过程由于本文采用的是超松弛迭代法的差分方程形式,现给出公式(n 1)(n)(n)(n)(n 1)(n 1)2(n),,1,,11,,1,,(4)4i ji ji ji j i ji j i j i jw h f ϕϕϕϕϕϕϕ+++++--=++++--(2.1)进行迭代,因为满足拉普拉斯方程故 f=0。
有限差分法计算金属槽内电位分布
班级:物理08-2B 姓名:胡艳学号:08070201010有限差分法计算金属槽内电位分布一、选题依据求解电位分布问题是物理学中最常见的问题之一,采用有限差分法解决此类问题是十分有效的。
差分方程确定之后,一般选用迭代法求解,这是由于方程组系数矩阵中有大量元素为零,并且系数矩阵形成比较简单,有规律和重复。
在迭代过程中常常可以一边形成系数矩阵一边计算,以节省内存,因而迭代法比直接法更常用。
迭代法中又以超松弛迭代法最常用,以下给出超松弛迭代方法的公式。
对于二维场泊松方程等距剖分差分格式公式为()()()()()()()⎪⎪⎭⎫ ⎝⎛Φ--+Φ+-+Φ++Φ++Φ+Φ=+Φj i n j i n j i n j i n j i n ji n ji n ,41,1,111,,14,,1α(2.67)式中α称为加速收敛因子或超松弛因子,它的数值决定超松弛程度,影响迭代解收敛的速度。
α取值范围是1 ≤ α <2 (2.68)加速收敛因子α取值因问题而异,对于第一类边值问题,若一方形场域由正方形网格划分,每边的节点数为(n+1),则加速收敛因子α可按下式计算:nπαs i n12+=(2.69)若一矩形场域由边长为h 的正方形网格划分为mh 和nh ,且m 和n 都很大(一般都要大于15),那么加速收敛因子α为n m 221122+-=πα (2.70)一般情况下,α的最佳值只能是凭经验选取。
对于其他形状的场域,也可用等效矩形面积的处理方法,即得出等效矩形面积后,再用式(2.70)求出最佳的α。
下面我们来看一个计算电位分布的实例。
二、处理过程实例:有一长接地金属槽,横截面积如图2.15所示,其侧壁与底面电位均为零,顶盖电位为100V ,求槽内电位分布。
分析:对于此槽中间区段电位分布,可理想化为二维问题。
选定直角坐标系,槽内电位函数Φ满足拉普拉斯方程,构成一类边值问题。
2222=∂Φ∂+∂Φ∂yxVay a x 1006.0,0=Φ=<<Vay a x y a x ay x 06.00,0,06.00,0=Φ=Φ=Φ≤==≤≤≤=<<按有限差分法计算步骤,解题过程如下。
Matlab-求解金属槽槽内电位分布---副本培训讲学
M a t l a b-求解金属槽槽内电位分布---副本Matlab 求解金属槽槽内电位分布摘要运用有限差分法将场域离散为许多小网格,将求解连续函数ϕ的泊松方程的问题换为求解网格节点上ϕ的差分方程组的问题。
用matlab程序计算出槽内电位分布的结果。
通过数值解和精确解的比较来验证有限差分法的可行性。
关键词:有限差分法; Matlab;金属槽槽内电位Solving the metal slots potential with MatlabAbstract:U sing the finite difference method (FDM)field is discreted into many small grid, transform ing the problem solving poisson equation with continuous function ϕ for solving the differential equations of grid node ϕ. We use Matlab program to calculate the potential distribution in slot results. The values got from these two methods are compared, which would be a validation of the feasibility of the Finite Difference Method.1 引言如图1所示,尺寸为a×a的正方形金属导体槽三面接地,上方是一块密实的但与之绝缘的金属盖板,其电位100Vϕ=,求槽内电位的分布情况。
这是二维静态场域的边值问题,在直角坐标系中,接地导体矩形槽中的电位函数p满足拉普拉斯方程2222x yϕϕ∂∂+=∂∂。
Xaa图1 正方形金属槽其边界条件满足第一类边界条件问题0(x,y)0x ϕ== (x,y)0x aϕ==(x,y)0y ϕ== (x,y)100y aϕ==我们由此可求出矩形导体槽内电位的分布数值解.将金属槽内场域D 用正方形网格进行粗略划分,其网格节点分布如图2所示网格间距为h=a/4,各边的节点数为L+1=5.234512345图2 网格划分2 求解2.1数值解求解过程由于本文采用的是超松弛迭代法的差分方程形式,现给出公式(n 1)(n)(n)(n)(n 1)(n 1)2(n),,1,,11,,1,,(4)4i ji ji ji j i ji j i j i jw h f ϕϕϕϕϕϕϕ+++++--=++++--(2.1)进行迭代,因为满足拉普拉斯方程故 f=0。
有限差分法解决电场边值问题
ϕ =0
o
x
a
具体要求: 具体要求: (1) 编写一个计算机程序(Matlab):以步距 编写一个计算机程序( 以步距h=a/40的正方形网格离散化场域, 的正方形网格离散化场域, ) 以步距 的正方形网格离散化场域 的数值解。 然后应用有限差分法求电位ϕ的数值解。 (2)求相邻两次迭代值的指定的最大允许误差小于 -5的迭代收敛解和迭代次 求相邻两次迭代值的指定的最大允许误差小于10 求相邻两次迭代值的指定的最大允许误差小于 分别用简单迭代法、高斯-赛德尔迭代法和逐次超松弛法 赛德尔迭代法和逐次超松弛法)。 数(分别用简单迭代法、高斯 赛德尔迭代法和逐次超松弛法)。 (3) 对逐次超松弛法,分别取α为n个不同的值和最佳值α0,求电位ϕ的数值解, 对逐次超松弛法, 的数值解, 个不同的值和最佳值 以此分析加速收敛因子的作用。 以此分析加速收敛因子的作用。从迭代收敛时的迭代次数和最终数值解这两 方面总结自已的看法。 方面总结自已的看法。 (4)用计算机描绘等位线分布。 用计算机描绘等位线分布。 用计算机描绘等位线分布
y
u=0 u=0 u=100 u=0
y y
u=0 u=0 0 u=0 u=100
0
x
hy x i行
行 hx=5 列 hy=3
j列 hx x
y 高斯-赛德尔迭代法 高斯 赛德尔迭代法 1 ϕi(,kj+1) = (ϕi(+k1), j + ϕi(,kj)+1 + ϕi(−k1+1j) + ϕi(,kj+1) ) , −1 4 u=0
简单迭代法
ϕ
( k +1) i, j
1 (k ) k = (ϕ i −1, j + ϕ i(,kj)−1 + ϕ i(+1), j + ϕ i(,kj)+1 ) 4
项目训练二 求二维金属槽内的点位分布
将这几点的电位用泰勒级数展开,化简,近似可得:
1
0
1 ( ) 2 3 4 4 1
上式表明,任一点的电位等于它周围四个点电位的平均值。
图 3-1 差分网格
差分方程的数值解法: 平面内有多少个节点,就能得到多少个差分方程,当这些节点数目较大时,使用迭代 法求解差分方程组比较方便。 a. 简单迭代法: 用迭代法解二维电位分布时,将包含边界在内的节点均以下标(i,j)表示,i,j 分 别表示沿 x,y 方向的标点。次序是 x 方向从左到右,y 方向从上到下,我们用上标 n 表示 某点电位的第 n 次的迭代值。下式得出点(i,j)的第 n+1 次电位的计算公式:
n n 1 n 1 1 n ( ) i , j 1 i 1, j i , j 1 4 i 1, j
c. 超松弛迭代法:
n 1 i, j
此式也称为异步迭代法,异步迭代法比简单迭代法收敛速度加快一倍左右。
为了加快收敛速度,常采用超松弛迭代法。计算时,将某点的新老电位值之差乘以一
图 4-3 三维电位分布图 等位线分布图
4.6 中心点电位的数值解和精确解的比较
4.6.1 中心点 p ( , ) 的数值解:
因为电位是从上至下逐渐呈递减状,中间点的所在等位线的 a b 为 50V。
, 2 2
a b 2 2 a b 2 2
4.6.2 中心点 p ( , ) 的精确解:
在不同的 m 取值下, a b 的取值会不同。
, 2 2
m=1.2, a b =49.5133V
, 2 2 , 2 2
m=1.4, a b =49.5149V M=1.6, a b =49.5161V
有限差分法及matlab实现
U i1, j , k U i−1, j , k U i , j 1, kU i , j −1, kU i , j , k1 U i , j , k−1 = 6U i , j , k ρ ----- (1) ⋯ ∂ x 2 ∂ x2 6 ∂ x3 ∂ U 1 ∂2 U 1 ∂3 U U i , j 1, k =U i , j ,k ⋯ ∂ y 2 ∂ y2 6 ∂ y3 ∂ U 1 ∂2 U 1 ∂ 3 U U i , j , k1 =U i , j ,k ⋯ ∂ z 2 ∂ z2 6 ∂ z3 ∂ U 1 ∂2 U 1 ∂3 U U i−1, j , k =U i , j , k− − ⋯ ∂ x 2 ∂ x2 6 ∂ x3 ∂ U 1 ∂2 U 1 ∂3 U U i , j 1, k =U i , j , k− − ⋯ ∂ y 2 ∂ y2 6 ∂ y3 ∂ U 1 ∂2 U 1 ∂ 3 U U i , j , k1 =U i , j , k− − ⋯ ∂ z 2 ∂ z2 6 ∂ z3 U i1, j , k =U i , j ,k
= 6U i , j , k ρ
这就是泊松方程的有限差分形式,以下估计该方程的精度: 由泰勒公式,易知有以下结果:
∂U 1 ∂2 U 2 1 ∂3 U 3 h h h ⋯ ∂x 2 ∂ x2 6 ∂ x3 ∂U 1 ∂ 2 U 2 1 ∂3 U 3 U x , y k, z =U x , y , z k k k ⋯ ∂y 2 ∂ y2 6 ∂ y3 2 3 ∂U 1∂ U 2 1∂ U 3 U x , y , z l =U x , y , z l l l ⋯ ∂z 2 ∂ z2 6 ∂ z3 U x h , y , z =U x , y , z
MATLAB超松弛迭代法求解接地金属槽内电位分布
用超松弛迭代法求解接地金属槽内电位分布一、实验内容:试用超松弛迭代法求解接地金属槽内电位的分布。
已知:cm a 4=,mm a h 104/== 给定边值如图所示。
给定初值:0)0(,=j i ϕ 误差范围:510-=ε 计算迭代次数,j i ,ϕ分布。
二.实验设计原理:有限差分法有限差分法(Finite Differential Method )是基于差分原理的一种数值计算法。
其基本思想:将场域离散为许多小网格,应用差分原理,将求解连续函数ϕ的泊松方程的问题换为求解网格节点上ϕ的差分方程组的问题。
编程时已经考虑到题目要求,所以直接将边值编入到程序中,编写成function 的M 文件,这样只要调用此M 文件,输入变量为迭代因子,即可输出电位矩阵和迭代次数。
迭代时所用公式为U2(i,j)=U1(i,j)+a*(U1(i,j+1)+U1(i+1,j)+U2(i-1,j)+U2(i,j-1)-4*U1(i,j))/4 其中U2代表k+1,而U1代表k 。
以上分析了迭代程序的实现,但是迭代循环如何终止并未说明。
题目中的误差范围ε=0.00001,即当两次迭代结果相差不超过ε时停止,这里必须是九点都满足不超过ε,而并不是其中某一点达到即可。
当迭代次数过多时,程序会运行很长时间,(本题要求电位点数较少,不会出现迭代次数过多的情况。
当然点数越多结果越精确。
)当迭代因子a2时,迭代不收敛,程序会陷入死循环,因此需要限制循环次数,迭代100000次无结果则退出循环,防止程序崩溃。
这样可以画出流程图如下所示:否是三、程序运行界面及结果=ϕ= V100 ϕ 0=ϕ0=ϕ启动输入迭代因子迭代次数k=0 k=k+1 开始循环迭代 函数判断相邻二次差值是否小于给定值 输出k,电位U1适当改变迭代因子a的值是否能够减少迭代次数?我做了如下试验:迭代因子a 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9迭代次数k 17 11 14 51 不收敛可见,这样的更改在a取合适的值的时候能带来迭代次数十分显著的减少,但什么样的a才是“合适的”值,因为当a太小时,每次迭代U不能获得足够的增量。
有限差分法
班级:通信13-4 姓名:学号:指导教师:**成绩:电子与信息工程学院信息与通信工程系求解金属槽的电位分布1.实验原理利用有限差分法和matlab软件解决电位在金属槽中的分布。
有限差分法基本思想是把连续的定解区域用有限个离散点构成的网格来代替,这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解.然后再利用插值方法便可以从离散解得到定解问题在整个区域上的近似解.在采用数值计算方法求解偏微分方程时,若将每一处导数由有限差分近似公式替代,从而把求解偏微分方程的问题转换成求解代数方程的问题。
2.有限差分法方程的定解问题就是在满足某些定解条件下求微分方程的解。
在空间区域的边界上要满足的定解条件称为边值条件。
如果问题与时间有关,在初始时刻所要满足的定解条件,称为初值条件。
不含时间而只带边值条件的定解问题,称为边值问题。
与时间有关而只带初值条件的定解问题,称为初值问题。
同时带有两种定解条件的问题,称为初值边值混合问题。
定解问题往往不具有解析解,或者其解析解不易计算。
所以要采用可行的数值解法。
有限差分方法就是一种数值解法,它的基本思想是先把问题的定义域进行网格剖分,然后在网格点上,按适当的数值微分公式把定解问题中的微商换成差商,从而把原问题离散化为差分格式,进而求出数值解。
此外,还要研究差分格式的解的存在性和唯一性、解的求法、解法的数值稳定性、差分格式的解与原定解问题的真解的误差估计、差分格式的解当网格大小趋于零时是否趋于真解(即收敛性),等等。
有限差分方法具有简单、灵活以及通用性强等特点,容易在计算机上实现。
2.1有限差分法原理图1-1 有限差分法的网格划分导体槽中静电场的边值问题的拉普拉斯方程为:22220x y ϕϕ∂∂+=∂∂ (1-1) 为简单起见,将场域分成足够小的正方形网格,网格线之间的距离为h ,0h →。
有限差分法
有限差分法一、有限差分法的定义有限差分法(Finite Differential Method )是基于差分原理的一种数值计算法。
其基本思想:将场域离散为许多小网格,应用差分原理,将求解连续函数ϕ的泊松方程的问题转换为求解网格节点上ϕ的差分方程组的问题。
二、有限差分法的应用例3.7.1 有一个无限长直的金属槽,截面为正方形,两侧为正方形,两侧面及底板接地,上盖板与侧面绝缘,其上的电位为ϕ=100V, 试用有限差分法计算槽内电位。
(1)用Matlab 中的有限差分法计算槽内电位;(2)对比解析法和数值法的异同点;(3)选取一点,绘制收敛曲线;(4)总的三维电位图;1、根据有限差分公式计算出电位最终近似值为1,12,13,11,22,23,21,32,33,3=7.144=9.823=7.144=18.751=25.002=18.751=42.857=52.680=42.857ϕϕϕϕϕϕϕϕϕ,,,,,,用Matlab有限差分法计算出来结果:(见附录程序一)2、解析法和数值法的异同点解析法数值法定义在分析具体问题的基础上,抽取出一个数学模型,这个数学模型能用若干个解析表达式表示出来,解决了这些表达式,问题也就得以解决。
数值法是用高性能的计算机以数值的、程序的形式解决问题,主要是指有限元法和差分法相同点都是在具体问题的基础上取一个用解析表达式表示的数学模型来解决问题;数值法是在解析法的基础上在不同尺度上进行有限元离散,离散单元尺度不同,进行有限元计算时要满足的连续性条件不同,预测结果的精确度就不同不同点解析法可以计算出精确的数值结果;可以作为近似解和数值解的检验标准;解析法过程可以观察到问题的内在和各个参数对数值结果起的作用。
但是分析过程困难又复杂使其仅能解决很少量的问题。
数值法求解过程简单,普遍性强,用户拥有的弹性大;用户不必具备高度专业化的理论知识就可以用提供的程序解决问题。
但求解结果没有解析法精确。
用超松弛迭代法求解接地金属槽内电位分布
实验一用超松弛迭代法求解接地金属槽内电位分布一、实验原理(有限差分法介绍)有限差分法(Finite Differential Method)是基于差分原理的一种数值计算法。
其基本思想:将场域离散为许多小网格,应用差分原理,将求解连续函数ϕ的泊松方程的问题转换为求解网格节点上ϕ的差分方程组的问题。
二.实验内容与要求1. 试用超松弛迭代法求解接地金属槽内电位的分布。
已知:,cma4=mmah104/==给定边值如图所示。
给定初值:0)0(,=jiϕ误差范围:510−=ε计算迭代次数,ji,ϕ分布。
2、按对称场差分格式求解电位的分布(即求出D域的场分布,由对称性可得全域的场分布)已知,cma4=mmh14040==给定边值:如图1示给定初值)()(.1j401001jp12ji−=−−=ϕϕϕ误差范围: 510−=ε图1 接地金属槽内半场域的网格剖分计算:1)迭代次数,Nji,ϕ;2)按电位差10=Δϕ画出槽中等位线分布图。
图1.7 接地金属槽内网格0=ϕ=V 100 ϕ0=ϕ0=ϕ电磁场数值计算与仿真实验指导书63、分片场域的静电场分析(选做)用有限差分法计算区域内的电位、电场强度,绘制等位线。
并计算区域的电容,分析单元的大小对电容计算结果的影响,给出曲线。
100伏0伏εr1=2 εr2=4εr3=1εr4=3电磁场数值计算与仿真实验指导书7三、实验程序内容程序一:#include<iostream.h>#include<math.h>void main(){double m[5][5],n[5][5];int N=0,b=1;int i,j;double e=0.00001;double a=2/(1+sin(3.1415926/4));for(i=0;i<=4;i++)for(j=0;j<=4;j++){m[i][j]=0;n[i][j]=0;}m[1][4]=100;m[2][4]=100;m[3][4]=100;n[1][4]= m[1][4];n[2][4]= m[1][4];n[3][4]= m[1][4];for(j=4;j>=0;j--){for(i=0;i<=4;i++)cout<<"m["<<i<<"]["<<j<<"]"<<"="<<m[i][j]<<'\t';cout<<endl;}while(b==1){b=0;N=N+1;for(i=1;i<=3;i++)for(j=1;j<=3;j++)m[i][j]=m[i][j]+a*(m[i-1][j]+m[i][j-1]+m[i+1][j]+m[i][j+1]-4*m[i][j])/4; for(i=1;i<=3;i++)for(j=1;j<=3;j++){ if(fabs(m[i][j]-n[i][j])>=e)b=1;n[i][j]=m[i][j];}for(j=4;j>=0;j--){for(i=0;i<=4;i++)cout<<"m["<<i<<"]["<<j<<"]"<<"="<<m[i][j]<<'\t'; cout<<endl;}cout<<"N="<<N<<endl;}实验结果:N=13程序二:#include<iostream.h>#include<math.h>void main(){static double m[41][41],n[41][41];int N=0,b=1;int i,j;double e=0.00001;double a=2/(1+sin(3.1415926/4));for(i=2;i<=40;i++)for(j=2;j<=41;j++){m[i][j]=100*(j-1);m[i][j]=m[i][j]/40;n[i][j]=m[i][j];for(j=41;j>=1;j--){ for(i=1;i<=41;i++)cout<<m[i][j]<<'\t';cout<<endl;}while(b==1){b=0;N=N+1;for(i=2;i<=21;i++)for(j=2;j<=40;j++){m[i][j]=m[i][j]+a*(m[i-1][j]+m[i][j-1]+m[i+1][j]+m[i][j+1]-4*m[i][j])/4; }for(i=2;i<=21;i++)for(j=2;j<=40;j++){ if(abs(m[i][j]-n[i][j])>=e)b=1;n[i][j]=m[i][j];}}for(i=2;i<=21;i++)for(j=2;j<=40;j++)m[42-i][j]=m[i][j];cout<<endl;for(j=41;j>=1;j--){ for(i=1;i<=41;i++)cout<<m[i][j]<<'\t';cout<<endl;}cout<<"N="<<N<<endl;}实验结果:N=17等位线分布程序及图:(mathematic)。
有限差分法(大作业)
工程电磁场有限差分法学号:姓名:日期:2012年5月W u u Max k i k i <-+||)1()(题目:试用有限差分法求铝电解槽内电位的分布。
(1)计算电位分布; (2)电场强度分布;(3)讨论加速因子的影响。
解: (1) 取h=5。
划分网格,节点编号,坐标的形成。
(2) 对电位未知点赋电位初值: u7=u8=u9=10 u12=u13=u14=50(3) 边界条件:对已知点赋电位值。
u1=u2=u3=u4=u5=u6=u10=u11=u15=0 u16=u17=u18=u19=u20=100(4) 迭代格式:(5) 给定最大允许误差W=5×10-5。
反复迭代,直至满足给定误差:(6)考虑加速因子α的影响,记录迭代次数。
对应程序(C 语言)#include<stdio.h> #include<math.h> main( ){ int i; double w=5e-5;double a[1000],b[1000],c[1000],d[1000],e[1000],f[1000]; a[0]=b[0]=c[0]=10; d[0]=e[0]=f[0]=50;printf("\tu7\tu8\tu9\tu12\tu13\tu14\t\n"); for(i=0;i<1000;i++){ a[i+1]=(b[i]+d[i])/4; b[i+1]=(a[i]+c[i]+e[i])/4; c[i+1]=(b[i]+f[i])/4; d[i+1]=(a[i]+e[i]+100)/4; e[i+1]=(a[i]+d[i]+f[i]+100)/4; f[i+1]=(c[i]+e[i]+100)/4;printf("%2d:%10.4f%10.4f%10.4f%10.4f%10.4f%10.4f\n",i,a[i],b[i], c[i],d[i],e[i],f[i]);if( fabs(a[i+1]-a[i])<w &&fabs(b[i+1]-b[i])<w && fabs(c[i+1]-c[i])<w &&fabs(d[i+1]-d[i])<w &&4/)100139(144/)10014128(134/)100137(124/)148(94/)1397(84/)128(7)()1()1()()()1()1()()1()1()()1()1()()()1()1()()()1(++=+++=++=+=++=+=+++++++++++k k k k k k k k k k k k k k k k k k k k u u u u u u u u u u u u u u u u u u u u u19)/4+u15+u13+(u9=u14u18)/4+u14+u12+(u8=u13u17)/4+u13+u11+(u7=u12u14)/4+u10+u8+(u4=u9u13)/4+u9+u7+(u3=u8 u12)/4+u8+u6+(u2=u7fabs(e[i+1]-e[i])<w &&fabs(f[i+1]-f[i])<w ) break; } }输出结果:● 电位计算公式:1213 14 ● 加速因子α的影响 (1≦α﹤2)Gauss-Seidel 迭代 ][41)(1,)(,1)1(1,)1(,1)1(,k j i k j i k j i k j i k j i +++-+-++++=ϕϕϕϕϕ 超松弛迭代法 ]4[4)(,)(1,)(,1)1(1,)1(,1)(,)1(,k j i k j i k j i k j i k j i k j i k j i ϕϕϕϕϕαϕϕ-++++=+++-+-+查资料得:最佳收敛因子的经验公式:2201122q p +-=πα(矩形场域、正方形网格) hE x 213ϕϕ-=hE y 224ϕϕ-=)e ye x (E y x ∂∂+∂∂-=-∇=ϕϕϕα=0.96≈1.本题中,p=4,q=3,求得故在W相同的条件下,当α=1.00时,迭代次数最少。
电磁场实验一_有限差分法的matlab实现
电磁场与电磁波实验报告实验项目:_______有限差分法__ ____ 班级:_____ __12电子2 ____ __ 实验日期:__2014年12月23日姓名:___ _ __陈奋裕 __ __ 学号:___ ___1215106003 _____ 组员姓名:___ _ __ __ __ 组员学号:___ ___ _____ 指导教师:_ ____张海 ______一、实验目的及要求1、学习有限差分法的原理与计算步骤;2、学习用有限差分法解静电场中简单的二维静电场边值问题;3、学习用Matlab 语言描述电磁场与电磁波中内容,用matlab 求解问题并用图形表示出了,学习matlab 语言在电磁波与电磁场中的编程思路。
二、实验内容理论学习:学习静电场中边值问题的数值法中的优先差分法的求解知识; 实践学习:学习用matlab 语言编写有限差分法计算二维静电场边值问题;三、实验仪器或软件电脑(WIN7)、Matlab7.11四、实验原理 基本思想是把连续的定解区域用有限个离散点构成的网格来代替, 这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似, 积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组 , 解此方程组就可以得到原问题在离散点上的近似解。
然后再利用插值方法便可以从离散解得到定解问题在整个区域上的近似解。
简单迭代法: 这一方法的求解过程是,先对场域内的节点赋予迭代初值(0),i j ϕ,这里上标(0)表示0次(初始)近似值。
然后按Laplace 方程(k 1)(k)(k)(k)(k),1,,11,,11[]4i j i j i j i j i j ϕϕϕϕϕ+--++=+++(i,j=1,2,…) 进行反复迭代(k=0,1,2,…)。
若当第N 次迭代以后,所有的内节点的相邻两次迭代值之间的最大误差不超过允许范围,即(N)(N-1),,max|-|<W i j i j ϕϕ这里的W 是预设的允许误差,此时即可终止迭代,并将第N 次迭代结果作为内节点上电位的最终数值解。