矩阵求逆 c++代码
时间: 2024-12-06 19:15:16 浏览: 28
在C++中,求矩阵的逆通常使用高斯消元法或LU分解法。以下是一个使用高斯消元法求矩阵逆的C++代码示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
typedef vector<vector<double>> Matrix;
// 函数用于打印矩阵
void printMatrix(const Matrix &A) {
for (const auto &row : A) {
for (const auto &elem : row) {
cout << elem << " ";
}
cout << endl;
}
}
// 函数用于交换两行
void swapRow(Matrix &A, int i, int j) {
swap(A[i], A[j]);
}
// 函数用于高斯消元法求矩阵的逆
Matrix matrixInverse(const Matrix &A) {
int n = A.size();
Matrix inv(A);
Matrix B(n, vector<double>(n, 0));
// 初始化单位矩阵
for (int i = 0; i < n; ++i) {
B[i][i] = 1;
}
// 高斯消元法
for (int i = 0; i < n; ++i) {
// 寻找主元
int pivot = i;
for (int j = i + 1; j < n; ++j) {
if (abs(inv[j][i]) > abs(inv[pivot][i])) {
pivot = j;
}
}
// 交换行
swapRow(inv, i, pivot);
swapRow(B, i, pivot);
// 归一化
double invPivot = 1.0 / inv[i][i];
for (int j = 0; j < n; ++j) {
inv[i][j] *= invPivot;
B[i][j] *= invPivot;
}
// 消去其他行的当前列
for (int j = 0; j < n; ++j) {
if (j != i) {
double factor = inv[j][i];
for (int k = 0; k < n; ++k) {
inv[j][k] -= factor * inv[i][k];
B[j][k] -= factor * B[i][k];
}
}
}
}
return B;
}
int main() {
Matrix A = {
{4, 7},
{2, 6}
};
cout << "原矩阵:" << endl;
printMatrix(A);
Matrix invA = matrixInverse(A);
cout << "逆矩阵:" << endl;
printMatrix(invA);
return 0;
}
```
这个代码首先定义了一个二维向量类型的别名 `Matrix`,然后实现了打印矩阵和交换两行的函数。接着,代码实现了 `matrixInverse` 函数,该函数使用高斯消元法求矩阵的逆。最后,在 `main` 函数中,定义了一个矩阵并计算其逆矩阵。
阅读全文