工程电磁场报告_第1页
工程电磁场报告_第2页
工程电磁场报告_第3页
工程电磁场报告_第4页
工程电磁场报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、工程电磁场报告迭代法求电位分布2010/4/20808190246吴鹏工程电磁场报告 -迭代法在计算电位中的应用所谓迭代法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。在这次实验中是利用迭代法求出在二维场中的电位分布,相对于其他求解方法,虽然精确度存在误差,但是简

2、单易行,充分利用计算机的高效,可以很快的得出大致的电位分布。实验采用的是C+语言进行辅助。一、 初试牛刀-计算5×5的电位分布;这个实验是用于实现超松弛法来求节点电位,考虑到要求的场是二维分布的,所以构造的基本数据为二维数组,套用的迭代公式为:aij=bij+( /4)*(bi+1j+bij+1+ai-1j+aij-1-4*bij);迭代因子为,可根据经验公式算出,直接赋值,考虑到计算机的高效性,在此可任取一大于1小于2的数,最后均能得出答案,只是迭代次数有所差异。启动该实验的方框图如下赋边界已知电位赋场点初始值累计迭代次数M=0迭代次数M+1利用公式进行迭代判断是否达到精度要求 N

3、 Y打印出每一个点的点位 Y结束实现该功能的源程序如下:#include<iostream.h>#include<math.h>#include<iomanip.h>void main()double a55; double b55; int i=0,j=0;static int M=0;bool N=true;for(j=1;j<=3;j+) for(i=1;i<=3;i+)aij=0; for(j=0;j<=4;j+) a4j=0;a0j=100;for(i=1;i<=4;i+)ai0=0;ai4=0; cout<<&

4、quot;各内节点上电位的初始迭代值为:"<<endl;/输出初始迭代值for(i=0;i<=4;i+)for(j=0;j<=4;j+)cout<<aij<<" " cout<<endl;cout<<"n" do for(i=0;i<=4;i+) for(j=0;j<=4;j+) bij=aij; for(i=1;i<=3;i+) for(j=1;j<=3;j+) aij=bij+(1.2/4)*(bi+1j+bij+1+ai-1j+aij-1-4*

5、bij); for(i=1;i<=3;i+) for(j=1;j<=3;j+) if(fabs(aij-bij)>0.00001) N=true; break; else N=false; M+; while(N); cout<<"经迭代后,各节点电位的近似值为:"<<endl;for(i=0;i<=4;i+)for(j=0;j<=4;j+)cout<<setiosflags(ios:fixed)<<setprecision(5)<<aij<<" "co

6、ut<<endl;cout<<endl;cout<<"迭代次数"<<M<<endl<<endl;程序很短,但是实现了要求的功能,经运行可得出结果:电位大概的分布如左图所示,可以看出还是比较符合的。在这个实验中要注意几点:首先是要选取合适的数据类型,如果采用了int型,会对结果造成很大的影响;其次是对精度的控制,否则会影响迭代次数和结果;再次就是迭代公式要熟悉,把它转换为计算机语言。总之这个实验算是一个练手,为下一步的实验打下基础。搞清楚这个实验的原理和方法,很容易得出下一个实验的操作过程。二、 实战演练

7、-用迭代法求出对称场中的点位分布。其实这一个实验和上一个是大同小异,只是要考虑最中间一行的迭代关系,这很重要,否则会出现中间两行没有进行迭代的情况。作出左边一半后,直接再用C+给另外一半赋予与左侧相对称的值即可。程序启动试验设计的方框图如下图所示:赋边界的电位值赋场内各点的电位值累计迭代次数M=0迭代次数加1按照公式进行迭代检验是否达到精度 Y把另外一半镜像出来,直接赋值打印出结果结束实验源程序如下:#include<iostream.h>#include<math.h>#include<fstream.h>#include<iomanip.h>

8、void main()double a4020; /定义数组a,用于存放初始迭代值double b4020; /定义数组b,用于和数组a进行比较,以确定是否达到实验进度double c4040;int i=0,j=0; bool M;static int N=0; /定义静态变量,记录迭代的次数 ifstream infile("test.txt",ios:noreplace);ofstream outfile;outfile.open("test.txt");for(i=1;i<40;i+) /为内节点赋初始迭代值for(j=1;j<20;

9、j+)aij=2.5*(j-1); for(i=1;i<40;i+)/为左边界赋初始迭代值ai0=0;for(j=0;j<20;j+) /为上下边界赋值 a0j=100;a39j=0;cout<<"初始迭代值为:"<<endl;outfile<<"初始迭代值为:"<<endl;for(i=0;i<40;i+)for(j=0;j<20;j+)outfile<<aij<<" " /输出到文件 cout<<aij<<&qu

10、ot; " /输出数组cout<<endl;outfile<<endl; do /开始进行迭代for(i=0;i<40;i+) /先将a数组前一次复制到b数组,便于精度比较 for(j=0;j<20;j+) bij=aij; for(i=1;i<=38;i+)for(j=1;j<=18;j+) /套用迭代公式,去迭代因数为1.5aij=bij+(1.5/4)*(bi+1j+bij+1+ai-1j+aij-1-4*bij);ai19=0.25*(ai-119+ai18+bi+119+ai18);for(i=1;i<=38;i+) /

11、比较是否达到精度要求for(j=1;j<=18;j+) if(fabs(aij-bij)>0.00001)M=true; break;elseM=false; N+; /完成一次迭代,迭代次数+1while(M); for(i=0;i<=39;i+) /将另外对称部分镜像出来for(j=0;j<=19;j+)cij=aij; ci39-j=aij;cout<<endl;cout<<"经过的迭代次数为:"<<N<<endl;outfile<<"经过的迭代次数为:"<&

12、lt;N<<endl;cout<<endl; cout<<"经过迭代后,各节点电位的近似值为:"<<endl;outfile<<"经过迭代后,各节点电位的近似值为:"<<endl;for(i=0;i<=39;i+)for(j=0;j<=39;j+)cout<<setiosflags(ios:fixed)<<setprecision(5)<<cij<<" "outfile<<setiosflag

13、s(ios:fixed)<<setprecision(5)<<cij<<" "cout<<'n'cout<<'n'outfile<<endl;infile.close();outfile.close();cout<<"实验数据太多,已存放源程序目录下,名为“test.txt”" cout<<'n'cout<<'n'将输出数据全部导出到文件中,再利用excel制作表格,可得到比较好的数据分布图,如左图。可看出数据越多,图表越是精确,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论