【线性代数 & 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} A−1存在.
  • 方程(2)可以变换为 A − 1 A x = E x = x = A − 1 b . (3) A^{-1}Ax=Ex=x=A^{-1}b\tag{3}. A−1Ax=Ex=x=A−1b.(3)
  • 即 x = A − 1 b . x=A^{-1}b. x=A−1b.

2 C++实现

cpp 复制代码
//test.cpp文件
#include <iostream>
#include <iomanip>
#include <vector>

#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. 以上为个人学习、练习的记录,如有错误,欢迎指正。
相关推荐
“愿你如星辰如月”1 分钟前
C++11核心特性全解析
开发语言·c++
广都--编程每日问8 分钟前
c++右键菜单统一转化文件为utf8编码
c++·windows·python
点云SLAM8 分钟前
C++包装器之类型擦除(Type Erasure)包装器之小对象优化(SBO, Small Buffer Optimization)示例(5)
c++·内存管理·c++高级应用·c++包装器·类型擦除包装器·内存小对象优化
simon_skywalker11 分钟前
线性代数及其应用习题答案(中文版)第一章 线性代数中的线性方程组 1.5 线性方程组的解集(1)
线性代数
curry____30317 分钟前
study in PTA(高精度算法与预处理)(2025.12.3)
数据结构·c++·算法·高精度算法
跨境摸鱼1 小时前
AI 赋能!亚马逊竞争情报的“重构式”升级,破解竞品迷局
人工智能·矩阵·重构·跨境电商·亚马逊·防关联
lijiatu100861 小时前
[C++] QTimer与Qt事件循环机制 实验探究
c++·qt
三月微暖寻春笋1 小时前
【和春笋一起学C++】(四十九)C++中string类的简介
c++·cstring·string类·string类的实现·string类方法
Bona Sun1 小时前
单片机手搓掌上游戏机(二十一)—pico运行doom之修改编译
c语言·c++·单片机·游戏机
松涛和鸣1 小时前
23、链式栈(LinkStack)的实现与多场景应用
linux·c语言·c++·嵌入式硬件·ubuntu