超松弛迭代法求解接地金屬槽內(nèi)電位分布_第1頁(yè)
超松弛迭代法求解接地金屬槽內(nèi)電位分布_第2頁(yè)
超松弛迭代法求解接地金屬槽內(nèi)電位分布_第3頁(yè)
超松弛迭代法求解接地金屬槽內(nèi)電位分布_第4頁(yè)
超松弛迭代法求解接地金屬槽內(nèi)電位分布_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)一用超松弛迭代法求解接地金屬槽內(nèi)電位分布1、 實(shí)驗(yàn)內(nèi)容:試用超松弛迭代法求解接地金屬槽內(nèi)電位的分布。已知:,給定邊值如圖所示。給定初值:誤差范圍:計(jì)算迭代次數(shù),分布。一.實(shí)驗(yàn)思路由邊界條件用泊松方程的五點(diǎn)差分格式求得中央點(diǎn)的點(diǎn)位。再以所得點(diǎn)及邊界再次利用泊松方程的五點(diǎn)差分格式求出另四個(gè)點(diǎn),依照此方法求出其余點(diǎn)的電位分布。用最佳收斂因子的經(jīng)驗(yàn)公式計(jì)算收斂因子。利用超松弛迭代法進(jìn)行差分方程的求解,當(dāng)遇到邊界是采用邊界值或者邊界差分格式。直到所有節(jié)點(diǎn)電位滿足誤差條件。二實(shí)驗(yàn)設(shè)計(jì)原理:有限差分法有限差分法(Finite Differential Method)是基于差分原理的一種數(shù)值計(jì)算法。其基本

2、思想:將場(chǎng)域離散為許多小網(wǎng)格,應(yīng)用差分原理,將求解連續(xù)函數(shù)的泊松方程的問(wèn)題換為求解網(wǎng)格節(jié)點(diǎn)上的差分方程組的問(wèn)題。編程時(shí)將邊值編入到程序中,這樣可以省略輸入,從而直接輸入迭代因子進(jìn)行求解,可以減少編程的難度。迭代時(shí)所用公式是和書上一樣,為aij=bij+w/4*(bi+1j+bij+1+aij-1+ai-1j-4*bij);其中a代表k+1,而b代表k。啟動(dòng)輸出開始菜單(邊值都已經(jīng)給定)輸入迭代因子w迭代次數(shù)n=0n+ 開始循環(huán)迭代函數(shù)判斷相鄰二次差值是否小于給定值輸出n,電位aij終止三、程序運(yùn)行界面及結(jié)果四源程序代碼#include<iostream>#include<ma

3、th.h>#include<iomanip>using namespace std;classoverrei /over-relaxation iterative methodprivate: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<m;i+)pi=new doublen;q=new double *m;/迭代因子求解for(i=0;i<m;i+)qi=new

4、 doublen;if(m=n)x=2/(1+sin(3.141592654/(m-1);elsex=2-3.141592654*sqrt(2)*sqrt(1/(m-1)*(m-1)+1/(n-1)*(n-1);cout<<"最佳收斂因子:"<<x<<endl;void Initialization(); /賦邊界條件void Cal(); /計(jì)算void Diedai(); /迭代函數(shù)void Show(); /輸出部分;void overrei:Initialization() /賦邊界條件inti,j; for(i=0;i<m

5、;i+) /邊界條件for(j=0;j<n;j+)if(i=0)pij=100; qij=100;elsepij=0;qij=0;cout<<"初始點(diǎn)位:"<<endl;Show();void overrei:Cal() /計(jì)算inti,j;int c=1;while(1) c=1;for(i=0;i<m;i+)for(j=0;j<n;j+)if(pij-qij)>e|(qij-pij)>e) /相鄰兩次迭代誤差是否小于1e-5c=0;break;if(c=0) break;if(c=1 && k!=0)

6、 break;Diedai();void overrei:Diedai() /迭代函數(shù)inti,j;double y=x/4;if(k%2)for(i=1;i<m-1;i+)for(j=1;j<n-1;j+)qij=pij+y*(qi-1j+qij-1+pi+1j+pij+1-4*pij);elsefor(i=1;i<m-1;i+)for(j=1;j<n-1;j+)pij=qij+y*(pi-1j+pij-1+qi+1j+qij+1-4*qij);k+;void overrei:Show() /輸出部分inti,j;for(i=0;i<m;i+)for(j=0;j

7、<n;j+)cout<<setw(12)<<setprecision(6)<<fixed<<qij<<ends;cout<<endl;int main()cout<<" *"<<endl;cout<<" 超松弛迭代法求解接地金屬槽內(nèi)電位的分布"<<endl;cout<<" *"<<endl;overrei A(5,5,1e-5);A.Initialization();A.Cal();co

8、ut<<"電位分布:"<<endl;A.Show();cout<<"迭代次數(shù):"<<A.k<<endl;return 0;實(shí)驗(yàn)二按對(duì)稱場(chǎng)差分格式求解電位的分布一.實(shí)驗(yàn)思路只計(jì)算一半的區(qū)域,對(duì)另一半進(jìn)行對(duì)稱性計(jì)算,減小計(jì)算量。選取二維數(shù)組,同樣是兩個(gè)數(shù)組a4141、b4141,分別用于表示迭代前后的取值。由此對(duì)第20列進(jìn)行特殊處理。即第21列是和第20列相等的,因?yàn)樵诘?1列上標(biāo)注了"/x=0,即要求每次迭后都要求u1i20=u1i19,其余則同前。當(dāng)計(jì)算出了前21列的電位值時(shí),根據(jù)對(duì)稱

9、性可得到右半邊的電位值,即要求u1i40-j=u1ij;,直接賦值。四周的電位值依舊保持不變,不能夠參與迭代。并且中間對(duì)稱列上的電位值為零,故也不參與迭代。由題意可知,只有第1列到第20列參與迭代。在進(jìn)行精度計(jì)算時(shí),用數(shù)組b的值與相應(yīng)數(shù)組a里的值進(jìn)行比較,沒迭代一次都要進(jìn)行比較。如果在誤差允許的范圍內(nèi),則繼續(xù)迭代;當(dāng)超過(guò)誤差標(biāo)準(zhǔn)的時(shí)候則停止迭代。依舊按照比較得到最少收斂次數(shù)的方法在程序中計(jì)算出最佳收斂因子。然后對(duì)對(duì)稱列右邊的點(diǎn)進(jìn)行對(duì)稱賦值。最后輸出輸出最佳迭代因子、迭代的次數(shù)和迭代后各相應(yīng)點(diǎn)的電位值。二.源程序代碼#include<iostream.h> #include

10、<math.h> #include<iomanip.h> void main() double u14141,u24141; int flag=10000,i,j,e,n; double a,d; /a最佳加速收斂因子for(j=0;j<41;j+) u10j=100; u140j=0;  for(i=1;i<40;i+) u1i0=0; u1i40=0;  for(i=1;i&l

11、t;40;i+) /內(nèi)部點(diǎn)賦初值for(j=1;j<21;j+) u1ij=2.5*(j-1); cout<<"迭代前左半?yún)^(qū)域各電位點(diǎn)上的初始值:"<<endl; for(i=0;i<41;i+) for(j=0;j<21;j+) cout<<u1ij<<" " /輸出迭代初值 cout<<endl; cout<<endl<<"n"&#

