高斯列主元消去法0425121523_第1頁(yè)
高斯列主元消去法0425121523_第2頁(yè)
高斯列主元消去法0425121523_第3頁(yè)
高斯列主元消去法0425121523_第4頁(yè)
高斯列主元消去法0425121523_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)值分析大作業(yè)(高斯列主元消去法求解線性方程組)課程名稱(chēng):數(shù)值分析授課老師:宋國(guó)鄉(xiāng)指導(dǎo)導(dǎo)師:丁振國(guó)學(xué) 生:王偉偉學(xué) 號(hào):0425121523日 期:2004/11/20高斯列主元消去法解線性方程組一:?jiǎn)栴}的提出 我們都知道,高斯列主元素消去法是計(jì)算機(jī)上常用來(lái)求解線性方程組的一種直接的方法。就是在不考慮舍入誤差的情況下,經(jīng)過(guò)有限步的四則運(yùn)算可以得到線性方程組的準(zhǔn)確解的一類(lèi)方法。實(shí)際運(yùn)算的時(shí)候因?yàn)橹荒苡邢扌?shù)去計(jì)算,因此只能得到近似值。在實(shí)際運(yùn)算的時(shí)候,我們很多時(shí)候也常用高斯消去法。但是高斯消去法在計(jì)算機(jī)中運(yùn)算的時(shí)候常會(huì)碰到兩個(gè)問(wèn)題。1 一旦遇到某個(gè)主元等于0,消元過(guò)程便無(wú)法進(jìn)行下去。2在長(zhǎng)期使用

2、中還發(fā)現(xiàn),即使消元過(guò)程能進(jìn)行下去,但是當(dāng)某個(gè)主元的絕對(duì)值很小時(shí),求解出的結(jié)果與真實(shí)結(jié)果相差甚遠(yuǎn)。為了避免高斯消去法消元過(guò)程中出現(xiàn)的上述兩個(gè)問(wèn)題,一般采用所謂的選擇主元法。其中又可以分為列選主元和全面選主元兩種方法。目前計(jì)算機(jī)上常用的按列選主元的方法。因此我在這里做的也是列選主元高斯消去法。二、算法的基本思想大家知道,如果一個(gè)線性方程組的系數(shù)矩陣是上三角矩陣時(shí),即這種方程組我們稱(chēng)之為上三角方程組,它是很容易求解的。我們只要把方程組的最下面的一個(gè)方程求解出來(lái),在把求得的解帶入倒數(shù)第二個(gè)方程,求出第二個(gè)解,依次往上回代求解。然而,現(xiàn)實(shí)中大多數(shù)線性方程組都不是上面所說(shuō)的上三角方程組,所以我們有可以把不

3、是上三角的方程通過(guò)一定的算法化成上三角方程組,由此我們可以很方便地求出方程組的解。高斯消元法的目的就是把一般線性方程組簡(jiǎn)化成上三角方程組。于是高斯消元法的基本思想是:通過(guò)逐次消元將所給的線性方程組化為上三角形方程組,繼而通過(guò)回代過(guò)程求解線性方程組。三、算法的描述1、設(shè)有n元線性方程組如下:2、第一步:如果a11!=0, 令li1= ai1/a11, I= 2,3,n用(-li1)乘第一個(gè)方程加到第i個(gè)方程上,得同解方程組:a(1)11 a(1)12 . . . a(1)1n x1 b(1)1a(1)21 a(1)22 . . . a(1)2n x2 b(1)2 . . . . . . . =

4、.a(1)n-11 a(1)n-12 . . a(1)n-1n xn-1 b(1)n-1a(1)n1 a(1)n2 . . . a(1)nn xn b(1)n簡(jiǎn)記為: A(2) x = b(2)其中 a(2)ij = a(1)ij li1 * a(1)1j , I ,j = 2,3,.,n b(2)I = b(1)I li1 * b(1)1 , I = 2,3,.,n第二步:如果a(2)22 != 0,令li2= a(2)i2/a(2)22, I= 3,n依據(jù)同樣的原理,對(duì)矩陣進(jìn)行化間(省略),依次下去,直到完成!最后,得到上三角方程組: a(1)11 a(1)12 . . . a(1)1n

