迭代法求方程組實現(xiàn)_第1頁
迭代法求方程組實現(xiàn)_第2頁
迭代法求方程組實現(xiàn)_第3頁
迭代法求方程組實現(xiàn)_第4頁
迭代法求方程組實現(xiàn)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、方程組迭代法實現(xiàn)在數(shù)值分析課程中,有許多諸如迭代之類的計算方法,可以非常有效通過求迭代近似解 決許多無法求,或很難求精確解的問題。但這類方法往往有著非常巨人的計算暈,并不適合 通過人力自行解決,所以我便打算自己編寫一個程序,可以實現(xiàn)三種求方程組解的迭代法。 另外,由于sor法會有尋找最佳的w值的需求,所以也一并實現(xiàn)了尋找sor法的最佳w。在編寫程序之前,應(yīng)對三種方法的迭代過程充分了解。雅可比迭代法:<唇說(一訃"廠-訃+勺)_。23兀3 _ a2nxn + e )()一"廠色2兀2- annxn + bn )高斯賽徳爾法:*+】)=丄(知乜_知尢廣)41anxna)+

2、 /)兀2(如)=_(_§內(nèi)(3)住®a2nxnk)+b2)(/v) 丫 伙+ 1)_門 r (*)w/j+la/+l-ainxnk)+2)sor 法:x(z 乂x+于根據(jù)以上的迭代法的思想,設(shè)計了程序,運行界面如下:* 方程組迭代法求解程序* * *對于形如:5*xl+3*x2=78*xl+2*x2=3請按5 3 78 2 3的形式輸入方程組,主對角線上元素須不為0請輸入你選擇的迭代方式:輸入1選擇 雅可比迭代法輸入2選擇 高斯-賽徳爾法輸入3選擇sor法1你選擇了雅可比法請輸入方程組個數(shù)n: 2請按示例方式輸入方程組1 2 10 1 1方程組輸入完成,請輸入迭代初始值0

3、 0請輸入精度(無窮范數(shù)):0. 01結(jié)巣為.-l 000000 1. 000000 迭代次數(shù)為:3操作完成請輸入你選擇的迭代方式:輸入1選擇 雅可比迭代法輸入2選擇高斯-賽徳爾法輸入3選擇sor法妳入0結(jié)束程斥2你選擇了高斯-賽徳爾法請輸入方程組個數(shù)n: 3請按示例方式輸入方程組8 -3 2 204 11 -1 336 3 12 36方程組輸入完成,請輸入迭代初始值0 0 0請輸入精度(無窮范數(shù)):o. 0001結(jié)果為:3. 000002 1. 999999 0. 999999 迭代次數(shù)為: 操作完成請輸入你選擇的迭代方式:輸入1選擇 雅可比迭代法輸入2選擇 高斯-賽徳爾法輸入3選擇sor法

4、輸入0結(jié)束程序3你選擇了 sor法請輸入方程組個數(shù)n: 3請按示例方式輸入方程組5 2 1 -12-1 4 2 202 -3 10 3方程組輸入完成,請輸入迭代初始值0 0 0請輸入精度(無窮范數(shù)):0.0001系統(tǒng)自動匹配最佳w值,請輸入1自行輸入w值,請輸入1匹配到最佳的w值為:0. 885000驅(qū)為:-4. 000038 2. 999997 2.000007迭代次數(shù)為:8操作完成請輸入你選擇的迭代方式:輸入1選擇 雅可比迭代法輸入2選擇 高斯-賽徳爾法輸入3選擇sor法輸入0結(jié)束程序3你選擇了 sor法請輸入方程組個數(shù)n: 3請按示例方式輸入方程組5 2 1 -12-1 4 2 202

5、-3 10 3方稈組輸入完成,請輸入迭代初始值0 0 0請輸入精度(無窮范數(shù)):0.0001系統(tǒng)自動匹配最住w值,請輸入1自行輸入w值,請輸入2請輸入sor法的w:0.9結(jié)果為-4. 000026 2. 999988 2. 000004 迭代次數(shù)為:8操作完成請輸入你選擇的迭代方式: 輸入1選擇雅町比迭代法 輸入2選擇 高斯-賽徳爾法 輸入3選擇sor法編入0結(jié)束程序該程序在使用過程中對用戶進行引導(dǎo),用戶可自行選擇方法,并輸入方程組,程序為用戶提 供解答,并給出迭代次數(shù)。如圖所示,其中高斯賽德爾法輸入了課本第六章的例題中1.2式,而sor法則是課本第六章 習(xí)題的第八題,并且還發(fā)現(xiàn)課本第八題的答

6、案有誤,經(jīng)我人工檢驗后,上述程序中的解才是 正確答案。在下面附錄上另附代碼。反思:該程序并沒有直接檢驗迭代的收斂性,而只是在迭代次數(shù)過多的情況下而未結(jié)朿的情 況下判斷其不收斂,缺少嚴謹性,可以在迭代性的收斂證明上繼續(xù)改進。而sor法的最佳w值也僅僅只是確保到達所需精度的迭代次數(shù)為次數(shù)為最小,而非 真正意義上迭代速度最快的wc即僅僅只是保證次數(shù)最小的一個可行w值。另外由于吋間原因和技術(shù)上的不足,無法做出更具有用戶體驗的界面,原意是做成類 似小程序或是網(wǎng)頁等可視化形式而非dos命令行界面,在用戶體驗上可以繼續(xù)改進。附錄實現(xiàn)代碼如下,為.cpp文件,可在編譯器上編譯后直接使用:#incl ude&l

7、t;stdio.h>double absolutefdouble a)訐(avo) return -a;else return a;void jacobi(double a101,double x,double bjnt n,double q)int i,j;double oldx100;/x(k)double newx100;/x(k+l)for (i=0;ivn;i+)oldxi=xi; 賦予初始值double maxdeta=0;for (i=0;ivn;i+)n ewxi=bi;for (j=o;j<n;j+)if (冋newxi=newxi-aij*oldxo;/求 x(

8、l)newxi=newxi/aii;/printf("%lf new 刈 i);if (maxdeta<absolute( newxio ldxi) maxdeta=absolute (n ewxi-oldxi);int count=l;迭代過程,直到滿足精度要求或迭代次數(shù)過多結(jié)束while (maxdeta>q && count<100)maxdeta=o;for (i=0;ivn;i+)oldxi=newxi;for (i=0;ivn;i+)ne wxi=bi;for (j=o;j<n;j+)if(jh) newxi=newxi-aij*o

9、ldxj;newxi=newxi/aii;if (maxdetaobsolute (n ewxi-oldxi) maxdeta=absolute (n ewxi-oldxi);coun t+;迭代完成,給出結(jié)果if (count!=100)printfc'結(jié)果為:n“);for (i=0;ivn;i+)printf("%lf "znewxi);printf(”迭代次數(shù)為:%dn",count);else printf不收斂的結(jié)果,請輸入具有收斂性的方程組n“);高斯賽德爾void gauss(double a101,double x,double b,in

10、t n,double q)int i,j;double oldx100;double newx 100;for (i=0;ivn;i+)oldxi=xi;double maxdeta=0; for (i=0;ivn;i+)n ewxi=bi; for (j=o;j<n;j+)for (j=o;j<i;j+) newxi=newxi-aij*newxj;for (j=i+l;j<n;j+)newxi=newxi-aij*oldxo; newxi=newxi/aii;/printf(h%lf new 刈 i);if (maxdetaobsolute (n ewxi 卜 o ldx

11、i) maxdeta=absolute (n ewxi-oldxi);int count=l;while (maxdeta>q && count<100)maxdeta=0;for (i=0;ivn;i+)oldxi二 n ewxi;for (i=0;ivn;i+)n ewxi=bi;for (j=o;j<n;j+)for (j=o;j<i;j+) newxi=newxi-aij*newxj;for (j=i+l;j<n;j+)newxi=newxi-aij*oldxj;newxi=newxi/aii;訐(maxdetavabsolute (n e

12、wxi 卜 o ldxi) maxdeta=absolute (n ewxio ldxi); count+;訐(count!=100)printf(“結(jié)果為:n“);for (i=0;ivn;i+)printf("%lf "znewxi);printf(”迭代次數(shù)為:%dn"zcount);else printff1不收斂的結(jié)果,請輸入具有收斂性的方程組n“);/sorvoid sor(double a101,double x,double b,int n,double q,double w) int i,j;double oldx100;double newx

13、100;for (i=0;i<n;i+)oldxi=xi;double maxdeta=0;for (i=0;ivn;i+)n ewxi=bi;for (j=o;j<n;j+)for (j=o;j<i;j+) newxi=newxi-aij*newxj;for (j=i;j<n;j+) newxi=newxi-aij*oldxj;newxi=oldxi+newxi/aii*w;/printf(h%lf newxdj);if (maxdetaobsolute (n ewxi-oldxi)maxdeta=absolute (n ewxio ldxi);int count=l

14、;while (maxdeta>q && count<100)maxdeta=0;for (i=0;ivn;i+)oldxi二 n ewxi;for (i=0;ivn;i+)n ewxi=bi;for (j=o;j<n;j+)for (j=o;j<i;j卄) newxi=newxi-aij*newxj;for (j=i;j<n;j+) newxi=newxi-aij*oldxj; newxi=oldxi+w*newxi/aii;if (maxdetaobsolute (n ewxi 卜 o ldxi)maxdeta=absolute (n ewxi

15、-oldxi);count+;if (count!=100)printf(”結(jié)果為:n“);for (i=0;ivn;i+) printf("%lf “,newxi);printf("迭代次數(shù)為:%drf,count);else printf(“不收斂的結(jié)果,請輸入具有收斂性的方程組卍);口行匹配w的sor法void search_sor(double a101,double x,double b,int n,double q)double w,bestx101zbestw;int countmin=1000000;for (w=0.001;w<2;w=w+0.001

16、) int i,j;double oldx100;double newx100;for (i=0;ivn;i+)oldxi=xi;double maxdeta=0;for (i=0;ivn;i+)n ewxi=bi;for (j=o;j<n;j+)for (j=o;j<i;j+) newxi=newxi-aij*newxj;for (j=i;j<n;j+)newxi=newxi-aij*oldxo;newxi=oldxi+newxi/aii*w;/printf("%lf ",newxi);訐(maxdetavabsolute (n ewxi-oldxi)m

17、axdeta=absolute (n ewxio ldxi);int count=l;while (maxdeta>q && count<100)maxdeta=0;for (i=o;ivn;i+)oldxi二 n ewxi;for (i=0;ivn;i+)n ewxi=bi;for (j=o;j<n;j+)for (j=o;j<i;j+) newxi=newxi-aij*newxj;for (j=i;j<n;j+) newxi=newxi-aij*oldxj;newxi=oldxi+w*new xi/aii;if (maxdetaobsolute

18、 (n ewxi-oldxi) maxdeta=absolute (n ewxi-oldxi);coun t+;訐(count!=100)if (count<co untmin)coun tmin=count;for (j=0;ivn;i+) bestxi=n ewxi;bestw=w;printf("匹配到最佳的w值為:lf心bestw); printff'解為:n“);for (int i=0;ivn;i+)printf("%lf “,best 刈 i);printf("n 迭代次數(shù)為:%dn':countmin);int main()d

19、ouble a101101,b101,q,x0101;int njjjlag;printff printf(" printf(h printf(h程序樣式* *nh);* *n");* 方程組迭代法求解程序*nh);printfcw);* *nh);printf("printf(h對于形如:5*xl+3*x2=7n");printf("8*xl+2*x2=3nh);printfc請按 5 3 7nn);printff 8 2 3nn);printf(啲形式輸入方程組,主對角線上元素須不為0nn);printfcnm);printfc請輸入你選擇

20、的迭代方式:n輸入1選擇 雅可比迭代法n輸入2選擇高斯賽 徳爾法n輸入3選擇sor法n”);while (scanf("%d蔦&flag)!二eof && flag!=0)if (flag=l)printf("你選擇了雅可比法n“);else if (flag=2)printf(”你選擇了高斯賽德爾法n“);else if (flag=3)printtf1 你選擇了 sor 法,f);else printf(“非合法輸入,請重新輸入n“);continue;printff'請輸入方程組個數(shù)n:");scanf(”d“,&n);pri

溫馨提示

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

評論

0/150

提交評論