12、160;for(d=1;d<2;d+=0.01)/取迭代次數(shù)最少的加速收斂因子n=0; for(j=0;j<41;j+) u10j=100; u140j=0;  for(i=1;i<40;i+) u1i0=0; u1i40=0; for(i=1;i<40;i+) for(j=1;j<21;j+) u1ij=2.5*(j-1);  do/迭代x次 for(i=0;i<41;i+) for(j=0;j<22;j+)&#

13、160;u2ij=u1ij; for(i=1;i<40;i+) for(j=1;j<20;j+) u1ij=u2ij+(d/4)*(u2i+1j+u2ij+1+u1i-1j+u1ij-1-4*u2ij); u1i20=u1i19; for(i=1;i<40;i+)/判斷精度f(wàn)or(j=1;j<21;j+)  if(fabs(u1ij-u2ij)>1e-5) e=1; break; else e=0;  if(e=1) brea

14、k;  n+;/迭代次數(shù)while(e); if(n<flag) flag=n; a=d;  for(i=1;i<40;i+)/對(duì)其對(duì)稱點(diǎn)賦值for(j=1;j<21;j+)u1i40-j=u1ij;  cout<<"迭代后各節(jié)點(diǎn)上最終電位近似值:"<<endl; for(i=0;i<41;i+) for(j=0;j<41;j+) cout<<setiosflags(ios:fixed)&l

15、t;<setprecision(5)<<setw(8)<<u1ij<<" "/對(duì)齊輸出 cout<<endl; cout<<endl<<endl; cout<<"收斂因子:"<<a<<endl; cout<<endl; cout<<"迭代次數(shù):"<<flag<<endl; cout<<endl;

16、  三.程序運(yùn)行界面及結(jié)果附錄:程序一:#include<iostream.h>#include<math.h>void main()double m55,n55;int N=0,b=1;inti,j;double e=0.00001;double a=2/(1+sin(3.1415926/4);for(i=0;i<=4;i+)for(j=0;j<=4;j+)mij=0;nij=0;m14=100;m24=100;m34=100;n14=100;n24=100;n34=100;for(j=4;j>=0;j-)for(i=0;i<=4;i

17、+)cout<<"m"<<i<<""<<j<<""<<"="<<mij<<'t'cout<<endl;while(b=1)b=0;N=N+1;for(i=1;i<=3;i+)for(j=1;j<=3;j+)mij=mij+a*(mi-1j+mij-1+mi+1j+mij+1-4*mij)/4;for(i=1;i<=3;i+)for(j=1;j<=3;j+)if(fabs

18、(mij-nij)>=e)b=1;nij=mij;for(j=4;j>=0;j-)for(i=0;i<=4;i+)cout<<"m"<<i<<""<<j<<""<<"="<<mij<<'t'cout<<endl;cunt<<"N="<<N<<endl;程序二:#include<iostream>#includ

