有限差分法实验报告
有限差分法实验报告(参考)

工程电磁场实验报告——有限差分法用超松弛迭代法求解 接地金属槽内电位的分布一、实验要求按对称场差分格式求解电位的分布 已知:给定边值:如图1-7示 图1-7接地金属槽内半场域的网格=ϕ= V100 ϕ 0=ϕ0=ϕ给定初值)()(.1j 401001j p12j i -=--=ϕϕϕ 误范围差: 510-=ε计算:迭代次数N ,j i ,ϕ,将计算结果保存到文件中二、实验思想有限差分法有限差分法(Finite Differential Method )是基于差分原理的一种数值计算法。
其基本思想:将场域离散为许多小网格,应用差分原理,将求解连续函数ϕ的泊松方程的问题转换为求解网格节点上ϕ的差分方程组的问题。
泊松方程的五点差分格式)(414243210204321Fh Fh -+++=⇒=-+++ϕϕϕϕϕϕϕϕϕϕ当场域中,0=ρ得到拉普拉斯方程的五点差分格式)(41044321004321ϕϕϕϕϕϕϕϕϕϕ+++=⇒=-+++差分方程组的求解方法(1) 高斯——赛德尔迭代法][)(,)(,)(,)(,)(,2k 1j i k j 1i 1k 1j i 1k j 1i 1k j i Fh 41-+++=+++-+-+ϕϕϕϕϕ (1-14)式中:⋅⋅⋅⋅⋅⋅=⋅⋅⋅⋅⋅⋅=,2,1,0,2,1,k j i ,迭代顺序可按先行后列,或先列后行进行。
迭代过程遇到边界节点时,代入边界值或边界差分 格式,直到所有节点电位满足εϕϕ<-+)(,)(,k j i l k j i 为止。
图1-4 高斯——赛德尔迭代法(2)超松弛迭代法][)(,)(,)(,)(,)(,)(,)(,k j i 2k 1j i k j 1i 1k 1j i 1k j 1i k j i 1k j i 4Fh 4ϕϕϕϕϕαϕϕ--++++=+++-+-+ (1-15)式中:α——加速收敛因子)21(<<α 可见:迭代收敛的速度与α有明显关系三、程序源代码#include<iostream.h> #include<math.h> #include<iomanip.h> double A[5][5]; void main(void) { double BJ[5][5];//数组B 用于比较电势 int s[100];//用于储存迭代次数double d[100];//用于记录所有的加速因子 d[0]=1.0;int i,j,N=0,M=0,x; for(i=0;i<100;i++)d[i]=0.01*i+d[0];//加速因子从1.0到2.0之间的20个数!double w[100][10];int P,Q;for(P=0;P<4;P++)for(Q=0;Q<5;Q++)A[P][Q]=0;for(P=0;P<5;P++)A[4][P]=100;cout<<"数组A的所有元素是:"<<endl; for(i=0;i<5;i++)for(j=0;j<5;j++){cout<<A[i][j]<<setw(6);if((5*i+j+1)%5==0)cout<<'\n';}int pp=0;for(x=0;x<100;x++){do{for(i=0;i<5;i++)for(j=0;j<5;j++)BJ[i][j]=A[i][j];for(i=1;i<4;i++)for(j=1;j<4;j++)A[i][j]=BJ[i][j]+(d[x]/4)*(BJ[i+1][j]+BJ[i][j+1]+A[i-1][j]+A[i][j-1]-4*BJ[i][ j]);//迭代公式for(i=1;i<4;i++){for(j=1;j<4;j++)if(fabs(A[i][j]-BJ[i][j])<1e-5)pp++;}N++;}while(pp<=9);pp=0;for(i=0;i<3;i++)w[M][i+1]=A[1][i+1];for(i=3;i<6;i++)w[M][i+1]=A[2][i-2];for(i=6;i<9;i++)w[M][i+1]=A[3][i-5];s[M]=N;M++;N=0;int P,Q;for(P=0;P<4;P++)for(Q=0;Q<5;Q++)A[P][Q]=0;for(P=0;P<5;P++)A[4][P]=100;}int min=s[0];int p,q;cout<<"输出所有的加速因子的迭代次数:"<<'\n';for(q=1;q<100;q++){// cout<<s[q]<<setw(6);// if(q%12==0)// cout<<'\n';if(min>s[q]){min=s[q];p=q;}}cout<<endl;if(min==s[0])p=0;cout<<"最佳加速因子a=";cout<<d[p]<<'\n';cout<<"迭代次数为:"<<min<<'\n';cout<<"最佳收敛因子对应的各个格内点的电位为:"<<'\n';for( i=1;i<10;i++){cout<<w[p][i]<<'\t';if(i%3==0)cout<<'\n';}cout<<'\n';}四、程序框图迭代解程序框图五、结果分析迭代收敛的速度与α的关系收敛因子(α)1.0 1.7 1.8 1.83 1.85 1.87 1.902.0 迭代次数(N )>1000269174143122133171发散最佳收敛因子的经验公式:)sin(p120πα+=(正方形场域、正方形网格)220q 1p 122+-=πα(矩形场域、正方形网格) 程序执行结果如下。
有限差分法实验报告(参考)

工程电磁场实验报告——有限差分法用超松弛迭代法求解 接地金属槽内电位的分布一、实验要求按对称场差分格式求解电位的分布 已知:给定边值:如图1-7示 图1-7接地金属槽内半场域的网格 给定初值)()(.1j 401001j p12j i -=--=ϕϕϕ 误范围差: 510-=ε计算:迭代次数N ,j i ,ϕ,将计算结果保存到文件中二、实验思想有限差分法有限差分法(Finite Differential Method )是基于差分原理的一种数值计算法。
其基本思想:将场域离散为许多小网格,应用差分原理,将求解连续函数ϕ的泊松方程的问题转换为求解网格节点上ϕ=ϕ V100 0=ϕ0=ϕ的差分方程组的问题。
泊松方程的五点差分格式)(414243210204321Fh Fh -+++=⇒=-+++ϕϕϕϕϕϕϕϕϕϕ当场域中,0=ρ得到拉普拉斯方程的五点差分格式)(41044321004321ϕϕϕϕϕϕϕϕϕϕ+++=⇒=-+++差分方程组的求解方法(1) 高斯——赛德尔迭代法][)(,)(,)(,)(,)(,2k 1j i k j 1i 1k 1j i 1k j 1i 1k j i Fh 41-+++=+++-+-+ϕϕϕϕϕ (1-14)式中:⋅⋅⋅⋅⋅⋅=⋅⋅⋅⋅⋅⋅=,2,1,0,2,1,k j i ,迭代顺序可按先行后列,或先列后行进行。
迭代过程遇到边界节点时,代入边界值或边界差分 格式,直到所有节点电位满足εϕϕ<-+)(,)(,k j i l k j i 为止。
(2)超松弛迭代法][)(,)(,)(,)(,)(,)(,)(,k j i 2k 1j i k j 1i 1k 1j i 1k j 1i k j i 1k j i 4Fh 4ϕϕϕϕϕαϕϕ--++++=+++-+-+ (1-15)式中:α——加速收敛因子)21(<<α 可见:迭代收敛的速度与α有明显关系三、程序源代码#include<> #include<> #include<> double A[5][5]; void main(void)图1-4 高斯——赛德尔迭代法{double BJ[5][5];//数组B用于比较电势int s[100];//用于储存迭代次数double d[100];//用于记录所有的加速因子d[0]=;int i,j,N=0,M=0,x;for(i=0;i<100;i++)d[i]=*i+d[0];//加速因子从到之间的20个数!double w[100][10];int P,Q;for(P=0;P<4;P++)for(Q=0;Q<5;Q++)A[P][Q]=0;for(P=0;P<5;P++)A[4][P]=100;cout<<"数组A的所有元素是:"<<endl;for(i=0;i<5;i++)for(j=0;j<5;j++){cout<<A[i][j]<<setw(6);if((5*i+j+1)%5==0)cout<<'\n';}int pp=0;for(x=0;x<100;x++){{for(i=0;i<5;i++)for(j=0;j<5;j++)BJ[i][j]=A[i][j];for(i=1;i<4;i++)for(j=1;j<4;j++)A[i][j]=BJ[i][j]+(d[x]/4)*(BJ[i+1][j]+BJ[i][j+1]+A[i-1][j]+A[i][j -1]-4*BJ[i][j]);//迭代公式for(i=1;i<4;i++){for(j=1;j<4;j++)if(fabs(A[i][j]-BJ[i][j])<1e-5)pp++;}N++;}while(pp<=9);pp=0;for(i=0;i<3;i++)w[M][i+1]=A[1][i+1];for(i=3;i<6;i++)w[M][i+1]=A[2][i-2];for(i=6;i<9;i++)w[M][i+1]=A[3][i-5];s[M]=N;M++;int P,Q;for(P=0;P<4;P++)for(Q=0;Q<5;Q++)A[P][Q]=0;for(P=0;P<5;P++)A[4][P]=100;}int min=s[0];int p,q;cout<<"输出所有的加速因子的迭代次数:"<<'\n'; for(q=1;q<100;q++){// cout<<s[q]<<setw(6);// if(q%12==0)// cout<<'\n';if(min>s[q]){min=s[q];p=q;}}cout<<endl;if(min==s[0])p=0;cout<<"最佳加速因子a=";cout<<d[p]<<'\n';cout<<"迭代次数为:"<<min<<'\n';cout<<"最佳收敛因子对应的各个格内点的电位为:"<<'\n';for( i=1;i<10;i++){cout<<w[p][i]<<'\t';if(i%3==0)cout<<'\n';}cout<<'\n';}四、程序框图迭代解程序框图五、结果分析迭代收敛的速度与α的关系最佳收敛因子的经验公式:)sin(p120πα+=(正方形场域、正方形网格)220q 1p 122+-=πα(矩形场域、正方形网格) 程序执行结果如下。
差分法求解偏微分方程MAAB

南京理工大学课程考核论文课程名称:高等数值分析论文题目:有限差分法求解偏微分方程姓名:罗晨学号:成绩:有限差分法求解偏微分方程一、主要内容1.有限差分法求解偏微分方程,偏微分方程如一般形式的一维抛物线型方程:具体求解的偏微分方程如下:2.推导五种差分格式、截断误差并分析其稳定性;3.编写MATLAB程序实现五种差分格式对偏微分方程的求解及误差分析;4.结论及完成本次实验报告的感想。
二、推导几种差分格式的过程:有限差分法(finite-differencemethods )是一种数值方法通过有限个微分方程近似求导从而寻求微分方程的近似解。
有限差分法的基本思想是把连续的定解区域用有限个离散点构成的网格来代替;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。
推导差分方程的过程中需要用到的泰勒展开公式如下:()2100000000()()()()()()()......()(())1!2!!n n n f x f x f x f x f x x x x x x x o x x n +'''=+-+-++-+-(2-1)求解区域的网格划分步长参数如下:11k k k kt t x x h τ++-=⎧⎨-=⎩(2-2) 2.1古典显格式2.1.1古典显格式的推导由泰勒展开公式将(,)u x t 对时间展开得2,(,)(,)()()(())i i k i k k k uu x t u x t t t o t t t∂=+-+-∂(2-3) 当1k t t +=时有21,112,(,)(,)()()(())(,)()()i k i k i k k k k k i k i k uu x t u x t t t o t t tuu x t o tττ+++∂=+-+-∂∂=+⋅+∂(2-4)得到对时间的一阶偏导数1,(,)(,)()=()i k i k i k u x t u x t uo t ττ+-∂+∂(2-5) 由泰勒展开公式将(,)u x t 对位置展开得223,,21(,)(,)()()()()(())2!k i k i k i i k i i u uu x t u x t x x x x o x x x x∂∂=+-+-+-∂∂(2-6)当11i i x x x x +-==和时,代入式(2-6)得2231,1,1122231,1,1121(,)(,)()()()()(())2!1(,)(,)()()()()(())2!i k i k i k i i i k i i i i i k i k i k i i i k i i i iu u u x t u x t x x x x o x x x xu u u x t u x t x x x x o x x x x ++++----⎧∂∂=+-+-+-⎪⎪∂∂⎨∂∂⎪=+-+-+-⎪∂∂⎩(2-7) 因为1k k x x h +-=,代入上式得2231,,22231,,21(,)(,)()()()2!1(,)(,)()()()2!i k i k i k i k i k i k i k i ku u u x t u x t h h o h x xu u u x t u x t h h o h x x +-⎧∂∂=+⋅+⋅+⎪⎪∂∂⎨∂∂⎪=-⋅+⋅+⎪∂∂⎩(2-8) 得到对位置的二阶偏导数2211,22(,)2(,)(,)()()i k i k i k i k u x t u x t u x t uo h x h+--+∂=+∂(2-9) 将式(2-5)、(2-9)代入一般形式的抛物线型偏微分方程得(2-10)为了方便我们可以将式(2-10)写成11122k kk k k k i i i i i i u u u u u f h ατ++-⎡⎤--+-=⎢⎥⎣⎦(2-11) ()11122k k k k k k i i i i i i u u uu u f hτατ++----+=(2-12)最后得到古典显格式的差分格式为()111(12)k k k k k i i i i i u ra u r u u f ατ++-=-+++(2-13)2r hτ=其中,古典显格式的差分格式的截断误差是2()o h τ+。
差分方法实验报告

实验报告课程名称:计算方法院系:数学科学系专业班级:数应1001学号:1031110139学生姓名:姚海保指导教师:沈林开课时间:2012至2013学年第一学期一、学生撰写要求按照实验课程培养方案的要求,每门实验课程中的每一个实验项目完成后,每位参加实验的学生均须在实验教师规定的时间内独立完成一份实验报告,不得抄袭,不得缺交。
学生撰写实验报告时应严格按照本实验报告规定的内容和要求填写。
字迹工整,文字简练,数据齐全,图表规范,计算正确,分析充分、具体、定量。
二、教师评阅与装订要求1.实验报告批改要深入细致,批改过程中要发现和纠正学生实验报告中的问题,给出评语和实验报告成绩,签名并注明批改日期。
实验报告批改完成后,应采用适当的形式将学生实验报告中存在的问题及时反馈给学生。
2.实验报告成绩用百分制评定,并给出成绩评定的依据或评分标准(附于实验报告成绩登记表后)。
对迟交实验报告的学生要酌情扣分,对缺交和抄袭实验报告的学生应及时批评教育,并对该次实验报告的分数以零分处理。
对单独设课的实验课程,如学生抄袭或缺交实验报告达该课程全学期实验报告总次数三分之一以上,不得同意其参加本课程的考核。
3.各实验项目的实验报告成绩登记在实验报告成绩登记表中。
本学期实验项目全部完成后,给定实验报告综合成绩。
4.实验报告综合成绩应按课程教学大纲规定比例(一般为10-15%)计入实验课总评成绩;实验总评成绩原则上应包括考勤、实验报告、考核(操作、理论)等多方面成绩;5.实验教师每学期负责对拟存档的学生实验报告按课程、学生收齐并装订,按如下顺序装订成册:实验报告封面、实验报告成绩登记表、实验报告成绩评定依据、实验报告(按教学进度表规定的实验项目顺序排序)。
装订时统一靠左侧按“两钉三等分”原则装订。
024********-1-0.8-0.6-0.4-0.20.20.40.60.813、画出2222)sin(yxyxz++=所表示的三维曲面。
有限差分法

有限差分法——傅立叶稳定性分析分析差分格式稳定性的方法很多,大部份应用于线性方程,这里只介绍其中最常用的一种:傅立叶稳定性分析法。
傅立叶稳定分析法由V on Neumann 于20世纪40年代提出,所以又称为V on Neumann 稳定性分析法。
该方法的基本思想是,将解的误差作周期延拓并用傅立叶级数表示出来,然后考察每一个傅立叶级数分量的增大和衰减情况。
如果每一分量的强度(或振幅)是随时间的推移而增大的,则所讨论的差分格式是不稳定的;反之,若每一分量的振幅是随时间的推移而衰减或保持不变,则格式是稳定的。
为了进行这种分析,可以把某一分量的表达式代入到误差传播方程中,得出相邻二时间层间该分量的振幅比,通常称为放大因子。
稳定性的条件要求放大因子的绝对值(或模)小于或等于1。
当放大因子等于1时,称为中性稳定,在这种情况下任何时刻引进的误差都不会衰减或放大。
【例11.1E 】讨论逼近以下一维对流方程的FTCS 格式的稳定性:0=∂∂+∂∂xu t u α α> 0 (11.1.51)该方程的FTCS 格式为 02111=∆-+∆--++xu u t u u n i n i n i n i α (11.1.52) 将式(11.1.52)改写成易于递推计算的差分格式,有()n i n i n i n i u u u u 1112-++--=λα式中,)/(x t ∆∆λ=为网格比。
相应于上式的误差传播方程为()n i n i n i n i 1112-++--=εελαεε (11.1.53) 式中,ε是各节点上的离散量。
如果对ε在正负方向上作周期延拓,即把ε看作是以某一定值为周期的周期函数,则n ε、1+n ε可以展开为以下的傅立叶级数:⎪⎪⎩⎪⎪⎨⎧==∑∑∞-∞=++∞-∞=k kx n k n k kx n k n e C x e C x I 11I )()(εε 于是⎪⎪⎩⎪⎪⎨⎧====∑∑∞-∞=+++∞-∞=k kx n k i n n i k kx n k i n n i i i e C x e C x I 111I )()(εεεε (11.1.54) ⎪⎪⎩⎪⎪⎨⎧=±==±=∑∑∞-∞=±+++±∞-∞=±±k x x k n k i n n i k x x k n k i n n i i i e C x x e C x x )(I 1111)(I 1)()(∆∆∆εε∆εε (11.1.55) 其中,1I -=。
有限差分法

有限差分法一、单变量函数:用中心差分法(matlab程序见附录)计算结果如下:图1 中心差分法表1 数据对比二、一维热传导:在此取φ(x)=0,g1(t)= g2(t)=100-100*exp(-t)问题描述:已知厚度为l的无限大平板,初温0度,初始瞬间将其放于温度为100度的流体中,流体与板面间的表面传热系数为一常数。
试确定在非稳态过程中板内的温度分布。
(1)显式差分法:图3 显式差分法(2)隐式差分法:图4 隐式差分法小结:显式格式仅当时格式是稳定的。
(其中称为网格比)隐式格式从k层求k+1层时,需要求解一个阶方程组。
而且隐式格式的稳定性对网格比没有要求,即为绝对稳定的。
三、Possion方程:取f=1,R=1图5差分法图6 误差小结:观察误差曲面,其绝对误差数量级为附Matlab程序:第1题:%===========================Boundary Value Problem 1clear;clc;A=[-2.01 1 0 0 0 0 0 0 0;1 -2.01 1 0 0 0 0 0 0;0 1 -2.01 1 0 0 0 0 0;0 0 1 -2.01 1 0 0 0 0;0 0 0 1 -2.01 1 0 0 0;0 0 0 0 1 -2.01 1 0 0;0 0 0 0 0 1 -2.01 1 0;0 0 0 0 0 0 1 -2.01 1;0 0 0 0 0 0 0 1 -2.01;];c1=[0.1;0.2;0.3;0.4;0.5;0.6;0.7;0.8;0.9];C=0.01*c1-1*[0;0;0;0;0;0;0;0;1];y=A\C;x=0:0.1:1;yn=[0;y;1];ye=2*(exp(x)-exp(-x))/(exp(1)-exp(-1))-x;figure(1);plot(x,yn,'*',x,ye);legend('numerical solution','exact solution')xlabel('x','fontsize',20);ylabel('y','fontsize',20);set(gca,'fontsize',18);figure(2);err=abs(ye'-yn);plot(x,err);legend('error')xlabel('x','fontsize',20);ylabel('y','fontsize',20);set(gca,'fontsize',18);第2题:%========================Boundary Value Problem 1_Explicit %显式clear;clcl=20;%板厚h=1;%步长J=l/h;T=50;%时间tao=2.5;%步长N=T/tao;%下面组合A矩阵a=0.2;lamda=tao/(h^2);zhu=1-2*a*lamda;ce=a*lamda;a00=ones(1,J-1);a0=diag(a00);A0=zhu*a0;a01=ones(1,J-2);a1=diag(a01,1);A1=ce*a1;a2=diag(a01,-1);A2=ce*a2;A=A0+A1+A2;u(:,1)=0; %板的初始温度for i=2:N+1u(1,i)=100-100*exp(-(i-1)*tao); %边界条件u(J+1,i)=100-100*exp(-(i-1)*tao); %边界条件end% g01=u(:,1);% g02=u(:,J);for k=1:N% g01=ce*g1(1,k);% g02=ce*g2(1,k);oo=zeros(J-3,1);g(:,k)=[ce*u(1,k);oo;ce*u(J+1,k)];u(2:end-1,k+1)=A*u(2:end-1,k)+g(:,k);endt=0:h:l;x=0:tao:T;mesh(x,t,u)xlabel('t','fontsize',20);ylabel('x','fontsize',20);zlabel('T','fontsize',20);set(gca,'fontsize',18);%========================Boundary Value Problem 1_2Implicit %隐式clear;clcl=20;%板厚h=1;%步长J=l/h;T=50;%时间tao=2.5;%步长N=T/tao;%下面组合A矩阵a=0.2;lamda=tao/(h^2);zhu=1+2*a*lamda;ce=-a*lamda;a00=ones(1,J-1);a0=diag(a00);A0=zhu*a0;a01=ones(1,J-2);a1=diag(a01,1);A1=ce*a1;a2=diag(a01,-1);A2=ce*a2;A=A0+A1+A2;u(:,1)=0; %板的初始温度for i=2:N+1u(1,i)=100-100*exp(-(i-1)*tao); %边界条件u(J+1,i)=100-100*exp(-(i-1)*tao); %边界条件end% g01=u(:,1);% g02=u(:,J);for k=1:N% g01=ce*g1(1,k);% g02=ce*g2(1,k);oo=zeros(J-3,1);g(:,k)=[ce*u(1,k);oo;ce*u(J+1,k)];u(2:end-1,k+1)=inv(A)*u(2:end-1,k)-inv(A)*g(:,k);endt=0:h:l;x=0:tao:T;mesh(x,t,u)xlabel('t','fontsize',20);ylabel('x','fontsize',20);zlabel('T','fontsize',20);set(gca,'fontsize',18);第3题:%=============================used by centered difference clear;function pdemodel[pde_fig,ax]=pdeinit;pdetool('appl_cb',1);set(ax,'DataAspectRatio',[1 1 1]);set(ax,'PlotBoxAspectRatio',[1.5 1 1]);set(ax,'XLim',[-1.5 1.5]);set(ax,'YLim',[-1 1]);set(ax,'XTickMode','auto');set(ax,'YTickMode','auto');% Geometry description:pdecirc(0,0,1,'C1');set(findobj(get(pde_fig,'Children'),'Tag','PDEEval'),'String','C1')% Boundary conditions:pdetool('changemode',0)pdesetbd(4,...'dir',...1,...'1',...'0')pdesetbd(3,...'dir',...1,...'1',...'0')pdesetbd(2,...'dir',...1,...'1',...'0')pdesetbd(1,...'dir',...1,...'1',...'0')% Mesh generation:setappdata(pde_fig,'Hgrad',1.3);setappdata(pde_fig,'refinemethod','regular');pdetool('initmesh')pdetool('refine')% PDE coefficients:pdeseteq(1,...'1.0',...'0.0',...'1',...'1.0',...'0:10',...'0.0',...'0.0',...'[0 100]')setappdata(pde_fig,'currparam',...['1.0';...'0.0';...'1 ';...'1.0'])% Solve parameters:setappdata(pde_fig,'solveparam',...str2mat('0','1524','10','pdeadworst',...'0.5','longest','0','1E-4','','fixed','Inf'))% Plotflags and user data strings:setappdata(pde_fig,'plotflags',[1 1 1 1 1 1 1 1 0 0 0 1 0 0 1 0 0 1]); setappdata(pde_fig,'colstring','');setappdata(pde_fig,'arrowstring','');setappdata(pde_fig,'deformstring','');setappdata(pde_fig,'heightstring','');% Solve PDE:pdetool('solve')。
电磁场与电磁波实验有限差分法

电磁场与电磁波实验报告实验项目:有限差分法一、实验目的及要求1、学习有限差分法的原理与计算步骤;2、学习用有限差分法解静电场中简单的二维静电场边值问题;3、学习用Matlab语言描述电磁场与电磁波中内容,用matlab求解问题并用图形表示出了,学习matlab语言在电磁波与电磁场中的编程思路。
二、实验内容理论学习:学习静电场中边值问题的数值法中的优先差分法的求解知识;实践学习:学习用matlab语言编写有限差分法计算二维静电场边值问题;三、实验仪器或软件Matlab7.0电脑四、实验原理有限差分法的基本思想将计算场域划分成网格,把求解场域内连续的场分布用求解网格节点上的离散数值解来代替;即用网格节点的差分方程近似代替场域内的偏微分方程来求解。
简单迭代法先对场域内的节点赋予初始值)(0,j i Φ ,这里上标(0)表示第0次近似值,即初始值。
然后再按照: ][41k 1,k ,1k 1,k ,11k ,)()()()()(++--+Φ+Φ+Φ+Φ=Φj i j i j i j i j i进行反复迭代。
若当第N 次迭代结束后,所有内节点相邻两次迭代值之间的绝对误差小于事先给定的精度,则迭代停止。
W MAX N ji N j i 〈Φ-Φ-)()(1,, 注意:初始值的赋予是任意的;赋予初始值后,请按“从左到右、从下到上”的固定顺序依次计算各节点值; 当所有节点都算完一遍后,再用它们的新值代替旧值,即完成一次迭代。
五、实验步骤复习理论知识;编写matlab 程序;六、结果分析与问题讨论1、程序:clearX=[0,0,0,0,0;0,25,25,25,0;0,50,50,50,0;0,75,75,75,0;100,100,100,100,100]Pot=[0,0];for i=2:4for j=2:4PotX(i-1,j-1)=(X(i-1,j)+X(i,j-1)+X(i+1,j)+X(i,j+1))/4 Pot(1)=abs(PotX(i-1,j-1)-X(i,j));Pot(2)=max(Pot)endendX(2:4,2:4)=PotXnum=1;while(max(1000.*Pot)>1)Pot(2)=0; (,1,2,......) (0,1,2,......)i j k ==for i=2:4for j=2:4PotX(i-1,j-1)=(X(i-1,j)+X(i,j-1)+X(i+1,j)+X(i,j+1))/4 Pot(1)=abs(PotX(i-1,j-1)-X(i,j));Pot(2)=max(Pot)endendX(2:4,2:4)=PotXnum=num+1endsurf([0:4],[0:4],X);shading interpcolorbar('horiz')title('有限差分法计算电位图');2、运行结果X =0 0 0 0 00 25 25 25 00 50 50 50 00 75 75 75 0100 100 100 100 100%%第一次迭代PotX =18.7500Pot =6.2500 6.2500PotX =7.1440 9.8230 7.144018.7515 25.0023 18.751542.8583 52.6801 42.8583Pot =1.0e-003 *0.3815 0.7629%%第28次迭代X =0 0 0 0 00 7.1440 9.8230 7.1440 00 18.7515 25.0023 18.7515 00 42.8583 52.6801 42.8583 0100.0000 100.0000 100.0000 100.0000 100.0000num =283、波形图matlab软件在使用有限差分法研究静电场边值问题中有着重要的作用,它能够快捷有效并且准确的解决边值问题,是解决计算相对复杂问题的有效工具。
有限差分法

有限差分法是基于差分原理的一种数值计算 法。其基本思想想是将场域离散成很多许多 小的网格,应用差分原理,将求解连续函数 的柏松方程问题转换为求解网格节点上的差 分方程组问题。
1.1 二维柏松方程的差分格式
y
b
U0
o
a
x
导体槽中静电场的边值问题的拉普拉斯方程为
1.3 超松弛迭代法
k 1 k
i, j i, j
1 k 1 k k k (ik 4 ) 1, j i , j 1 i 1, j i , j 1 i, j
4
式中(1<α<2)为加速收敛的因子,影响 着迭1 2 2 1 3 3 2 0 h( )0 h ( 2 )0 h ( 3 )0 . y 2! y 3! y
2 3 1 1 2 3 4 0 h( )0 (h) ( 2 )0 (h) ( 3 )0 . y 2! y 3! y
4
如何实现?
将网格分成M*N列,边界点正好都是网格的节点,对所有 的节点进行编号,并记录节点的坐标位置,并用一个二维数 组进行表示u[M][N]
k 1
i, j
1 k 1 k k ik 1, j i , j 1 i 1, j
i , j 1
如何实现?
4
4项相加,且忽略高次项
2 2 1 2 3 4 40 (h) ( 2 )0 ( 2 )0 40 y x
2
得到
0
1 2 3 4
4
1.2 高斯—赛德尔迭代法
i , j
k 1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
工程电磁场
实验报告
——有限差分法
用超松弛迭代法求解 接地金属槽内电位的分布
一、实验要求
按对称场差分格式求解电位的分布
已知:
给定边值:如图1-7示 图1-7接地金属槽内半场域的网格 给定初值)()(.1j 40
100
1j p
1
2j i -=
--=
ϕϕϕ 误范围差: 510-=ε
计算:迭代次数N ,j i ,ϕ,将计算结果保存到文件中
二、实验思想
有限差分法
有限差分法(Finite Differential Method )是基于差分原理的一种数值计算法。
其基本思想:将场域离散为许多小网格,应用差分原理,将求解连续函数ϕ的泊松方程的问题转换为求解网格节点上ϕ
=ϕ= V
100 ϕ 0
=ϕ0
=ϕ
的差分方程组的问题。
泊松方程的五点差分格式
)(4
1
4243210204321Fh Fh -+++=⇒=-+++ϕϕϕϕϕϕϕϕϕϕ
当场域中,0=ρ得到拉普拉斯方程的五点差分格式
)(4
1
044321004321ϕϕϕϕϕϕϕϕϕϕ+++=⇒=-+++
差分方程组的求解方法(1) 高斯——赛德尔迭代法
][)(,)(,)(,)(,)(,2
k 1j i k j 1i 1k 1j i 1k j 1i 1k j i Fh 4
1
-+++=+++-+-+ϕϕϕϕϕ (1-14)
式中:⋅⋅⋅⋅⋅⋅=⋅⋅⋅⋅⋅⋅=,2,1,0,2,1,k j i ,
• 迭代顺序可按先行后列,或先列后行进行。
• 迭代过程遇到边界节点时,代入边界值或边界差分 格式,直到所有节点电位满足εϕϕ<-+)(,)(,k j i l k j i 为止。
(2)超松弛迭代法
][)
(,)(,)(,)(,)(,)(,)(,k j i 2k 1j i k j 1i 1k 1j i 1k j 1i k j i 1k j i 4Fh 4
ϕϕϕϕϕαϕϕ--++++=+++-+-+ (1-15)
式中:α——加速收敛因子)21(<<α 可见:迭代收敛的速度与α有明显关系
三、程序源代码
#include<iostream.h> #include<math.h> #include<iomanip.h> double A[5][5]; void main(void) {
double BJ[5][5];//数组B 用于比较电势 int s[100];//用于储存迭代次数
图1-4 高斯——赛德尔迭代法
double d[100];//用于记录所有的加速因子
d[0]=1.0;
int i,j,N=0,M=0,x;
for(i=0;i<100;i++)
d[i]=0.01*i+d[0];//加速因子从1.0到2.0之间的20个数!
double w[100][10];
int P,Q;
for(P=0;P<4;P++)
for(Q=0;Q<5;Q++)
A[P][Q]=0;
for(P=0;P<5;P++)
A[4][P]=100;
cout<<"数组A的所有元素是:"<<endl;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
cout<<A[i][j]<<setw(6);
if((5*i+j+1)%5==0)
cout<<'\n';
}
int pp=0;
for(x=0;x<100;x++)
{
do
{
for(i=0;i<5;i++)
for(j=0;j<5;j++)
BJ[i][j]=A[i][j];
for(i=1;i<4;i++)
for(j=1;j<4;j++)
A[i][j]=BJ[i][j]+(d[x]/4)*(BJ[i+1][j]+BJ[i][j+1]+A[i-1][j]+A[i][j -1]-4*BJ[i][j]);//迭代公式
for(i=1;i<4;i++)
{
for(j=1;j<4;j++)
if(fabs(A[i][j]-BJ[i][j])<1e-5)
pp++;
}
N++;
}while(pp<=9);
pp=0;
for(i=0;i<3;i++)
w[M][i+1]=A[1][i+1];
for(i=3;i<6;i++)
w[M][i+1]=A[2][i-2];
for(i=6;i<9;i++)
w[M][i+1]=A[3][i-5];
s[M]=N;
M++;
N=0;
int P,Q;
for(P=0;P<4;P++)
for(Q=0;Q<5;Q++)
A[P][Q]=0;
for(P=0;P<5;P++)
A[4][P]=100;
}
int min=s[0];
int p,q;
cout<<"输出所有的加速因子的迭代次数:"<<'\n'; for(q=1;q<100;q++)
{
// cout<<s[q]<<setw(6);
// if(q%12==0)
// cout<<'\n';
if(min>s[q])
{
min=s[q];
p=q;
}
}
cout<<endl;
if(min==s[0])
p=0;
cout<<"最佳加速因子a=";
cout<<d[p]<<'\n';
cout<<"迭代次数为:"<<min<<'\n';
cout<<"最佳收敛因子对应的各个格内点的电位为:"<<'\n';
for( i=1;i<10;i++)
{
cout<<w[p][i]<<'\t';
if(i%3==0)
cout<<'\n';
}
cout<<'\n';
}
四、程序框图
迭代解程序框图
五、结果分析
最佳收敛因子的经验公式:
)
sin(p
120π
α+=
(正方形场域、正方形网格)
2
20q
1
p 12
2+-=πα(矩形场域、正方形网格) 程序执行结果如下。