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