您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 电磁场与电磁波赛德尔法求电位编程-何梦-20160506
电磁场与电磁波赛德尔法求电位编程班级:通信工程14—1班姓名:何梦学号:2014211513一.实验题目横截面如图所示的导体长槽,上方有一块与槽相互绝缘的导体盖板,截面尺寸为a*b,槽体的电位为零,盖板的电位为100v。用高斯赛德尔迭代法编程求解。(如图1)要求:步长=1,x,y方向的网格线为m=16,n=10,迭代精度为a=10−6.计算:迭代次数N与电位分布。yb1000000ax图1二.迭代解程序框图(如图2所示)启动赋边界节点已知电位值赋予场域内各节点电位初始值图2三,程序算法1.赋初值:分别用四个for循环来给矩形的四边赋值,然后再用一个for循环给中间未知值的地方赋值,这样可以改变中间值,从而减少计算次数。2.迭代法:在用for循环来实行一次次的迭代,并同时用while语句来控制循环何时停止。3.输出结果:用for循环将最终计算结果一个个输出。累计迭代次数N=0N=N+1按超松弛法进行一次迭代,求电位所有内点相邻二次迭代值的最大误差是否小于精度a结束输出N和电位四.编译结果(如图3所示)附录:#includestdio.h#includemath.hvoidmain(){doublea[11][17],x;intp,q,h0,l0,h1,l1,h10,l16;for(h0=0,l0=0;l017;l0++)a[h0][l0]=100;//这里是先给四周赋初值for(h1=1,l0=0;h111;h1++)a[h1][l0]=0;for(h10=10,l1=1;l117;l1++)a[h10][l1]=0;for(h1=1,l16=16;h111;h1++)a[h1][l16]=0;for(h1=1;h110;h1++){for(l1=1;l116;l1++)a[h1][l1]=25;//这里是给中间赋初值,可以通过改变这里的值,从而减小运算}intnum,sum=0;do{num=0;for(h1=1;h110;h1++){for(l1=1;l116;l1++){x=(a[h1-1][l1]+a[h1][l1-1]+a[h1][1+l1]+a[h1+1][l1])/4;//这是将中间的每个值用公式求出来if(fabs(x-a[h1][l1])1e-6)num=num+1;//判断每个值是否在精度要求的范围内a[h1][l1]=x;}}sum=sum+1;//计算循环次数}while(num135);//当每个值满足精度范围时,就不用循环for(p=0;p11;p++){for(q=0;q17;q++){printf(%f,a[p][q]);//输出数组的值}printf(\n);}printf(迭代次数=%d,sum);//输出循环次数}MATLAB代码t=[1:1:17];[a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17]=textread('D:\\Calculator.txt','%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f',17);d=[a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17];plot(t,d,'*b');生成文件\Calculator.txt'代码#includemath.h#includeiostream#includefstreamusingnamespacestd;voidmain(){fstreamoutfile(D://Calculator.txt,ios::out);doublea[11][17],x;intp,q,h0,l0,h1,l1,h10,l16;for(h0=0,l0=0;l017;l0++)a[h0][l0]=100;//这里是先给四周赋初值for(h1=1,l0=0;h111;h1++)a[h1][l0]=0;for(h10=10,l1=1;l117;l1++)a[h10][l1]=0;for(h1=1,l16=16;h111;h1++)a[h1][l16]=0;for(h1=1;h110;h1++){for(l1=1;l116;l1++)a[h1][l1]=25;//这里是给中间赋初值,可以通过改变这里的值,从而减小运算}intnum,sum=0;do{num=0;for(h1=1;h110;h1++){for(l1=1;l116;l1++){x=(a[h1-1][l1]+a[h1][l1-1]+a[h1][1+l1]+a[h1+1][l1])/4;//这是将中间的每个值用公式求出来if(fabs(x-a[h1][l1])1e-6)num=num+1;//判断每个值是否在精度要求的范围内a[h1][l1]=x;}}sum=sum+1;//计算循环次数}while(num135);//当每个值满足精度范围时,就不用循环for(p=0;p11;p++){for(q=0;q17;q++){outfilea[p][q]'\t';//输出数组的值}outfileendl;}//printf(迭代次数=%d,sum);//输出循环次数}
本文标题:电磁场与电磁波赛德尔法求电位编程-何梦-20160506
链接地址:https://www.777doc.com/doc-4995653 .html