線性方程組的迭代求解java_第1頁(yè)
線性方程組的迭代求解java_第2頁(yè)
線性方程組的迭代求解java_第3頁(yè)
線性方程組的迭代求解java_第4頁(yè)
線性方程組的迭代求解java_第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í),其系數(shù)矩陣在計(jì)算過(guò)程中始終不變。它利用計(jì)算機(jī)運(yùn)算速度快、適合做重復(fù)性操作的特點(diǎn),讓計(jì)算機(jī)對(duì)一組指令(或一定步驟)進(jìn)行重復(fù)執(zhí)行。迭代法具有循環(huán)的計(jì)算方法,方法簡(jiǎn)單,適宜解大型稀疏矩陣方程組本文總結(jié)了解線性方程組的三個(gè)迭代法,Jacobi迭代法,Gauss-Seidel迭代法,SOR迭代法,并且介紹了軟件JAVA在這方面的應(yīng)用。關(guān)鍵詞:Jacobi迭代法;Gauss-Seidel迭代法;SOR迭代法;計(jì)算SOLUTION OF LINEAR EQUATIONS OF ITERATION WITH THE

2、 EXPERIMENTALABSTRACTIteration is a kind of method to solve questions by step-by-step approximation. When we are getting the solution of linear equations by using iteration, the coefficient matrix is always staying the same in computation process. Computer could operate fastly so that it is suitable

3、 for operating again and again. Iteration is easy to operate to solve the large matrix equations by using a calculate method called circulation. This summary understanding of linear equations three kind of iteration, Jacobi iteration, Gauss-Seidel iteration, successive over relaxation method ,and in

4、troduce modern software JAVA in this respect. Key words: Jacobi iteration; Gauss-Seidel iteration; Successive Over Relaxation method ; calculating目 錄 1 迭代法概述.1 1.1迭代法定義11.2迭代法基本原理12 迭代法解線性方程組.12.1雅克比(Jacobi)迭代法.12.2 高斯賽德?tīng)枺℅auss-Seidel)迭代法.42.3超松弛(SOR)迭代法.73 總結(jié).9參考文獻(xiàn).10附錄.11 1 迭代法概述迭代法也稱輾轉(zhuǎn)法,是一種逐次逼近方法

5、,在使用迭代法解方程組時(shí),其系數(shù)矩陣在計(jì)算過(guò)程中始終不變。它利用計(jì)算機(jī)運(yùn)算速度快、適合做重復(fù)性操作的特點(diǎn),讓計(jì)算機(jī)對(duì)一組指令(或一定步驟)進(jìn)行重復(fù)執(zhí)行,在每次執(zhí)行這組指令(或步驟)時(shí),都從變量的原值推出它的一個(gè)新值。迭代法具有循環(huán)的計(jì)算方法,方法簡(jiǎn)單,適宜解大型稀疏矩陣方程組,在用計(jì)算機(jī)計(jì)算時(shí)只需存儲(chǔ)A的非零元素(或可按一定公式形成系數(shù),這樣A就不需要存儲(chǔ)) 1。1.1 迭代法定義(1)對(duì)于給定的方程組,用式子 (1-1)逐步代入求近似解的方法稱為迭代法(或稱為一階定常迭代法,這里與B和k無(wú)關(guān))(2)如果存在(記作),稱此迭代法收斂,顯然就是方程組的解,否則稱此迭代法發(fā)散。1.2 迭代法基本定

6、理設(shè)有方程組,對(duì)于任意初始向量及任意f,解此方程組的迭代法(即)收斂的充要條件是.2 迭代法解線性方程組2.1 雅克比(Jacobi)迭代法 2.1.1 Jacobi迭代法的定義設(shè)有方程組 (),記作 (2-1) A為非奇異陣且。將A分裂為,其中,。將式(2-1)第i()個(gè)方程用去除再移項(xiàng),得到等價(jià)方程組 (), (2-2)簡(jiǎn)單記作 ,其中, 對(duì)方程組(2-2)應(yīng)用迭代法,得到(2-1)的迭代公式 (2-3)其中為第k次迭代向量,設(shè)已經(jīng)算出,由式(2-3)可計(jì)算下一次迭代向量。顯然迭代公式(2-3)的矩陣形式為 (2-4)其中稱為Jacobi方法迭代矩陣。2.1.2 JAVA程序?qū)崿F(xiàn)Jacob

7、i迭代法編寫(xiě)java程序用Jacobi迭代法解如下方程組:例1:實(shí)驗(yàn)結(jié)果如下圖所示(JAVA程序設(shè)計(jì)詳見(jiàn)附錄源程序1):2.2 Gauss-Seidel迭代法2.2.1 高斯賽德?tīng)枺℅auss-Seidel)迭代法的定義雅克比迭代法的優(yōu)點(diǎn)是公式簡(jiǎn)單,迭代矩陣容易計(jì)算。在每一步迭代時(shí),用 的全部分量求出的全部分量,因此稱為同步迭代法,計(jì)算時(shí)需保留兩個(gè)近似解和。 但在雅克比迭代過(guò)程中,對(duì)已經(jīng)計(jì)算出的信息未能充分利用,即在計(jì)算第i個(gè)分量時(shí),已經(jīng)計(jì)算出的最新分量沒(méi)有被利用。從直觀上看,在收斂的前提下,這些新的分量應(yīng)比舊的分量更好,更精確一些。因此,如果每計(jì)算出一個(gè)新的分量便立即用它取代對(duì)應(yīng)的舊分量進(jìn)行

