這篇文章主要是用C語言實現高斯列主元消去法求解多元一次方程。
高斯列主元消去法
由于涉及到的數學公式太麻煩了,所以從網上找了一張圖片,介紹高斯消去法的,如下圖:
Gauss列主元素法
示例
假如現在有一個三元一次方程組,如下圖:
三元一次方程組
求解多元一次方程組可以分成三個步驟:
首先根據方程組構建增廣矩陣
其次對增廣矩陣經過行列式的初等變化變成上三角矩陣
最后從后往前回代求解。
構造增廣矩陣
系數矩陣就是將方程組的系數組成矩陣。
而增廣矩陣就是在系數矩陣的右邊添上一列,這一列是線性方程組的等號右邊的值。
下圖即為行列式的增廣矩陣:
增廣矩陣
組上三角矩陣
這里說的組上三角矩陣是指經過若干步初等變換,將矩陣左上角和右下角連線組成的對角線左下方的元素全部清零。
這個步驟主要涉及到主元以及初等變換兩個概念。
主元指在消去過程中起主導作用的元素,主元通常選擇絕對值最大的元素,用它做除法能夠減小舍入誤差的擴散,使得數值解比較可靠。
以下為行列式的初等變換:
換行變換:交換兩行(列)
倍法變換:將行列式的某一行(列)的所有元素同乘以數k
消法變換:把行列式的某一行(列)的所有元素乘以一個數k并加到另一行(列)的對應元素上
而下面的圖則是經過若干步初等變化組成的上三角矩陣:
迭代求解
在組成上三角矩陣之后,就可以從下往上依次回代求出方程的解了
C代碼
#include#include #defineMAX_MATRIX10 /** *@briefSwapRow進行行交換 *@paramm待計算的矩陣 *row待交行的行 *max_row待交換的另一行 *n矩陣行數 */ staticvoidSwapRow(doublem[][MAX_MATRIX],introw,intmax_row,intn){ doubleswap; for(intk=row;k<=?n;?k++)?{ ????swap?=?m[row][k]; ????m[row][k]?=?m[max_row][k]; ????m[max_row][k]?=?swap; ??} } /** ?*?@brief?組上三角矩陣 ?*?@param?m?待計算的矩陣 ?*????????n?矩陣行數 ?*/ static?void?SelectColE(double?m[][MAX_MATRIX],?int?n)?{ ??int?max_row_e?=?0;??//主元所在行 ??double?ratio?=?0;???//消元因數 ??for?(int?j?=?0;?j?fabs(m[max_row_e][j])){ max_row_e=i; } } if(max_row_e!=j){ SwapRow(m,j,max_row_e,n);//與最大主元所在行交換 } //消元 for(inti=j+1;i=0;i--){ for(intj=i+1;j 上述程序運行完成之后,終端輸出:2.000000,3.000000,1.000000
審核編輯:郭婷
-
C語言
+關注
關注
180文章
7614瀏覽量
137712
原文標題:C語言實現高斯消元解線性方程組
文章出處:【微信號:typedef,微信公眾號:typedef】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論