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,求解齊次線性方程組的通解,...