• 【线性代数 & C++】结合逆矩阵的克拉默法则


    1 原理

    对于 n n n个变量、 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)如果它的系数行列式 D ≠ 0 D\neq 0 D=0,则它有唯一解.

    • 把方程组(1)写成矩阵方程 A x = b , (2) Ax=b,\tag{2} Ax=b,(2) ∣ A ∣ ≠ 0 \begin{vmatrix}A \end{vmatrix} \neq 0 A =0,故 A − 1 A^{-1} A1存在.
    • 方程(2)可以变换为 A − 1 A x = E x = x = A − 1 b . (3) A^{-1}Ax=Ex=x=A^{-1}b\tag{3}. A1Ax=Ex=x=A1b.(3)
    • x = A − 1 b . x=A^{-1}b. x=A1b.

    2 C++实现

    //test.cpp文件
    #include 
    #include 
    #include 
    
    #include "CMatrix.h"
    
    using namespace std;
    
    bool PrintMat
    (
      const vector<vector<double>> &vvMat
    )
    {
      for (int i = 0; i < vvMat.size(); i++)
      {
        for (int j = 0; j < vvMat[i].size(); j++)
        {
          cout << setw(5) << vvMat[i][j];
        }
        cout << endl;
      }
      
      return true;
    }
    
    int main()
    {
        //系数阵
        vector<vector<double>> vvMatA{{ 2, 1,-5, 1},
                                      { 1,-3, 0,-6},
                                      { 0, 2,-1, 2},
                                      { 1, 4,-7, 6}};
        
        vector<vector<double>> vvMatb{{8}, {9},{-5}, {0}};//常数阵
        vector<vector<double>> vvMatTemp;//存储逆矩阵
        vector<vector<double>> vvMatRet;//存储方程解的矩阵
        
        //求逆矩阵
        if (false == CMatrix::GetInverseMat(vvMatA, vvMatTemp))
        {
            cout << "计算失败" << endl;
        }
        else
        {
            //逆矩阵与常数阵相乘
            if (false == CMatrix::MatMulti(vvMatTemp, vvMatb, vvMatRet))
            {
                cout << "计算失败" << endl;
            }
            else
            {
                PrintMat(vvMatRet);
            }
        } 
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    在这里插入图片描述

    • 两种计算方法结果一致。

    1. 引用文献:《工程数学 线性代数(第五版)》同济大学数学系编,高等教育出版社
    2. 以上为个人学习、练习的记录,如有错误,欢迎指正。
  • 相关阅读:
    idea+SpringBoot使用过程中的问题集合
    【干货】STM32通过ADC模拟看门狗实现掉电保存
    Docker 网络管理及资源控制
    二叉树的性质
    史上最全!Windows常见的几种权限维持
    HBase的简单学习二
    什么是NoSQL?随着这次训练就来学习一下
    「Flask」路由+视图函数
    【VIO】第3讲 基于滑动窗口算法的VIO
    如何在Google App Engine上构建一个简单的应用
  • 原文地址:https://blog.csdn.net/qq_26390449/article/details/138144055