实验一用超松弛迭代法求解接地金属槽
内电位分布
一、实验内容:
试用超松弛迭代法求解接地金属槽内电位的分布。 已知:a?4cm,h?a/4?10mm 给定边值如图所示。 给定初值:?i(,0j)?0 误差范围:??10?5 计算迭代次数,?i,j分布。
一.实验思路
由边界条件用泊松方程的五点差分格式求得中央点的点位。再以所得点及边界再次利用泊松方程的五点差分格式求出另四个点,依照此方法求出其余点的电位分布。 用最佳收敛因子的经验公式计算收敛因子。
利用超松弛迭代法进行差分方程的求解,当遇到边界是采用边界值或者边界差分格式。直到所有节点电位满足误差条件。
二.实验设计原理:有限差分法
有限差分法(Finite Differential Method)是基于差分原理的一种数值计算法。其基本思想:将场域离散为许多小网格,应用差分原理,将求解连续函数?的泊松方程的问题换为求解网格节点上?的差分方程组的问题。
编程时将边值编入到程序中,这样可以省略输入,从而直接输入迭代因子进行求解,可以减少编程的难度。
迭代时所用公式是和书上一样,为
a[i][j]=b[i][j]+w/4*(b[i+1][j]+b[i][j+1]+a[i][j-1]+a[i-1][j]-4*b[i][j]); 其中a代表k+1,而b代表k。
启动 输出开始菜单 (边值都已经给定) 输入迭代因子w 迭代次数n=0 n++ 开始循环迭代 函数判断相邻二次差值是否小于给定值 输出n,电位a[i][j] 终止
三、程序运行界面及结果
四.源程序代码
#include
classoverrei //over-relaxation iterative method {
private: intm,n; doublex,e; double **p,**q; public:
int k;
overrei(int m0,int n0,double e0) { inti; e=e0; k=0; m=m0; n=n0; p=new double *[m]; for(i=0;i //迭代因子求解 for(i=0;i x=2/(1+sin(3.141592654/(m-1))); else x=2-3.141592654*sqrt(2)*sqrt(1/((m-1)*(m-1))+1/((n-1)*(n-1))); cout<<\最佳收敛因子:\ if(m==n) } void Initialization(); //赋边界条件 void Cal(); //计算 void Diedai(); //迭代函数 void Show(); //输出部分 }; void overrei::Initialization() //赋边界条件 { inti,j; for(i=0;i