1 原理
- 把方程组(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++实现
//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;
}
- 引用文献:《工程数学 线性代数(第五版)》同济大学数学系编,高等教育出版社
- 以上为个人学习、练习的记录,如有错误,欢迎指正。