实验一 用超松弛迭代法求解接地金属槽内电位分布
有限差分法实验报告(参考)
工程电磁场实验报告——有限差分法用超松弛迭代法求解 接地金属槽内电位的分布一、实验要求按对称场差分格式求解电位的分布 已知:给定边值:如图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+-=πα(矩形场域、正方形网格) 程序执行结果如下。
电磁场与电磁波实验报告
电磁场与电磁波实验报告09024126 张亦驰一.实验目的使用简单迭代法与超松弛迭代法求解电磁场金属槽边值问题二.实验步骤1.简单迭代法:源程序:#include<xxgc.h>main(){int i;double a[50][3][3];a[0][0][0]=a[0][1][0]=a[0][2][0]=25;a[0][0][1]=a[0][1][1]=a[0][2][1]=50;a[0][0][2]=a[0][1][2]=a[0][2][2]=75;for(i=0;i<50;i++){printf("a[%d][0][0]=%.3f,a[%d][1][0]=%.3f,a[%d][2][0]=%.3f\n",i,a[i][0][0],i,a[i][1][0],i,a[i ][2][0]);printf("a[%d][0][1]=%.3f,a[%d][1][1]=%.3f,a[%d][2][1]=%.3f\n",i,a[i][0][1],i,a[i][1][1],i,a[i ][2][1]);printf("a[%d][0][2]=%.3f,a[%d][1][2]=%.3f,a[%d][2][2]=%.3f\n\n",i,a[i][0][2],i,a[i][1][2],i,a[i][2][2]);getch();a[i+1][0][0]=0.25*(0+0+a[i][1][0]+a[i][0][1]);a[i+1][0][1]=0.25*(0+a[i][0][0]+a[i][1][1]+a[i][0][2]);a[i+1][0][2]=0.25*(0+a[i][0][1]+a[i][1][2]+100);a[i+1][1][0]=0.25*(a[i][0][0]+0+a[i][2][0]+a[i][1][1]);a[i+1][1][1]=0.25*(a[i][0][1]+a[i][1][0]+a[i][2][1]+a[i][1][2]);a[i+1][1][2]=0.25*(a[i][0][2]+a[i][1][1]+a[i][2][2]+100);a[i+1][2][0]=0.25*(a[i][1][0]+0+0+a[i][2][1]);a[i+1][2][1]=0.25*(a[i][1][1]+a[i][2][0]+0+a[i][2][2]);a[i+1][2][2]=0.25*(a[i][1][2]+a[i][2][1]+0+100);}getch();}实验结果如图2.超松弛迭代法源程序:#include<stdio.h>#include<math.h> #include<iostream> using namespace std;#define pi 3.1415926void Boundary_conditions_initialize(float Boundary_areas[5][5]) {for(int j=0;j<5;j++){ Boundary_areas[0][j]=0;Boundary_areas[4][j]=100; }for(int i=0;i<5;i++){Boundary_areas[i][0]=0;Boundary_areas[i][4]=0;j =100 Vj =0j =0}}void nodes_Field_region_Initialization(float Field_region[5][5]) {for(int i=1;i<4;i++){ for(int j=1;j<4;j++){Field_region[i][j]=0; }}}void Output_nodes_value (float all_nodes[5][5],int count){if(count==0){cout<<"场内各点的初始值为:"<<'\n' ;}else{cout<<"迭代次数N="<< count<<'\n'<<"迭代最终结果为:" <<'\n'; }for(int i=4;i>=0;i--){ for(int j=0;j<5;j++){cout<<all_nodes[i][j]<<'\t'<<'\t';}cout<<'\n';}}void main(void){int a=4 ;int h=a/4;float areas[5][5] ;int N=0 ;const float e=0.00001;float Maxerror ;float a0=2/(1+sin(pi/4));Boundary_conditions_initialize(areas);nodes_Field_region_Initialization(areas);Output_nodes_value (areas,N) ;cout<<"加速因子a="<<a0<<'\n';do{ N=N+1 ;for(int i=1;i<4;i++){ for(int j=1;j<4;j++){ float areasK=areas[i][j];areas[i][j]=areas[i][j]+(a0/4)*(areas[i-1][j]+areas[i][j-1]+areas[i+1 ][j]+areas[i][j+1]-4*areas[i][j]);float error=fabs(areas[i][j]-areasK);if(i==1&&j==1){Maxerror=error; }else{if (Maxerror<error) Maxerror=error ;}}}} while(Maxerror>e) ;Output_nodes_value(areas,N);}。
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。
工程电磁场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)实验思路:类似与第一题的思路,但只计算一半的区域,对另一半进行对称性计算,减小计算量。
电磁场仿真实验-用超松弛法求二维静电场域的电位分布
姓名:梁鸿宇学号:19 班级:10通信实验目的:通过用MATLAB等软件编程计算电磁场问题,掌握有限差分法的基本思想,掌握电磁场数值计算的基本思想和方法,掌握MATLAB等软件编程技巧,学会用MATLAB等软件应用于有限差分法的数值解。
实验内容:用MATLAB等软件编程计算电磁场问题,给出有关波形和图表。
分析数值解和解析解的优缺点。
题目如下:实验程序与结果分析:程序(MATLAB)%电位函数为φ(x,y) ,边界条件φ(x,y)=0(x=0);φ(x,y)=50(y=0);% φ(x,y)=100(x=a);φ(x,y)=100(y=a);hx=11;hy=11; %设置网格节点数v1=ones(hy,hx); %设置行列二维数组m=10;n=10; %横纵向网格数%上下两行的Dirichlet条件边界值:v1(1,:)=ones(1,hx)*50;v1(hy,:)=ones(1,hx)*100;%左右两列的Dirichlet条件边界值:for i=1:hyv1(i,1)=0;v1(i,hx)=100;end%计算松弛因子t1=(cos(pi/m)+cos(pi/n))/2;w=2/(1+sqrt(1-t1^2));v2=v1;maxt=1;t=0; %初始化k=0while(maxt>1e-6) %由V1迭代V2.迭代精度为k=k+1 %计算迭代次数maxt=0;for i=2:hy-1 %从2到hy-1行循环for j=2:hx-1 %从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))*w/4;% 拉普拉斯方程差分式t=abs(v2(i,j)-v1(i,j));if(t>maxt) maxt=t;endendendv1=v2endcontour(v2,20) %画等电位线图hold onx=1:1:hx;y=1:1:hy[xx,yy]=meshgrid(x,y); %形成栅格[Ex,Ey]=gradient(v2,,; %计算梯度AE=sqrt(Ex.^2+Ey.^2);Ex=Ex./AE;Ey=Ey./AE; % 场强归一化,使箭头等长quiver(xx,yy,Ex,Ey, %根据梯度数据画箭头axis([,hx+,-2,13]) %设置坐标边框plot([1,1,hx,hx,1],[1,hy,hy,1,1],'k') %画导体边框text(hx/,hy+,'100V','fontsize',11); %上标注text(hx/2,,'50V','fontsize',11); %下标注text,hy/2,'0V','fontsize',11); %左标注text(hx+,hy/2,'100V','fontsize',11); %右标注hold offhx=11;hy=11;输出图形(MATLAB)总结和体会:这次仿真实验,是自己学习NATLAB的基本操作的,在了解这个全英版的软件之前,觉得很茫然。
电磁场数值计算上机题报告
电磁场数值计算上机题报告第一题计算长直接地金属槽中的电场分布。
金属槽横截面如图1所示,其侧壁与底面电位均为零,顶盖电位相对值为10。
槽内电位函数满足拉普拉斯方程。
计算槽内电位分布。
要求:(1)先用正方形网格粗分,每边取4个网格计算,取不同的松弛因子,比较其收敛速度。
取计算精度为千分之一。
(2)划分网格加倍,计算电位分布,并与上面计算结果比较。
(一)建立问题的数学物理模型首先列出方程及其边界条件 槽内的电位满足二维的拉普拉斯方程:222220x y ϕϕϕ∂∂∇=+=∂∂其中,x y 的范围是:0,0x a y a <<<<边界条件是:0000;10x x ay y aϕϕϕϕ========图1 (二)算法设计及其实现在本题中,因为区域为正方形区域,网格采用正方形网格,每边四个网格,因此,每边要有5个结点, 网格数m=n=4,比较少,不能用课本中的公式计算收敛因子,取收敛因子为 1.4α=,计算的程序的流程为:①选取计算的场域,并划分网格,网格划分如右图2所示:右图表示网格的划分,共16个网格,一共划分了25个结点,每个节点用相应的下标(i,j )来表示,对应的电位为(,)u i j 。
根据题意,边界条件的 处理如下: 图 2(1,)(,1)(,1)0(,)10(21)u j u i u n u k j k n ===⎧⎨=≤≤-⎩其中n 为一行对应的节点数,根据题意,这里n=5② 用(,)u i j 表示节点的电位,设经过第n 次迭代之后的结点电位用(),n i j u 来表示,则超松弛迭代法的差分格式(记,(,)i j u u i j =)为:(1)()()()(1)(1)(),,1,,11,,1,(4)4n n n n n n n i j i j i j i j i j i j i j u u u u u u u α+++++--=++++- 边界条件前面已经给出 ③给各个节点赋初值,对于非边界上的点(对于边界点的值前面已经赋过初值),如下10(,)(1)1u i j j n =--④迭代计算,直到已经满足精度条件为止,这里精度为0.0001,最后输出计算的结果,输出结果见生成的数据文件shuju.txt 中 ⑤计算框图如图3所示图 3 计算框图⑥用fortran90语言编写计算机程序,计算各点的电位,程序清单如下:(三)计算结果及数据分析当网格数目为4(节点数目为5),加速收敛因子为1.4,计算精度为0.0001时,计算出各结点电位如下所示(对不同的收敛因子的比较后面进行)不可能完全对称,只能是近似对称的),这点不难从理论上进行分析得到。
超松弛迭代法求解接地金属槽内电位分布
实验一用超松弛迭代法求解接地金属槽内电位分布一、实验内容:试用超松弛迭代法求解接地金属槽内电位的分布。
已知:,mm?410h?a/4a?cm给定边值如图所示。
给定初值:)0(?0?ji,误差范围:5??10?计算迭代次数,分布。
?ji,一.实验思路由边界条件用泊松方程的五点差分格式求得中央点的点位。
再以所得点及边界再次利用泊松方程的五点差分格式求出另四个点,依照此方法求出其余点的电位分布。
用最佳收敛因子的经验公式计算收敛因子。
利用超松弛迭代法进行差分方程的求解,当遇到边界是采用边界值或者边界差分格式。
直到所有节点电位满足误差条件。
二.实验设计原理:有限差分法有限差分法(Finite Differential Method)是基于差分原理的一种数值计算法。
其基本思想:将场域离散为许多小网格,应用差分原理,将求解连续函数?的泊松方程的问题换为求解网格节点上?的差分方程组的问题。
编程时将边值编入到程序中,这样可以省略输入,从而直接输入迭代因子进行求解,可以减少编程的难度。
迭代时所用公式是和书上一样,为a[i][j]=b[i][j]+w/4*(b[i+1][j]+b[i][j+1]+a[i][j-1]+ a[i-1][j]-4*b[i][j]);。
k代表b,而k+1代表a其中启动输出开始菜单(边值都已经给定)输入迭代因w迭代次n=0n++开始循环迭函数判断相邻二次差值是否小于给定输n电a[i][j]终止.三、程序运行界面及结果四.源程序代码#include<iostream>#include<math.h>#include<iomanip>using namespace std;classoverrei //over-relaxation iterative method{private:intm,n;doublex,e;double **p,**q;public:int k;overrei(int m0,int n0,double e0){inti;e=e0;k=0;m=m0;n=n0;p=new double *[m];for(i=0;i<m;i++)p[i]=new double[n];q=new double *[m];//迭代因子求解for(i=0;i<m;i++)q[i]=new double[n];if(m==n)/(m-1))); x=2/(1+sin(3.141592654 elsex=2-3.141592654*sqrt(2)*sqrt(1/((m-1)*(m-1))+1/((n-1)*(n-1))); :<<x<<endl;潣瑵?最佳收敛因子}void Initialization(); //赋边界条件void Cal(); //计算void Diedai(); //迭代函数void Show(); //输出部分};void overrei::Initialization() //赋边界条件{inti,j;for(i=0;i<m;i++) //边界条件for(j=0;j<n;j++){if(i==0){p[i][j]=100;q[i][j]=100;}else{p[i][j]=0;q[i][j]=0;}}潣瑵?初始点位:<<endl;Show();}void overrei::Cal() //计算{inti,j;int c=1;while(1){c=1;for(i=0;i<m;i++){for(j=0;j<n;j++){if((p[i][j]-q[i][j])>e||(q[i][j]-p[i][j])>e) //相邻两次迭代误差是否小于1e-5 {c=0;break;}}if(c==0) break;}if(c==1 && k!=0) break;Diedai();}}void overrei::Diedai() //迭代函数{inti,j;double y=x/4;if(k%2){for(i=1;i<m-1;i++)for(j=1;j<n-1;j++){q[i][j]=p[i][j]+y*(q[i-1][j]+q[i][j-1]+p[i+1][j]+p[i][j+1]-4*p[i][j]);}}else{for(i=1;i<m-1;i++)for(j=1;j<n-1;j++){p[i][j]=q[i][j]+y*(p[i-1][j]+p[i][j-1]+q[i+1][j]+q[i][j+1]-4*q[i][j]);}}k++;}void overrei::Show() //输出部分{inti,j;for(i=0;i<m;i++){for(j=0;j<n;j++){cout<<setw(12)<<setprecision(6)<<fixed<<q[i][j]<<ends;}cout<<endl;}}int main(){cout<< **************************************<<endl; cout<< 超松弛迭代法求解接地金属槽内电位的分布<<endl; cout<< **************************************<<endl; overrei A(5,5,1e-5);A.Initialization();A.Cal();潣瑵?电位分布:<<endl;A.Show();潣瑵?迭代次数:<<A.k<<endl;return 0;}实验二按对称场差分格式求解电位的分布一.实验思路只计算一半的区域,对另一半进行对称性计算,减小计算量。
利用超松弛迭代法求解问题
利用超松弛迭代法求解问题在电场中,利用有限差分法求解场域中各个节点的点位。
其中求解差分方程组的解运用到了超松弛方法。
超松弛方法是高斯—塞德尔迭代法的变形。
它在迭代过程中,为了加速收敛,再把所得结果依次带入进行计算的同时,还使用把每一次迭代的变化量加权后再代入的方法。
运用超松弛迭代法求解下述问题:试用超松弛迭代法求解接地金属槽内的电位的分布。
已知:A=4CM,H=A\4=10CM给定边值:如图示;给定初值:Φ=0误差范围:E=10^-5计算:迭代次数N=?,Φ的分布。
分析:(1)、节点按从下到上,从左到右的顺序排列。
(2)、按高斯—塞德尔迭代公式进行迭代。
(3)、选择加速因子Α,且A在1到2之间。
以下为该题程序段:#INCLUDE <IOSTREAM.H>#INCLUDE<MATH.H>#INCLUDE<IOMANIP.H>BOOL SUCCESS(DOUBLE A[5][5][2], DOUBLE B) 构建函数其中DOUBLE A 代表记录数据前后两次的值。
{INT I,J;FOR (I=1;I<5;I++)FOR (J=1;J<5;J++) 依次对定义数组赋值{IF ( FABS(A[I][J][1]-A[I][J][0]) > B ) 误差在题设范围内则返回值TRUERETURN TRUE;} 否则返回FALSE RETURN FALSE;}INT MAIN(){INT N,I,J;DOUBLE A[5][5][2];DOUBLE B;B=0.00005;DOUBLE S=1.21;WHILE (1){N=0;COUT<<"输入加速因子数值(1<= A < 2 ) "<<ENDL; 输入题设CIN>>S;FOR(I=0;I<5;I++)FOR(J=0;J<5;J++){A[I][J][0]=0;A[I][J][1]=0;}FOR (I=0;I<5;I++){A[I][4][0]=100;A[I][4][1]=100;}WHILE ( N==0 || SUCCESS(A,B)){FOR(I=1;I<4;I++)FOR(J=1;J<4;J++){A[I][J][0]=A[I][J][1];A[I][J][1]=A[I][J][1]+(A[I-1][J][1]+A[I+1][J][1]+A[I][J+1][1]+A[I][J-1][1] [I][J][1]*4)*S/4; 由高斯—塞德尔迭代公式写出相应公式。
南京理工大学工程电磁场实验报告
MATlAB 绘制等电位线视图如下:
三维图像:
100 80 60 40 20 0 4 3 2 1 1 3 2 4
8
二维图像:
4
3.5 3
2.5
2
1.5
1
0.5 0.5 1 1.5 2 2.5 3 3.5 4
五、实验总结:
通过本次实验,我们在很大程度上把书本上的知识应用于实践中去, 例如 VC++的应用, 是我们第一次把其应用到工程实验上去, 超越了以 往只限于基础原理的学习。另一方面,在画图方面对于 MATlAB 的应 用,让我们初步认识到这款软件功能的强大,也让我们意识到掌握这 门软件的重要性,其在可视化,仿真方面发挥了很大的作用,大大地 帮助我们更深刻地理解和把握工程电磁场这门课程的相关知识。
三、程序设计及其运行情况:
#include<stdio.h> #include<math.h> #include<windows.h> fun(float u[][41],float p) /*此函数即为差分求解的方 法过程*/ {long int i,j,flag=1,num=0;float t,e=p/4; /*定义变量,在此 p 为收敛 因子*/ while(flag) {flag=0; for(i=1;i<40;i++) {for(j=1;j<20;j++) { t=u[i][j]; u[i][j]=u[i][j]+e*(u[i][j-1]+u[i-1][j]+u[i][j+1]+u[i+1][j]4*u[i][j]); if(fabs(u[i][j]-t)>=1e-5) flag=1; /*该判断语句用于判断 u[i][j]前后两次计算之差绝对值是否符合实验误 差要求*/ }u[i][20]=u[i][19]; }num++; } return num; } int main(void) { long int i,j,num=0,min=100000;float q,p,t,eps=1,e=p/4,u[41][41]; for(i=0;i<41;i++) {u[0][i]=100;u[40][i]=0;} /*定义初值*/ for(i=1;i<40;i++) {u[i][0]=u[i][40]=0;} for(i=1;i<40;i++) for(j=1;j<21;j++) u[i][j]=2.5*(j-1); printf("左半边初始值如下:\n"); for(i=0;i<41;i++) {printf("\n"); for(j=0;j<21;j++) { printf("%-11.5f",u[i][j]);
项目训练二 求二维金属槽内的点位分布
班级:通信13-2 姓名:闫振宇学号:1306030222 指导教师:徐维老师成绩:电子与信息工程学院信息与通信工程系项目训练二 计算金属槽电位分布1. 实验目的和任务1) 利用有限差分法计算金属槽电位分布。
2) 学会并掌握利用MATLAB 软件计算求解电位分布问题。
3) 学会简单利用MATLAB 软件解决数学物理问题。
2. 实验容1) 利用MATLAB 编写一个计算机程序; 2) 以步距为40α的正方形网格离散化场域,然后应用有限差分法求电位ϕ的数值解;3) 求相邻两次迭代值得指定的最大允许误差小于105-的迭代收解。
4) 根据场分布的对称性,试以半场域为计算对象,并以步距40α将给半场域以正方形网格予以分割,然后应用有限差分法求电位ϕ的数值解;5) 分别取∂为n 个不同的值和最佳解∂o ,求电位ϕ的数值解,以此分析加速收敛因子的作用,从迭代收敛时的迭代次数和最终数值解这两方向总结自己的看法;6) 用计算机描绘等位线的分布;7) 取中心点)2,2(ba p 处的电位的精确值与数值解进行比较,说明误差围。
3. 实验原理有限差分法原理:有限差分法的基本思想是把连续的定解区域用有限个离散点构成的网格来代替, 这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似。
于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。
差分表达式:(有限差分方程)在x0y 平面把所求解的区域划分成若干的小正方形格子,每个格子的边长都为h ,假设某顶点的0上的电位是ϕ0,周围四个顶点的电位分别为ϕ1,ϕ2,ϕ3和ϕ4。
将这几点的电位用泰勒级数展开,化简,近似可得:)(414321ϕϕϕϕϕ+++=上式表明,任一点的电位等于它周围四个点电位的平均值。
图3-1 差分网格差分方程的数值解法:平面有多少个节点,就能得到多少个差分方程,当这些节点数目较大时,使用迭代法求解差分方程组比较方便。
有限差分法
班级:通信13-4 姓名:学号:指导教师:**成绩:电子与信息工程学院信息与通信工程系求解金属槽的电位分布1.实验原理利用有限差分法和matlab软件解决电位在金属槽中的分布。
有限差分法基本思想是把连续的定解区域用有限个离散点构成的网格来代替,这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解.然后再利用插值方法便可以从离散解得到定解问题在整个区域上的近似解.在采用数值计算方法求解偏微分方程时,若将每一处导数由有限差分近似公式替代,从而把求解偏微分方程的问题转换成求解代数方程的问题。
2.有限差分法方程的定解问题就是在满足某些定解条件下求微分方程的解。
在空间区域的边界上要满足的定解条件称为边值条件。
如果问题与时间有关,在初始时刻所要满足的定解条件,称为初值条件。
不含时间而只带边值条件的定解问题,称为边值问题。
与时间有关而只带初值条件的定解问题,称为初值问题。
同时带有两种定解条件的问题,称为初值边值混合问题。
定解问题往往不具有解析解,或者其解析解不易计算。
所以要采用可行的数值解法。
有限差分方法就是一种数值解法,它的基本思想是先把问题的定义域进行网格剖分,然后在网格点上,按适当的数值微分公式把定解问题中的微商换成差商,从而把原问题离散化为差分格式,进而求出数值解。
此外,还要研究差分格式的解的存在性和唯一性、解的求法、解法的数值稳定性、差分格式的解与原定解问题的真解的误差估计、差分格式的解当网格大小趋于零时是否趋于真解(即收敛性),等等。
有限差分方法具有简单、灵活以及通用性强等特点,容易在计算机上实现。
2.1有限差分法原理图1-1 有限差分法的网格划分导体槽中静电场的边值问题的拉普拉斯方程为:22220x y ϕϕ∂∂+=∂∂ (1-1) 为简单起见,将场域分成足够小的正方形网格,网格线之间的距离为h ,0h →。
用超松弛迭代法求解接地金属槽内电位分布
实验一用超松弛迭代法求解接地金属槽内电位分布一、实验原理(有限差分法介绍)有限差分法(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)。
【工程】南京理工大学工程电磁场实验报告
P(W)
1
0.9997
1.9605e-006
60
0.9993
7.0578e-003
360
0.9881
2.5408e-001
1k
0.9192
1.9605e+000
2k
0.7585
7.8420e+000
5k
0.4124
4.9012e+001
10k
0.1996
1.9605e+002
经过对比发现在2kHz以下频率,数值结果与低频涡流损耗公式的计算结果吻合的非常好。
}
五、求解结果
六、实验总结
通过工程电磁场这门课的学习,掌握了二维静电场边值问题的分析,但是对有限差分法的掌握还不够深入,所以这次实验还是有点难度的。本次实验,编写C++程序即可,源程序的编写是在参照了许多资料完成的。通过本次实验。对有线差分法和超松弛迭代法有了进一步的了解。
实验二螺线管电磁阀静磁场分析
六、磁通等势线
七、Plugnut的BH曲线
八、实验总结
本次实验练习了在MAXWELL 2D环境下建立磁场模型,并求解分析磁场的分布,深入地认识螺线管静磁场的分布。通过建立磁场模型,熟悉了MAXWELL 2D的使用,整个实验过程比较顺利、完成了实验任务要求的内容,对课程的学习有了很大的帮助作用。
实验三叠片钢涡流损耗分析
2、实验要求
做不同频率下的叠片钢磁场分布图,计算不同频率下的最低磁通密度和涡流
损耗,与理论计算结果进行比较。
二、不同频率下的叠片钢磁场分布图
f=1hz:
f=60hz:
f=360hz:
f=1khz:
工程电磁场答辩
1 1 2 2 p q
BACK
(矩形场域、正方形网格)
问题陈述
如右图,接地金属槽横截面边长 为4cm的正方形,h=1cm,则可将其 分成4*4的网格,共25个网格节点, 从上到下分别编号为dij, i,j从零开始(i表示行数,j表示 列数)编程时,可建立一个二维 数组V1[5][5],将dij放入 V1[i][j]中,由于每次迭代后, 数组中的值会发生改变, 故再建立一个数组V2[5][5];
} for(i=1;i<4;i++) {
for(j=1;j<4;j++) { a[i][j]=b[i][j]+(1.20/4)*(b[i+1][j]+ b[i][j+1]+a[i-1][j]+a[i][j-1]-4*b[i][j]); //迭代公式,取松弛因子为α=1.20 }
}
图五 Hz=2kHz时叠片钢的磁场分布
图六 Hz=5kHz时叠片钢的磁场分布
图七 Hz=10kHz时叠片钢的磁场分布
软件计算了不同频率处最低磁通密度Bmin和涡流损耗P F(Hz) 1 Bmin 1.000 P(W) 1.93366e-6
60
360 1k 2k
0.999
0.988 0.919 0.758
1.9605e-6
7.0578e-3 2.5460e-1 1.9907 8.1618
5k
10k
0.412
0.202
5.3053e1
2.1928e2
数据/观测
图三 Hz=360Hz时叠片钢的磁场分布 图一 Hz=1Hz时叠片钢的磁场分布 图二 Hz=60Hz时叠片钢的磁场分布
工程电磁场实验报告用超松弛迭代法求解接地金属槽内的电位分布
南京理工大学工程电磁场实验报告班级:1m 班姓名:mmmm学号:mmm2013.06.16实验一 用超松弛迭代法求解接地金属槽内的电位分布 一、实验目的1、掌握如何使用超松弛法来近似求解金属槽内的电位值。
2、掌握利用C++来实现超松弛迭代法。
二、实验原理有限差分法是基于差分原理的一种计算方法。
对于下面的的一个二维泊松方程的差分格式,利用差分就可以得到每一个点的电位。
图1 有限法网格分割其电位值是: 2012341()4Fh ϕϕϕϕϕ=+++-其中F ρε=-, h 为网格间距。
若令F=0,则电位情况则变成了拉普拉斯的差分格式:012341()4ϕϕϕϕϕ=+++图2 迭代法求电位值1、高斯-赛德尔计算法:(1)112,1,,11,,11[]4k k k k k i j i j i j i j i j Fh ϕϕϕϕϕ+++--++=+++-直到(1)(),,k k i j i j ϕϕε+-<为止。
2、对于超松弛法,我们引入一个加速收敛因子α并且得到下面的计算公式:(1)()112(),,1,,11,,1,[4]4k k k k k k k i j i j i j i j i j i j i j Fh αϕϕϕϕϕϕϕ+++--++=++++--直到(1)(),,k k i j i j ϕϕε+-<为止。
借助计算机来求解的时候,其流程图如下:图3 迭代法求电位值的流程图三、实验内容(1)、题目要求利用超松弛迭代法求解接地金属槽内的电位分布,给定图如下。
已知a=4cm,h=a/4=10mm 。
给定初值(0),j 0i ϕ=,误差范围为510ε-=。
求迭代次数N=?以及电位分布,i j ϕ。
图4 超松弛法求接地金属槽内的电位值(2)、利用C++来编写计算机的求解程序,其程序如下:程序(3)、求解结果运行程序后,就能得到求解的结果。
图5 运行程序后的初始界面图6 求解结果(4)结果分析1、从实验结果可以看到,当加速收敛因子的大小不同的时候,两者的迭代次数是有差异,所以选取合适的最佳的收敛因子可以大大加速求解的速度,节省存储空间,提高效率。
超松弛迭代法求解两点边值问题(二)
超松弛迭代法求解两点边值问题(二)摘要本文是在matlab环境下熟悉的运用计算机编程语言并结合超松弛变量超松弛迭代法的理论基础对方程组求解。
首先,本文以微分方程边值问题为例,导出了离散化后线性方程组即稀疏线性方程组,转化对稀疏线性方程组求解问题。
其次,用超松弛( SOR) 迭代法编写matlab程序,对产生的稀疏线性方程组进行迭代法求解。
然后,分别改变松弛因子ω和分段数n的值,分析其收敛性和收敛速度,做出各个方面的分析和比较得到相关结论。
最后,将超松弛迭代算法在计算机上运用matlab语言实现, 得出了一组与精确解较接近的数值解,并画图比较,验证逐次超松弛( SOR) 迭代法的精确性。
关键词:稀疏线性方程组;逐次超松弛迭代法;松弛因子;matlab编程OVERRELAXATION ITERATIVE METHOD FORSOLVINGTWO-BOUNDARY VALUE PROBLEM(TWO)ABSTRACTThis is familiar with the use of computer programming in matlab language and overrelaxation variable overrelaxation iteration method of the theoretical basis of solving equations.First of all, as an example, based on differential equation boundary value problem is derived after discretization is sparse system of linear equations of linear equations, the transformation of sparse linear equations to solve the problem. Second, use write matlab program over relaxation (SOR) iteration method, the iteration method solving sparse linear equations. Then, change the values of relaxation factor and section number n omega, analyzes its convergence and convergence speed, all aspects to make the analysis and comparison of related conclusions. Finally, the over-relaxation iteration algorithm is implemented on a computer using matlab language and obtained a set of numerical solution with exact solution is close to, and draw the comparison, verification of successive overrelaxation (SOR) the accuracy of iterative method.Key words: Sparse linear system of equations;Successive over relaxation iteration method; Relaxation factor;Matlab programming目录1 绪论 (1)1.1 课题研究 (1)2课题研究方法 (2)2.1 超松弛法产生的背景 (2)2.2 超松弛迭代法理论基础 (2)3 实验过程和运行结果 (5)4 结论 (9)参考文献 (10)附录 (11)1 绪论1.1 课题研究考虑两点边值问题容易知道它的精确解为为了把微分方程离散,把区间等分,令,,得到差分方程简化为从而离散后得到的线性方程组的系数矩阵为对,,,分别用、和的超松弛迭代法求解线性方程组,然后比较与精确解的误差;探讨使超松弛迭代法收敛较快的取值,对结果进行分析;探讨在迭代过程中取4位有效数字和7位有效数字有什么不同;谈谈你的体会。
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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一 用超松弛迭代法求解接地金属
槽内电位分布
学院:自动化学院
姓名:
学号:
一、实验内容:
试用超松弛迭代法求解接地金属槽内电位的分布。
已知:cm a 4=,mm a h 104/==
给定边值如图所示。
给定初值:0)0(,=j i ϕ
误差范围:510-=ε
计算迭代次数,j i ,ϕ分布。
二.实验设计原理:有限差分法
有限差分法(Finite Differential Method )是基于差
分原理的一种数值计算法。
其基本思想:将场域离散为许多
小网格,应用差分原理,将求解连续函数ϕ的泊松方程的问
题换为求解网格节点上ϕ的差分方程组的问题。
编程时已经考虑到题目要求,所以直接将边值编入到程
序中,这样可以省略输入,从而直接输入迭代因子进行求解,可以减少编程的难度。
这次编程和以前不同的是将数组和正0=ϕ= V 100 ϕ 0=ϕ0=ϕ
交函数图像结合起来,所以在考虑输入和输出的时候会有一些难度,因为数组是上面是小的而图像上面越在上,代表坐标就越大。
所以在输入和输出的时候要谨慎对待。
迭代时所用公式是和书上一样,为
a[i][j]=b[i][j]+w/4*(b[i+1][j]+b[i][j+1]+a[i][j-1 ]+a[i-1][j]-4*b[i][j]);
其中a代表k+1,而b代表k。
以上分析了迭代程序的实现,但是迭代循环如何终止并未说明。
题目中的误差范围ε=0.00001,即当两次迭代结果相差不超过ε时停止,这里只得是九点都满足不超过ε,而并不是其中某一点达到即可。
这样可以保证不是陷入死循环,从而输出结果。
这样可以画出流程图如下所示:
三、程序运行界面及结果
1:开始界面:要求输入迭代因子
2:输入迭代因子进行计算:如输入1.18
可以求出结果,得知要进行12次迭代。
四.源程序代码
#include<iostream.h>
#include<math.h>
int n=0,m=0,k=0,i=0,j=0;
float w;
float a[5][5],b[5][5];
void cjc() //定义函数名
{
while(1)
{
for( j=1;j<4;j++)
for( i=1;i<4;i++)
{
a[i][j]=b[i][j]+w/4*(b[i+1][j]+b[i][j+1]+a[i][j-1]+a[i-1][j]-4*b[i][j]);
} //函数运算迭代公式
n++;
for(i=1;i<4;i++)
for(j=1;j<4;j++)
{
if(fabs(a[i][j]-b[i][j])<0.00001) //保证误差,从而能够确保输出,不必陷入死循环
k++;
}
if(k==9)
break;
else
{
k=0;
for( i=1;i<4;i++)
for( j=1;j<4;j++)
{
b[i][j]=a[i][j];
}
}
}
}
void main()
{
cout<<" 工程电磁场逐次超松弛法求解电位
\n";
cout<<endl;
for(int i=0;i<5;i++ )
for (j=0;j<5;j++)
{
b[i][j]=a[i][j]=0;
b[i][j]=a[i][j]=0;
}
for(int j=0;j<5;j++)
b[j][4]=a[j][4]=100;//输入函数边值
cout<<"请输入“加速收敛因子(大于等于1小于2):”\n";
while(1)
{
cin>>w;//输入迭代因子
if(w>2||w<1)
{
cout<<"输入错误,请重新输入\n";
}
else
break;
}
cjc();
cout<<"电位分布如下:\n";
for(j=4;j>=0;j--)
{
for(i=0;i<5;i++)
cout<<a[i][j]<<" ";
cout<<endl; //输出结果
}
cout<<"迭代次数为:\n";
cout<<"n="<<n<<endl;
}
五.实验心得与思考
通过设计程序并进行完善调试,我对有限差分法有了进一步的认识,同时也已经掌握超松弛迭代法的运用。
对于这一类题型都可以运用同样方法予以解决。
这次的源程序是针对于特定题目编出的程序,如果边值条件有所改变那么源程序也得改变,显得不是很方便。
应该可以编出一种类,既将长和宽以及步距,靠输入其中来进行运算。
由于这种编程比较复杂,这次由于时间不充足当然自己能力有限,所以只好编出这种特定的程序,希望以后能够加强学习,充实自己,编出更加理想的程序。