19、e<math.h>#include<iomanip>using namespace std;classoverrei /over-relaxation iterative methodprivate: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<m;i+)pi=new doublen;q=new double *m;/迭代因子求解for(i=0;i<m;i+

20、)qi=new doublen;if(m=n)x=2/(1+sin(3.141592653/(m-1);elsex=2-3.141592653*sqrt(2)*sqrt(1/(m-1)*(m-1)+1/(n-1)*(n-1);cout<<"最佳收斂因子:"<<x<<endl;void Initialization(); /賦邊界條件void Cal(); /計(jì)算void Diedai(); /迭代函數(shù)void Show(); /輸出部分;void overrei:Initialization()inti,j; /邊界條件for(i=0;i

21、<m;i+)for(j=0;j<n;j+)if(i=0)pij=100; qij=100;elsepij=0;qij=0;cout<<"初始點(diǎn)位:"<<endl;Show();voidoverrei:Cal()inti,j;int c=1;while(1) c=1;for(i=0;i<m;i+)for(j=0;j<n;j+)if(pij-qij)>e|(qij-pij)>e)c=0;break;if(c=0) break;if(c=1 && k!=0) break;Diedai();voidover

22、rei:Diedai()inti,j;double y=x/4;if(k%2)for(i=1;i<m-1;i+)for(j=1;j<n-1;j+)qij=pij+y*(qi-1j+qij-1+pi+1j+pij+1-4*pij);elsefor(i=1;i<m-1;i+)for(j=1;j<n-1;j+)pij=qij+y*(pi-1j+pij-1+qi+1j+qij+1-4*qij);k+;voidoverrei:Show()inti,j;for(i=0;i<m;i+)for(j=0;j<n;j+)cout<<setw(12)<<s

23、etprecision(6)<<fixed<<qij<<ends;cout<<endl;int main()cout<<" *"<<endl;cout<<" 超松弛迭代法求解接地金屬槽內(nèi)電位的分布"<<endl;cout<<" *"<<endl;overrei A(5,5,1e-6);A.Initialization();A.Cal();cout<<"電位分布:"<<end

24、l;A.Show();cout<<"迭代次數(shù):"<<A.k<<endl;return 0;程序三#include <iostream.h>#include <math.h> int i,j,N=0;/N為迭代次數(shù)double u155;/定義電位double u255;double e=0.00001;/誤差范圍double a=1.5;/加速收斂因子int finish();/迭代結(jié)束函數(shù)int Nresult()

25、;/求解迭代次數(shù)void print();void main()   if(i=4)     for(j=0;j<5;j+)   u1ij=100; /邊界值    else u1ij=0;     N=Nresult();      print();void print()cout

26、<<"迭代次數(shù)為:"<<N<<endl;   for(j=0;j<5;j+)   cout<<u24j<<'t'      cout<<endl;for(j=0;j<5;j+)   cout<<u23j<<'t'      cou

27、t<<endl;for(j=0;j<5;j+)   cout<<u22j<<'t'      cout<<endl;for(j=0;j<5;j+)   cout<<u21j<<'t'      cout<<endl;for(j=0;j<5;j+)   co

28、ut<<u20j<<'t'      cout<<endl;int finish()   double b;b=u2ij-u1ij;if(-e<b)&&(b<e)return 1;else return 0;int Nresult() doN+;for(i=1;i<4;i+)     for(j=1;j

29、<4;j+)     u1ij=u2ij;            for(j=1;j<4;j+) u21j=u11j+a/4*(u20j+u21j-1+u12j+u11j+1-4*u11j);        u1ij=u2ij;    for(j=1;j<4;j+) u22j=u12j+a/

30、4*(u21j+u22j-1+u13j+u12j+1-4*u12j);        u1ij=u2ij;    for(j=1;j<4;j+) u23j=u13j+a/4*(u22j+u23j-1+u14j+u13j+1-4*u13j);        u1ij=u2ij;while(finish()=0);return N; 程序四#include<iostream>

31、;#include<math.h>#include<iomanip>using namespace std;class cscddprivate:int m,n;double x,e;double *p,*q;public:int k;cscdd(int m0,int n0,double e0)int i;e=e0;k=0;m=m0;n=n0;p=new double *m;for( i=0;i<m;i+)pi=new

32、0;doublen;q=new double *m;for( i=0;i<m;i+)qi=new doublen;        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<<"最佳收斂因子:"<<x<

33、<endl;void bjtj();                    /賦邊界條件void jishuan();                     /計(jì)

34、算void Diedai();                  /迭代函數(shù)void suchu();                   /輸出部分;void  cscdd:bjtj()&

35、#160;                /賦邊界條件int i,j; for(i=0;i<m;i+)                /邊界條件for(j=0;j<n;j+)if(i=0)pij=100;   

36、0;qij=100;elsepij=0;qij=0;cout<<"初始點(diǎn)位:"<<endl;suchu();void cscdd:jishuan()                 /計(jì)算int i,j;int c=1;while(1)    c=1;    for(i=0;i<m;i+)     for(j=0;j<n;j+) 

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論