能否写一个矩阵求逆的c++程序
时间: 2023-12-03 19:44:11 浏览: 59
当矩阵为方阵时,可以通过以下程序求逆矩阵(使用高斯-约旦消元法):
```c++
#include <iostream>
#include <vector>
using namespace std;
typedef vector<double> vd;
typedef vector<vd> vvd;
// 高斯-约旦消元法求解逆矩阵
vvd invertMat(vvd mat) {
int n = mat.size();
vvd inv(n, vd(n));
for (int i = 0; i < n; i++) inv[i][i] = 1.0;
for (int i = 0; i < n; i++) {
double pivot = mat[i][i];
if (pivot == 0) return vvd(); // 矩阵不可逆
for (int j = 0; j < n; j++) {
mat[i][j] /= pivot;
inv[i][j] /= pivot;
}
for (int j = 0; j < n; j++) {
if (i == j) continue;
double coef = mat[j][i];
for (int k = 0; k < n; k++) {
mat[j][k] -= coef * mat[i][k];
inv[j][k] -= coef * inv[i][k];
}
}
}
return inv;
}
int main() {
vvd mat = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
vvd inv = invertMat(mat);
int n = inv.size();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << inv[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
其中,`vvd` 表示一个二维的 `vector`。这个程序会输出输入矩阵的逆矩阵。如果输入矩阵不可逆,则会输出一个空矩阵。
阅读全文