【线性代数|C++】克拉默法则

【线性代数|C++】克拉默法则设含有 nnn 个未知数 x1x2 xnx1 x2 xn 的 nnn 个线性方程的方程组 a11x1a12x2 a1nxnb1a21x1 a2nxnb2 an1x1an2x2 annxnb

大家好,欢迎来到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=
    a11an1a1nann
    =
    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=
    a11an1a1,j1an,j1b1bna1,j+1an,j+1a1nann
    .

二、定理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+x25x3+x4=8x13x26x4=92x2x3+2x4=5x1+4x27x3+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

(0)
上一篇 2025-02-25 15:33
下一篇 2025-02-25 15:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信