1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。 工程电磁场报告 工程电磁场报告 2010/4/2 王小警 工程电磁场报告 -------迭代法在计算电位中的应用 所谓迭代法, 是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法( 或者称为一次解法) , 即一次性解决问题。迭代法又分为精确迭代和近似迭代。”二分法”和”牛顿迭代法”属于近似迭代法。 迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、 适合做重复性操作的特点, 让计算机对一组指令( 或一定步骤) 进行重复执行,
2、 在每次执行这组指令( 或这些步骤) 时, 都从变量的原值推出它的一个新值。在这次实验中是利用迭代法求出在二维场中的电位分布, 相对于其它求解方法, 虽然精确度存在误差, 可是简单易行, 充分利用计算机的高效, 能够很快的得出大致的电位分布。实验采用的是C++语言进行辅助。 一、 初试牛刀-----计算5×5的电位分布; 这个实验是用于实现超松弛法来求节点电位, 考虑到要求的场是二维分布的, 因此构造的基本数据为二维数组, 套用的迭代公式为: a[i][j]=b[i][j]+( α /4)*(b[i+1][j]+b[i][j+1]+a[i-1][j]+a[i][j-1]-4*b[i]
3、[j]);迭代因子为α, 可根据经验公式算出, 直接赋值, 考虑到计算机的高效性, 在此可任取一大于1小于2的数, 最后均能得出答案, 只是迭代次数有所差异。 启动 该实验的方框图如下 赋边界已知电位 赋场点初始值 累计迭代次数M=0 迭代次数M+1 利用公式进行迭代 判断是否达到精度要求 N
4、 Y
打印出每一个点的点位
Y
结束
实现该功能的源程序如下:
#include
5、for(i=1;i<=3;i++)
a[i][j]=0;
}
for(j=0;j<=4;j++)
{
a[4][j]=0;
a[0][j]=100;
}
for(i=1;i<=4;i++)
{
a[i][0]=0;
a[i][4]=0;
}
cout<<"各内节点上电位的初始迭代值为:"< 6、 cout<<"\n";
do
{
for(i=0;i<=4;i++)
{
for(j=0;j<=4;j++)
{
b[i][j]=a[i][j];
}
}
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
a[i][j]=b[i][j]+(1.2/4)*(b[i+1][j]+b[i][j+1]+a[i-1][j]+a[i][j-1]-4*b[i][j]); 7、}
}
for(i=1;i<=3;i++) {
for(j=1;j<=3;j++)
{
if(fabs(a[i][j]-b[i][j])>0.00001)
{
N=true;
break;
}
else
N=false;
}
}
M++;
}
while(N);
cout<<"经迭代后, 各节点电位的近似值为:"< 8、for(j=0;j<=4;j++)
{
cout< 9、是对精度的控制, 否则会影响迭代次数和结果;
再次就是迭代公式要熟悉, 把它转换为计算机语言。
总之这个实验算是一个练手, 为下一步的实验打下基础。搞清楚这个实验的原理和方法, 很容易得出下一个实验的操作过程。
二、 实战演练------用迭代法求出对称场中的点位分布。
其实这一个实验和上一个是大同小异, 只是要考虑最中间一行的迭代关系, 这很重要, 否则会出现中间两行没有进行迭代的情况。作出左边一半后, 直接再用C++给另外一半赋予与左侧相对称的值即可。
程序启动
试验设计的方框图如下图所示:
赋边界的电位值
赋场内各点的电位值
10、累计迭代次数M=0
迭代次数加1
按照公式进行迭代
检验是否达到精度
Y
把另外一半镜像出来, 直接赋值
打印出结果
结束
实验源程序如下:
#include 11、始迭代值
double b[40][20]; //定义数组b, 用于和数组a进行比较, 以确定是否达到实验进度
double c[40][40];
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;j++)
12、{
a[i][j]=2.5*(j-1);
}
}
for(i=1;i<40;i++)//为左边界赋初始迭代值
{
a[i][0]=0;
}
for(j=0;j<20;j++) //为上下边界赋值
{
a[0][j]=100;
a[39][j]=0;
}
cout<<"初始迭代值为:"<






