大家好,欢迎来到IT知识分享网。
一、定义(克拉默法则)
- 设含有 n n n个未知数 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots ,x_n x1,x2,⋯,xn的 n n n个线性方程的方程组 { a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋯ ⋯ ⋯ a n 1 x 1 + a n 2 x 2 + ⋯ + a n n x n = b n , (1) \begin{cases} a_{11}x_1+a_{12}x_2+\cdots +a_{1n}x_n=b_1 \\ a_{21}x_1+a_{22}x_2+\cdots +a_{2n}x_n=b_2 \\ \cdots \cdots \cdots \\ a_{n1}x_1+a_{n2}x_2+\cdots +a_{nn}x_n=b_n\end{cases}\tag{1} , ⎩
⎨
⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋯⋯⋯an1x1+an2x2+⋯+annxn=bn,(1)如果线性方程组(1)的系数行列式不等于零,即 D = ∣ a 11 ⋯ a 1 n ⋮ ⋮ a n 1 ⋯ a n n ∣ ≠ 0 , D=\begin{vmatrix}a_{11}&\cdots &a_{1n} \\ \vdots && \vdots \\a_{n1} & \cdots & a_{nn} \end{vmatrix} \neq 0, D=
a11⋮an1⋯⋯a1n⋮ann
=0,那么,方程组(1)有唯一解 x 1 = D 1 D , x 2 = D 2 D , ⋯ , x n = D n D , x_1=\frac{D_1}{D},x_2=\frac{D_2}{D},\cdots ,x_n=\frac{D_n}{D}, x1=DD1,x2=DD2,⋯,xn=DDn,其中 D j ( j = 1 , 2 , ⋯ , n ) D_j(j=1,2,\cdots ,n) Dj(j=1,2,⋯,n)是把系数行列式D中的第 j j j列的元素用方程组右端的常数项代替后所得到的 n n n阶行列式,即 D j = ∣ a 11 a 1 , j − 1 b 1 a 1 , j + 1 ⋯ a 1 n ⋮ ⋮ ⋮ ⋮ ⋮ a n 1 a n , j − 1 b n a n , j + 1 ⋯ a n n ∣ . D_j=\begin{vmatrix} a_{11}&a_{1,j-1}&b_1&a_{1,j+1}&\cdots & a_{1n} \\ \vdots & \vdots & \vdots &\vdots &&\vdots \\ a_{n1}&a_{n,j-1}&b_n & a_{n,j+1}&\cdots &a_{nn}\end{vmatrix}. Dj=
a11⋮an1a1,j−1⋮an,j−1b1⋮bna1,j+1⋮an,j+1⋯⋯a1n⋮ann
.
二、定理4
- 如果线性方程组(1)的系数行列式 D ≠ 0 D\neq 0 D=0,则(1)一定有解,且解是惟一的.
三、定理4’
- 如果线性方程组(1)无解或有两个不同的解,则它的系数行列式必为零.
四、定义(非齐次线性方程组、齐次线性方程组)
- 线性方程组(1)右端的常数项 b 1 , b 2 , ⋯ , b n b_1,b_2,\cdots ,b_n b1,b2,⋯,bn不全为零时,线性方程组(1)叫做非齐次线性方程组.
- 当 b 1 , b 2 , ⋯ , b n b_1,b_2,\cdots ,b_n b1,b2,⋯,bn全为零时,线性方程组(1)叫做齐次线性方程组.
五、定理5
- 如果齐次线性方程组(1)的系数行列式 D ≠ 0 D\neq 0 D=0,则齐次线性方程组(1)没有非零解.
六、定理5’
- 如果齐次线性方程组(1)有非零解,则它的系数行列式必为零.
七、C++代码实现
- 解线性方程组 { 2 x 1 + x 2 − 5 x 3 + x 4 = 8 x 1 − 3 x 2 − 6 x 4 = 9 2 x 2 − x 3 + 2 x 4 = − 5 x 1 + 4 x 2 − 7 x 3 + 6 x 4 = 0 \begin{cases}2x_1+\;\;x_2-5x_3+x_4=8\\ \;\; x_1-3x_2 \quad \quad \; -6x_4=9 \\ \quad \quad \;\;\; 2x_2-\;x_3+2x_4=-5\\ \;\;x_1+4x_2-7x_3+6x_4=0\end{cases} ⎩
⎨
⎧2x1+x2−5x3+x4=8x1−3x2−6x4=92x2−x3+2x4=−5x1+4x2−7x3+6x4=0
#include <iostream> #include <vector> #include <cmath> using namespace std; //行列式求值函数 int GetDetVal(const vector<vector<int>> &vvDetInput) {
int iDetVal; //行列式空白时,退出 if(0 == vvDetInput.size()) return 0; //当行列式仅有1个元素(阶数为1)时,该值就是行列式的值 if(1 == vvDetInput.size() && 1 == vvDetInput[0].size()) {
return vvDetInput[0][0]; } //当行列式元素阶数大于1时,将行列式按第1行展开 else {
//先求行列式的余子式 vector<vector<int>> vvCofactor(vvDetInput);//1.复制输入行列式 vvCofactor.erase(vvCofactor.cbegin());//2.删除第1行 for(unsigned int i = 0; i < vvCofactor[0].size(); i++)//3.逐列删除 {
for(unsigned int j = 0; j < vvCofactor.size(); j++) {
vvCofactor[j].erase(vvCofactor[j].cbegin() + i); } //对第1行各元素预期代数余子式的成绩进行累加,得到行列式的值。当行列式阶数大于1时,递归调用本函数 iDetVal += (vvDetInput[0][i] * pow(-1, i) * GetDetVal(vvCofactor)); vvCofactor.clear(); vvCofactor = vvDetInput; vvCofactor.erase(vvCofactor.cbegin());//2.删除第1行 } } return iDetVal; } //主函数 int main() {
//方程组系数行列式 vector<vector<int>> vvCoefficients{
{
2,1,-5,1}, {
1,-3,0,-6}, {
0,2,-1,2}, {
1,4,-7,6}}; //方程组常数项 vector<int> vConstants{
8,9,-5,0}; //克拉默法则中分母D的值 int D = GetDetVal(vvCoefficients); //求克拉默法则中分子的值,并代入公式求方程的解 for(unsigned int i = 0; i < vvCoefficients[0].size(); i++) {
vector<vector<int>> vvDet0(vvCoefficients); for(unsigned int j = 0; j < vvCoefficients.size(); j++) {
vvDet0[j][i] = vConstants[j]; } cout << "x" << i + 1 << " = " << GetDetVal(vvDet0) / D << endl; } return 0; }
引用文献:《工程数学 线性代数(第五版)》同济大学数学系编,高等教育出版社
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/154525.html