超松弛迭代法求解接地金属槽内电位分布教材.docx

超松弛迭代法求解接地金属槽内电位分布教材.docx

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一用超松弛迭代法求解接地金属槽内电位分布 实验内容: 试用超松弛迭代法求解接地金属槽内电位的分布。 已知:, 给定边值如图所示。 给定初值: 误差范围: 计算迭代次数,分布。 一.实验思路 由边界条件用泊松方程的五点差分格式求得中央点的点位。再以所得点及边界再次利用泊松方程的五点差分格式求出另四个点,依照此方法求出其余点的电位分布。 用最佳收敛因子的经验公式计算收敛因子。 利用超松弛迭代法进行差分方程的求解,当遇到边界是采用边界值或者边界差分格式。直到所有节点电位满足误差条件。 二.实验设计原理:有限差分法 有限差分法(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] 终止 三、程序运行界面及结果 四.源程序代码 #includeiostream #includemath.h #includeiomanip using namespace std; 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;im;i++) p[i]=new double[n]; q=new double *[m]; //迭代因子求解 for(i=0;im;i++) q[i]=new double[n]; if(m==n) 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最佳收敛因子:xendl; } void Initialization(); //赋边界条件 void Cal(); //计算 void Diedai(); //迭代函数 void Show(); //输出部分 }; void overrei::Initialization() //赋边界条件 { inti,j; for(i=0;im;i++) //边界条件 for(j=0;jn;j++) { if(i==0) { p[i][j]=100; q[i][j]=100; } else { p[i][j]=0; q[i][j]=0; } } cout初始点位:endl; Show(); } void overrei::Cal() //计算 { inti,j; int c=1; while(1) { c=1; for(i=0;im;i++) { for(j=0;jn;j++) { if((p[i][j]-q[i][j])e||(q[i][j]-p[i][j])e) //相邻两次迭代误差是否小于1e-5 { c=0;break; } } if(c==0) break; } if(c==1 k!=0) break; Diedai(); } } void overrei::Diedai() //迭代函数 { inti,j; double y=x/4; if(k%2) { for(i=1;im-1;i++) f

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档