MATLAB超松弛迭代法求解接地金属槽内电位分布

时间: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求解问题不仅可以得到电位分布矩阵,还可以绘制相应图形直观看出电位变化情况。

这次的源程序是针对于特定题目编出的程序,如果边值条件有所改变那么源程序也得改变,显得不是很方便。应该可以编出一种类,既将长和宽以及步距,靠输入其中来进行运算。希望以后能够加强学习,充实自己,编出更加理想的程序。

MATLAB超松弛迭代法求解接地金属槽内电位分布.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219