}
do//开始进行迭代
{
for(i=0;i<40;i++)//先将a数组前一次复制到b数组,便于精度比较
{
for(j=0;j<20;j++)
{
b[i][j]=a[i][j];
}
}
for(i=1;i<=38;i++)
{
for(j=1;j<=18;j++)//套用迭代公式,去迭代因数为1.5
{
a[i][j]=b[i][j]+(1.5/4)*(b[i+1][j]+b[i][j+1]+a[i-1][j]+a[i][j-1]-4*b[i][j]);
}
a[i][19]=0.25*(a[i-1][19]+a[i][18]+b[i+1][19]+a[i][18]);
}
for(i=1;i<=38;i++)//比较是否达到精度要求
{
for(j=1;j<=18;j++)
{
if(fabs(a[i][j]-b[i][j])>0.00001)
{
M=true;
break;
}
else
M=false;
}
N++;//完成一次迭代,迭代次数+1
}
}while(M);
for(i=0;i<=39;i++)//将另外对称部分镜像出来
{
for(j=0;j<=19;j++)
{
c[i][j]=a[i][j];
c[i][39-j]=a[i][j];
}
}
cout<cout<<"经过的迭代次数为:
"<outfile<<"经过的迭代次数为:
"<cout<cout<<"经过迭代后,各节点电位的近似值为:
"<outfile<<"经过迭代后,各节点电位的近似值为:
"<for(i=0;i<=39;i++)
{
for(j=0;j<=39;j++)
{
cout<:
fixed)<outfile<:
fixed)<}
cout<<'\n';
cout<<'\n';
outfile<}
infile.close();
outfile.close();
cout<<"实验数据太多,已存放源程序目录下,名为“test.txt”";
cout<<'\n';cout<<'\n';
}
将输出数据全部导出到文件中,再利用excel制作表格,可得到比较好的数据分布图,如左图。
可看出数据越多,图表越是精确,基本上可以反映出电位分布情况。
这和用软件模拟的效果很是相似。
实验总结:
经过了这次试验,让我对迭代法有了一个更深入的认识,领略到了计算机带来的方便,对于一些抽象的东西,充分利用计算机,让我们直观的看到了电位分布,这是很便捷的,相信在经过一段时间的学习之后,能更有效地利用现代的手段进行辅助学习。
迭代法的巧妙利用能解决许多问题,它虽然要重复很多次,但计算简便,就相对于精度要求不高的定性分析,是一种很有效的解决方法。