5、x1 b(1)10 a(1)22 . . . a(1)2n x2 b(1)2 . . . . . . . = .0 0 . . a(n-1)n-1n xn-1 b(n-1)n-10 0 . . . a(n)nn xn b(n)n簡(jiǎn)記為: A(n) x = b(n)最后從方程組的最后一個(gè)方程進(jìn)行回代求解為: Xn = b(n) / a(n)nn Xi = ( b(k)k - a(k)kjxj ) / a(k)kk以上為高斯消去法的基本過(guò)程。但是如前面我們所提到的,存在的問(wèn)題。1.一旦遇到某個(gè)主元等于0,消元過(guò)程便無(wú)法進(jìn)行下去。2在長(zhǎng)期使用中還發(fā)現(xiàn),即使消元過(guò)程能進(jìn)行下去,但是當(dāng)某個(gè)主元的絕對(duì)值很

6、小時(shí),求解出的結(jié)果與真實(shí)結(jié)果相差甚遠(yuǎn)。為了避免高斯消去法消元過(guò)程中出現(xiàn)的上述兩個(gè)問(wèn)題,一般采用所謂的選擇主元法。其中又可以分為列選主元和全面選主元兩種方法。目前計(jì)算機(jī)上常用的按列選主元的方法。因此我在這里做的也是列選主元高斯消去法。他的特點(diǎn)是:每次在系數(shù)矩陣中依次按列在主對(duì)角線及以下的元素中,選取絕對(duì)值最大的元素作為主元,將她調(diào)到主對(duì)角線上,然后用它消去主對(duì)角線以下的元素,最后化為同解的上三角形方程組去求解。由于列主元法相對(duì)高斯消元法來(lái)說(shuō)就增加了選主元操作,其他的求解步驟是一樣的。四、程序流程圖 五、程序描述程序的名稱(chēng)為:zealous.cpp1. 程序的結(jié)構(gòu)如下:程序只能最大輸入60行60列

7、的系數(shù)矩陣。2.程序要用到的函數(shù)(1、)matrix_getElement(array,n,m);此函數(shù)的作用是獲得用戶(hù)輸入的線性方程組的系數(shù)矩陣。(2、)matrix_outputElement(array,n,m);此函數(shù)的作用是顯示用戶(hù)輸入的矩陣。(3、)selectMaxElement(array,n,m,row );此函數(shù)的作用是選擇主元素,并把此時(shí)對(duì)角線上的那列元素與主元素行交換。(4、)GAUSSProcess(array, n, m, row);此函數(shù)的作用是用主元素列進(jìn)行高斯消元,把此行以后所有的行的,此列的元素變?yōu)?。(5、)GAUSSProcess_result(arra

8、y, n,m);此函數(shù)的作用是顯示經(jīng)過(guò)高斯消元后的矩陣,此時(shí)的系數(shù)矩陣為一個(gè)上下三角矩陣。(6、)GAUSSCalculate_result(array, n, m);此函數(shù)的作用是對(duì)已經(jīng)消元好的矩陣,進(jìn)行回代求解。并將結(jié)果輸出。六、程序代碼/-*高斯列消去法*#include<stdio.h>#include<math.h>#include<iostream.h>#include <iomanip.h>const int N=60;/最大const int M=61;/60列,再加上等號(hào)右邊的一列值/-輸入要計(jì)算方程組的矩陣-void matr