8、迭代,可能收斂的速度更快,并且只需要儲(chǔ)存一個(gè)近似解向量即可。據(jù)此思想可構(gòu)造高斯賽德?tīng)枺℅auss-Seidel)迭代法,其迭代公式為 (i=1,2,n) (2-5) 也可以寫(xiě)成矩陣形式 仍將系數(shù)矩陣A分解為 則方程組變?yōu)?得 (2-6) 將最新分量代替為舊分量,得 即 于是有 (2-7)所以 因?yàn)楦咚官惖聽(tīng)柕ū妊趴吮鹊ㄊ諗靠?,這個(gè)結(jié)論在多數(shù)情況下是成立的,但也有相反的情況,即高斯賽德?tīng)柕ū妊趴吮鹊ㄊ諗柯踔吝€有雅克比迭代法收斂,高斯賽德?tīng)柕òl(fā)散的情形。2.2.2 JAVA程序?qū)崿F(xiàn)高斯賽德?tīng)枺℅auss-Seidel)迭代法編寫(xiě)java程序用Gauss-Seidel迭代法解

9、上述例1方程組:實(shí)驗(yàn)結(jié)果如下圖所示(JAVA程序設(shè)計(jì)詳見(jiàn)附錄源程序2):2.3 超松弛(SOR)迭代法2.3.1 超松弛(SOR)迭代法的定義超松弛迭代法(Successive Over Relaxation Method, SOR方法)是高斯賽德?tīng)柕ǖ囊环N改進(jìn),是解大型稀疏方程組的有效方法之一。設(shè)已知第k次迭代向量,及第k+1次迭代向量的前i-1個(gè)分量,(j=1,2,i-1),現(xiàn)在研究如何求向量的第i個(gè)分量。 首先,有高斯賽德?tīng)柕ㄇ蟪鲆粋€(gè)值,記為 (i=1,2,n) (2-8)再將第k次迭代向量的第i個(gè)分量與進(jìn)行加權(quán)平均,得,即: (2-9)于是的SOR迭代公式 (i=1,2,n)

10、或 (i=1,2,n) 當(dāng)=1時(shí),式即為高斯賽德?tīng)柕ǎ划?dāng)0<<1時(shí),式稱為低松弛方法,當(dāng)某些方程組用高斯賽德?tīng)柕ú皇諗繒r(shí),可以用低松弛方法獲得收斂;當(dāng)>1時(shí),式稱為超松弛方法,可以用來(lái)提高收斂速度。將式寫(xiě)成矩陣的形式,得: 即 (2-10) 于是得SOR迭代的矩陣表示 (2-11) 其中 2.3.2 JAVA程序?qū)崿F(xiàn)超松弛(SOR)迭代法編寫(xiě)java程序用SOR迭代法解上述例1方程組:實(shí)驗(yàn)結(jié)果如下圖所示(JAVA程序設(shè)計(jì)詳見(jiàn)附錄源程序3): 3 總結(jié)在數(shù)學(xué)課程的學(xué)習(xí)中,應(yīng)注重學(xué)生數(shù)學(xué)計(jì)算能力和應(yīng)用能力的培養(yǎng)。利用數(shù)學(xué)軟件來(lái)解決課程中的計(jì)算和作圖問(wèn)題,提高學(xué)習(xí)效率,加深

11、學(xué)習(xí)興趣。本次課程設(shè)計(jì)課題是關(guān)于我們本學(xué)期的課程數(shù)值分析中的迭代求解方程組內(nèi)容,在數(shù)值分析學(xué)習(xí)中主要使用MATLAB或是C+進(jìn)行迭代計(jì)算,從未使用過(guò)JAVA編程進(jìn)行迭代計(jì)算,這次課程設(shè)計(jì)對(duì)我來(lái)說(shuō)也是一項(xiàng)挑戰(zhàn)。編程過(guò)程其實(shí)也是一個(gè)學(xué)習(xí)的過(guò)程,加深了我對(duì)JAVA的認(rèn)識(shí),同時(shí)也更督促我在JAVA方面下工夫。在編寫(xiě)JAVA程序的過(guò)程中,遇到很多問(wèn)題,比如編寫(xiě)錯(cuò)誤,或是難以實(shí)現(xiàn)目的等。通過(guò)網(wǎng)上查找資料,求助同學(xué)幫助一起解決問(wèn)題。意識(shí)到自己很大的不足,進(jìn)步空間很大,需要多練習(xí)編程才能在JAVA學(xué)習(xí)中更進(jìn)一步。我們?cè)诶斫庹莆諗?shù)學(xué)理論知識(shí)的同時(shí),能借助現(xiàn)代軟件利用迭代法簡(jiǎn)單迅速地計(jì)算出繁雜的數(shù)學(xué)運(yùn)算結(jié)果,大大

