天天看點

c語言高斯法解方程,用C語言實作解線性方程組的高斯消去法

《用C語言實作解線性方程組的高斯消去法》由會員分享,可線上閱讀,更多相關《用C語言實作解線性方程組的高斯消去法(2頁珍藏版)》請在人人文庫網上搜尋。

1、數學學習與研究2009.7數學學習與研究2009.7 【摘要】 介紹了如何用C語言實作線性方程組的高斯 消去法的解法,其有效性已在Turbo C中得到了驗證. 【關鍵詞】 高斯消去法;C語言;線性方程組 在科學和工程計算中,應用最廣泛的是求解線性方程 組的解,而高斯消去法是求解線性方程組的最常用的方法 之一1,但其矩陣的計算量非常大,對于維數較少的矩陣可 以用手工計算而得,但對于多元的矩陣,用手工計算已經顯 得不可能.下面給出用C語言求解線性方程組的一種方法. 1.高斯消去法(Gauss Elimination)的解題思路 高斯消去法實質上分成兩部分:一是利用列運算将矩 陣A代成上三角矩陣;二。

2、是反代(Backward Substitution)來 求得所要的答案.矩陣的基本列運算規則為:(1)任一列均 可乘以一非零的常數;(2) 将任一列乘以一常數後加到其 他列;(3)可任意對調任兩列2. n維線性方程組常記為: a11x1+ a12x2+ a1nxn= d1 a21x1+ a22x2+ a2nxn= d2 an1x1+ an2x2+ annxn= dn ? ? ? ? ? ? ? ? ? ? ? (1) 用矩陣表示為: A X aijnnxin1din1(2) 例如: 2x1- 3x2+ 5x3= 10 圯 Row1 4x1+ 5x2+ 7x3= 20 圯 Row2 3x1- 6。

3、x2+ 9x3= 30 圯 Row 圯 3 (3) 經兩次列運算後: 4 2 (R1)(R2)R2 3 2 (R1)(R3)R3 得到: 2x1- 3x2+ 5x3= 10 圯 Row1 11x2-3x3= 0 圯 Row2 3 2 x2+ 3 2 x3= 15 圯 Row ? ? ? ? ? ? ? ? ? ? ? 3 (4) 再進行以下的列運算: 3 2 3 3 1 11 3 3(2)(R3) 可以得到: 2x1- 3x2+ 5x3= 10 圯 Row1 11x2-3x3= 0 圯 Row2 + 24 22 x3= 15 圯 Row ? ? ? ? ? ? ? ? ? ? ? 3 (5) 。

4、反代得到解答: Row 3:x3 15 24 22 2 3 (6) Row 2:x2 3 x3 11 (7) Row 1:x1 (5x3 3x2) 2 (8) 2.以三維矩陣為例找出計算機解題的思路 消去法的過程 a11a12a13 a21a22a23 a31a32a33 33 d1 d2 d3 33 (9) 第一步計算: - a21 a11 R1 + R2圯R2(10) - a31 a11 R1 + R3圯R3(11) 得到新的矩陣為: a11a12a13 0a22a23 0a32a33 33 d1 d2 d3 3 3 (12) 接着進行第二步的列運算: - a32 a22 R1 + R3圯。

5、R3(13) 得到新矩陣: a11a12a13 0a22a23 00a33 33 d1 d2 d3 3 3 (14) 反代: x3= d3 a33 (15) x2= d2 - a23x3 a22 (16) x1= d1- a13x3-a12x2 a11 (17) 3. n維線性方程式解的演算法 高斯消去法: (1) 由第一行開始至第n1行,j1,to n1; (2) 由第j1列至第n列,ij1 to n; (3) 由第一行至第n行,k1,n . aik= aik- aij ajj (18) di= di- bjaij ajj (19) 反代法: xn= bn ann (20) 由jn1至1 x。

