求解非齊次線性方程組演算法

2021-05-28 03:10:11 字數 2041 閱讀 6272

1.      非齊次線性方程組有解的條件

如下非齊次線性方程組:

由係數矩陣和常數列向量構成的增廣矩陣如下:

無解情況:

唯一解情況:

無窮解情況:

2.      高斯消元法求解

步驟:1)    消元法

通過矩陣的初等變換,將增廣矩陣變換為上三角矩陣

2)    回代法

採用回代法求解上三角矩陣對應的非齊次線性方程組,即從第n個方程開始求解,解出

然後再將解出之

注意到在消元和回代的過程中均需使用矩陣a的主對角線元素

3.     演算法實現

考慮簡單的情況,求解如下:

方程。c語言**:

/***

* 檔名稱:solutionlinearequation.cpp

* 摘要:列主元素高斯消元法解n元一次方程組

** 當前版本:1.0

* 完成日期:2023年9月10日**/

#include #include /*

* 功能:選取列主元素

* 輸入:a 係數矩陣a;

* b 常數列向量b;

* a_rows 係數矩陣a的行數;

* kst_row 待求的第k行列主元素

* 輸出:void

*/void columnprimaryelement(double a, double b, int a_rows, int kst_row)

// 如果第k列元素中絕對值最大的不是a[k,k],則交換兩個方程

if (main_line != kst_row)

temp = b[kst_row];

b[kst_row] = b[main_line];

b[main_line] = temp;

} }}/*

* 功能:列主元素高斯消元法解n元一次方程組

* 輸入:a 係數矩陣a;

* b 常數列向量b;

* a_rows 係數矩陣a的行數;

* 輸出:x 結果向量

*/void gauss_columnprimaryelement(double a, double b, int a_rows, double x)

b[i] = b[i] - b[k] * c;

} }// 有解條件判斷

// 係數矩陣a的秩等於a的維數n(即行數或者列數)

if (fabs(a[(a_rows - 1) * a_rows + (a_rows - 1)]) < 10e-6)

return;

} // 回代求解

for (i = a_rows -1; i >= 0; --i)

x[i] = x[i] / a[i * a_rows + i]; }}

void main()

, ,

, ,

}; double b[4] =

; double x[4];

int i = 0;

gauss_columnprimaryelement(a[0], b, 4, x);

printf("the result is x = \n");

for (i = 0; i < 4; ++i) }

// matlab測試

// a = [[0.2368, 0.2471, 0.2568, 1.2671];[0.1968, 0.2071, 1.2168, 0.2271];[0.1581, 1.1675, 0.1768, 0.1871];[1.1161, 0.1254, 0.1397, 0.1490]]

// b = [1.8471; 1.7471; 1.6471; 1.5471]

// a \ b

齊次線性方程組和非齊次線性方程組

定義齊次線性方程組 等式右側常數項全部為0 非齊次線性方程組 等式右側常數項不全部為0 2.齊次方程組的求解 將係數矩陣化為行階梯形矩陣,記全為0的行數量為r n r a 則非零行的首非零元所在列對應的就是約束變數,其餘變數即為自由變數。將後r個自由變數未知數,每次只有乙個取值為1 其餘為0 然後每...

齊次線性方程組和非齊次線性方程組

1 常數項不同 齊次線性方程組的常數項全部為零,非齊次方程組的常數項不全為零。2 表示式不同 齊次線性方程組表示式 ax 0 非齊次方程組程度常數項不全為零 ax b。齊次線性方程組求解步驟 1 對係數矩陣a進行初等行變換,將其化為行階梯形矩陣 2 若r a r n 未知量的個數 則原方程組僅有零解...

MATLAB求解非齊次線性方程組

根據線性代數中求解方程組的基本知識,首先應判斷係數矩陣的秩是否和增廣矩陣的秩相等,若不等,則無解 若有解,根據秩和未知量個數的關係,判斷是唯一解還是無窮多解 若為無窮多解,其通解為齊次方程組的通解加非齊次方程組的特解。求非齊次線性方程組ax b的特解,可直接使用命令a b,求解齊次線性方程組的通解,...