MATLAB超松弛迭代法求解接地金属槽内电位分布
时间:2026-01-21
时间:2026-01-21
用超松弛迭代法求解接地金属槽内电位分布
一、实验内容:
试用超松弛迭代法求解接地金属槽内电位的分布。 已知:a 4cm,h a/4 10mm 给定边值如图所示。 给定初值: i(,0j) 0 误差范围: 10 5 计算迭代次数, i,j分布。
二.实验设计原理:有限差分法
有限差分法(Finite Differential Method)是基于差分原理的一种数值计算法。其基本思想:将场域离散为许多小网格,应用差分原理,将求解连续函数 的泊松方程的问题换为求解网格节点上 的差分方程组的问题。
编程时已经考虑到题目要求,所以直接将边值编入到程序中,编写成function的M文件,这样只要调用此M文件,输入变量为迭代因子,即可输出电位矩阵和迭代次数。 迭代时所用公式为
U2(i,j)=U1(i,j)+a*(U1(i,j+1)+U1(i+1,j)+U2(i-1,j)+U2(i,j-1)-4*U1(i,j))/4 其中U2代表k+1,而U1代表k。
以上分析了迭代程序的实现,但是迭代循环如何终止并未说明。题目中的误差范围ε=0.00001,即当两次迭代结果相差不超过ε时停止,这里必须是九点都满足不超过ε,而并不是其中某一点达到即可。当迭代次数过多时,程序会运行很长时间,(本题要求电位点数较少,不会出现迭代次数过多的情况。当然点数越多结果越精确。)当迭代因子a≥2时,迭代不收敛,程序会陷入死循环,因此需要限制循环次数,迭代100000次无结果则退出循环,防止程序崩溃。
这样可以画出流程图如下所示:
0
0
0
10V
启动
输入迭代因子
迭代次数 k=0
k=k+1 开始循环迭代
函数判断相邻二 否
次差值是否小于
给定值
是
输出k,电位U1
三、程序运行界面及结果
终止
适当改变迭代因子a的值是否能够减少迭代次数? 我做了如下试验:
可见,这样的更改在a取合适的值的时候能带来迭代次数十分显著的减少,
但什么样的a才是“合适的”值,因为当a太小时,每次迭代U不能获得足够的增量。 而当a太大,则会使得增量过大,在超过目标值时需要更多的迭代次数来返回。 那么是否有一种办法能够精确算出最合适的a值或者估计出较合适的a值。
从多次实验看来,当a>=2时计算总是不收敛,而a的最佳取值往往和网格的行列数有关。 有资料给出了经验公式:
2
其中b=
cos
2
经过试验,该公式是有效的。
四.源程序代码
function [ U1,k] = cff( a )%有限差分法计算电位 lx=5;ly=5; %定义矩阵维数 U1=zeros(ly,lx); %建立一个矩阵 for j=2:lx-1 U1(1,j)=100; end %设置边界条件 U2=U1;maxt=1;k=0;
while(~(maxt<1e-5||k>100000)) %达到精度要求跳出循环,限制迭代次数,防止死循环。 k=k+1; maxt=0; for i=2:ly-1, for j=2:lx-1,
U2(i,j)=U1(i,j)+a*(U1(i,j+1)+U1(i+1,j)+U2(i-1,j)+U2(i,j-1)-4*U1(i,j))/4; %用超松弛迭代法进行迭代计算 t=abs(U2(i,j)-U1(i,j)); if(t>maxt) maxt=t;end end end U1=U2; end end
五.实验心得与思考
通过设计程序并进行完善调试,我对有限差分法有了进一步的认识,同时也已经掌握超松弛迭代法的运用。对于这一类题型都可以运用同样方法予以解决。
使用MATLAB求解问题不仅可以得到电位分布矩阵,还可以绘制相应图形直观看出电位变化情况。
这次的源程序是针对于特定题目编出的程序,如果边值条件有所改变那么源程序也得改变,显得不是很方便。应该可以编出一种类,既将长和宽以及步距,靠输入其中来进行运算。希望以后能够加强学习,充实自己,编出更加理想的程序。
下一篇:初级中式烹调师课件