6、j= bj(21) For kn to j1 xj= xj- ajkbk(22) xj= xj ajj (23) 4. n維線性方程式解的C程式範例 include stdioh 用 C 語言實作解線性方程組的高斯消去法 黃良斌 (南通紡織職業技術學院資訊系,江蘇 南通226007) R1 R2 R3 R1 R2 R3 R1 R2 R3 ZHUANTI YANJIU 專 題 研 究 104 數學學習與研究2009.7數學學習與研究2009.7 定存在,但lim (xx0) (x) f(x) g(x) 不存在時,lim (xx0) (x) f(x) g(x) 也可能存在.此 時,隻能說明洛必達法。

7、則失效,此種題型不能使用洛必達法則. 正解lim x x + sin x x = lim x 1+ sin x x xx=1+ lim x sin x x = 1. 3.連續使用洛必達法則時忽視逐漸檢驗 例7求lim x1 x3- 3x + 2 x3- x2- x + 1 . 錯解lim x1 x3- 3x + 2 x3- x2- x + 1 = lim x1 3x2- 3 3x3- 2x - 1 = lim x1 6x 6x -2 = lim x1 6 6 = 1. 分析此題在連續使用兩次洛必達法則後, 得到的式 子lim x1 6x 6x -2 已經不再是未定式,因而不能再連續使用洛必 達。

8、法則.應用洛必達法則求極限時必須每步都做檢查,一 旦發現不是定理要求的兩種未定式,就要停止使用,改用 其他方法求極限. 正解lim x1 x3- 3x + 2 x3- x2- x + 1 = lim x1 3x2- 3 3x3- 2x - 1 = lim x1 6x 6x -2 = 3 2 . 洛必達法則在極限理論中有着重要意義,應用洛必達 法則求極限,要想達到熟練準确,不僅要熟練掌握洛必達 法則的結論,還要特别注意法則的條件要求.總之,通過以 上例題的讨論使學生對法則有了更深入的了解, 進而提高 了學生應用洛必達法則解決問題的能力. 【參考文獻】 1 雒志江應用洛必達法則中常見問題分析J山西。

9、 大同大學學報,2008,24(5):1113 2 劉振忠,于曉秋高等數學M北京: 中國農業出 版社,2007(8) 3 同濟大學數學教研室高等數學第4版M北京: 高等教育出版社,2005 include stdlibh include mathh define dim 10 定義最大的維數10, 為防止計算值 溢出 double adim1dim1,bdim1,xdim1; 定 義雙精度數組 mprint(int,int,doubledim1,double); main() int n,i,j,k; double temp; printf(“請輸入方程的維數n”); scanf(“d”,n)。

10、; if(ndim)printf(“錯誤:元數超過初設定的值 dn”,dim); exit(0); printf(“開始輸入各元素的值:”); for(i1;in;i)for(j1;jn;j)printf (“請輸入元數ad,d”,i,j); scanf(“lf”,aij); printf(“請輸入常數bd”,i); scanf(“lf”,bi); mprint(n,n,a,b); 調用列印結果函數 *開始用高斯法計算* for(j1;j n1;j)for(ij1;in;i) tempaijajj; for(k1;kn;k) aik aik temp*ajk; bi bi tempbj; mp。

11、rint(n,n,a,b); 調用列印結果函數 *開始反代* xnbnann; for(jn1;j1;j)xjbj; for(kn;kj1;k) xj xjxkajk; xj xjajj; for(j1;jn;j)printf(“xd105en”,j,x j); *列印結果函數* mprint(int m,int n,double adim1dim1,double b dim1) int i,j; for(i1;im;i) for(j1;jn;j) printf(“105e”,aij); 按科學記數法顯示輸出 printf(“n”); 5.結束語 高斯消去法的計算量非常大,在實際使用中最好能借 助于計算機來運算,而對于10維以上的線性方程組來說, C語言中定義的雙精度數值可能也不能計算, 在計算速度 方面也有所欠缺, 故而要考慮用其他方法如: 疊代法、高 斯塞德爾疊代法等來求解. 【參考文獻】 1 楊先娣,滕沖,吳黎兵等用Matlab語言實作線性 方程組的全主元三角分解法 J數理醫藥學雜志,2001 (4):302303. 2 陳祖明主編矩陣論引論M北京:北京航空航天 大學出版社,1998(7). (接103頁) ZHUANTI YANJIU 專 題 研 究 105。