9、ix_getElement(double ARRAYNM,int n, int m) for(int i=0;i<n;i+)cout<<"請(qǐng)您輸入第"<<"t"<<(i+1)<<"t"<<"row:"<<endl;for(int j=0;j<m;j+)cin>>ARRAYij;return;/-/-輸出用戶(hù)剛才用戶(hù)輸入的矩陣,以便用戶(hù)檢測(cè)是否輸入正確void matrix_outputElement(double ARR

10、AYNM, int n, int m)cout<<"your have input the matrix as fllows:n"for(int i=0; i<n;i+)for(int j=0;j<m;j+)cout<<ARRAYij<< "t"<< "t"cout<<endl<<endl;/-/-選擇主元素,并把主元行與對(duì)角線上的那一行交換void selectMaxElement(double ARRAYNM,int n, int m, int l

11、ine )double max=0;double t=0;int j=0;int i=line;max=ARRAYlineline;for(i=line+1;i<n;i+)if( fabs(ARRAYiline) > fabs(max) )max=ARRAYiline;j=i;if(j>line)for(i=0;i<m;i+)t=ARRAYji;ARRAYji=ARRAYlinei;ARRAYlinei=t;/-/-用對(duì)角線上的元素消去后續(xù)行中此列的元素void GAUSSProcess(double ARRAYNM, int n, int m, int row) do

12、uble ROW1M; for(int t=0;t<(m-row);t+) ROW1t=ARRAYrowrow+t; for(int j=(row+1); j < n; j+) double ROW_CHANGEM; for(int r=0;r<(m-row);r+) double mainElement=ROW10; if( fabs(mainElement) < 1e-7) cout << "Single! press any key return.n" getchar(); return; ROW_CHANGEr=ROW1r*ARR

13、AYjrow/ROW10; for(int h=0; h<(m-row); h+) ARRAYjh+row = ARRAYjh+row-ROW_CHANGEh; /-/-用回代的方法求出線性方程組的解-void GAUSSCalculate_result(double ARRAYNM, int n, int m)double aN;an-1=ARRAYn-1m-1/ARRAYn-1n-1;for(int p=n-2; p>=0; p-)for(int q=n-1; q>p; q-)ARRAYpm-1=ARRAYpm-1 - ARRAYpq*aq;ap = ARRAYqm-1/

14、ARRAYpp;cout<<"-the final result as follows-:n"for(int e=0; e<n; e+)cout<< "x"<< e+1 << "=" << ae << endl;/-輸出經(jīng)過(guò)高斯消去法處理后得到的矩陣-void GAUSSProcess_result(double ARRAYNM, int n, int m)cout<<"您輸入的矩陣經(jīng)過(guò)高斯消去法處理后得到如下形式:n"for

15、(int i=0; i<n;i+)for(int j=0;j<m;j+)cout<<ARRAYij<<"t"<<"t"cout<<endl<<endl;/-/-main函數(shù)-void main() double arrayNM; cout<<"請(qǐng)輸入您要運(yùn)算的矩陣的大小!n" int n=0, m=0; cout<<"請(qǐng)輸入您要運(yùn)算的矩陣的行數(shù):" cin>>n; cout<<"請(qǐng)輸入您

16、要運(yùn)算的矩陣的列數(shù):" cin>>m; cout<<"您所輸入的行為:"<<n<<" "<<"您所輸入的列為:"<<m<<endl; matrix_getElement(array,n,m); /獲得矩陣的元素 matrix_outputElement(array,n,m); /顯示輸入的矩陣 for(int row=0; row<n; row+) /高斯消元法的主體 selectMaxElement(array,n,m,row ); GAUSSProcess(array, n, m, row); GAUSSProcess_result(array, n,m); /顯示消元后的矩陣 GAUSSCalculate_result(array,n,m); /回代求解并顯示解結(jié)果 cout << "This is the end!"/-七、實(shí)例本程序可以自己選擇在60個(gè)未知數(shù)的方程組,可以自己選擇線性方程組的行數(shù)和列數(shù)。例子如下:2x1x2 5x3x48;x1 3x2 6x49;2x2x3 2x45;x1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論