12、提高了解題效率和學(xué)習(xí)效果。參考文獻(xiàn)1 印旻 王行言Java語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì)(第二版)北京:清華大學(xué)出版社,2012.52 李慶揚(yáng) 王能超數(shù)值分析(第四版)武漢:華中科技大學(xué)出版社,2006.73 奧特加J M數(shù)值分析M張麗君 張乃玲,譯北京:高等教育出版社,1983附錄源程序1:package .Test;import java.util.Scanner;public class Jacobi /* * 雅可比迭代法求線性方程組 */static double a; /矩陣A的值static double b; /矩陣B的值static double x; /現(xiàn)在矩陣X的值static

13、double x2; /以前矩陣X的值,以便計(jì)算精度static int n; /元數(shù)static double e; /精度public static void IT()int k=0;System.out.println("k x1 x2 x3");System.out.print(k+" ");for(int i=1;i<=n;i+)System.out.print(xi+" ");System.out.println("n");dok+;for(int i=1;i<=n;i+)x2i=xi; f

14、or(int i=1;i<=n;i+) xi=f_x(i); System.out.print(k+" "); for(int i=1;i<=n;i+) System.out.print(xi+" "); System.out.println("n");while(jisuan()>=e);public static double jisuan() /計(jì)算精度 double max=0.0;for(int i=1;i<=n;i+)double x3=Math.abs(xi-x2i);if(x3>max)

15、max=x3;return max;public static double f_x(int i)/算迭代式的值double x1=0.0;for(int j=1;j<=n;j+)if(j!=i) x1=x1+aij*x2j;double x2=(bi-x1)/aii;return x2;public static void Print_Jie()/輸出方程組的解System.out.print("方程組的解為:");for(int i=1;i<=n;i+)System.out.print("x"+i+" = "+xi);

16、public static void main(String args) Scanner as=new Scanner(System.in); System.out.println("輸入方程組的元數(shù):"); n=as.nextInt(); a=new doublen+1n+1; b=new doublen+1; x=new doublen+1; x2=new doublen+1; System.out.println("輸入方程組的系數(shù)矩陣a:"); for(int i=1;i<=n;i+) for(int j=1;j<=n;j+) aij

17、=as.nextDouble(); System.out.println("輸入方程組矩陣b:"); for(int i=1;i<=n;i+) bi=as.nextDouble(); System.out.println("輸入精度e:"); e=as.nextDouble(); IT(); Print_Jie();源程序2:import java.util.Scanner;public class Gauss_Seidel /* * 高斯-賽德?tīng)柕ㄇ缶€性方程組 */static double a;static double b;static

18、double x;static double x2;static int n;static double e;public static void IT()int k=0;System.out.println("k x1 x2 x3");System.out.print(k+" ");for(int i=1;i<=n;i+)System.out.print(xi+" ");System.out.println("n");dok+;for(int i=1;i<=n;i+)x2i=xi; for(int i

19、=1;i<=n;i+) xi=f_x(i); System.out.print(k+" "); for(int i=1;i<=n;i+) System.out.print(xi+" "); System.out.println("n");while(jisuan()>=e);public static double jisuan()double max=0.0;for(int i=1;i<=n;i+)double x3=Math.abs(xi-x2i);if(x3>max) max=x3;return m

20、ax;public static double f_x(int i)/算迭代式的值double x1=0.0;for(int j=1;j<=n;j+)if(j!=i) x1=x1+aij*xj;double x2=(bi-x1)/aii;return x2;public static void Print_Jie()/輸出方程組的解System.out.print("方程組的解為:");for(int i=1;i<=n;i+)System.out.print("x"+i+" = "+xi);public static vo

21、id main(String args) Scanner as=new Scanner(System.in); System.out.println("輸入方程組的元數(shù):"); n=as.nextInt(); a=new doublen+1n+1; b=new doublen+1; x=new doublen+1; x2=new doublen+1; System.out.println("輸入方程組的系數(shù)矩陣a:"); for(int i=1;i<=n;i+) for(int j=1;j<=n;j+) aij=as.nextDouble()

22、; System.out.println("輸入方程組矩陣b:"); for(int i=1;i<=n;i+) bi=as.nextDouble(); System.out.println("輸入精度e:"); e=as.nextDouble(); IT(); Print_Jie();源程序3:import java.util.Scanner;public class SOR /* * 高松弛迭代法求線性方程組 */static double a;static double b;static double x;static double x2;st

23、atic int n;static double e;public static void IT()int k=0;System.out.println("k x1 x2 x3");System.out.print(k+" ");for(int i=1;i<=n;i+)System.out.print(xi+" ");System.out.println("n");dok+;for(int i=1;i<=n;i+)x2i=xi; for(int i=1;i<=n;i+) xi=f_x(i); System.out.print(k+" "); for(int i=1;i<=n;i+) System.out.print(xi+" "); System.out.println("n");while(jisuan()>=e);public static double jisuan()double max=0.0;for(int i=1;i<=n;i+)double x3=Math.abs(xi-x2i);if(x3>max) max=x

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論