计算对角行列式C++
时间: 2023-12-13 20:05:37 浏览: 34
对于计算对角行列式,可以使用C++中的高斯消元法来实现。具体步骤如下:
1.定义一个二维数组来存储矩阵,同时定义一个一维数组来存储行列式的值。
2.使用高斯消元法将矩阵化为上三角矩阵,同时计算行列式的值。具体实现可以参考以下代码:
```c++
double det = 1.0;
for(int i = 0; i < n; i++) {
int k = i;
for(int j = i + 1; j < n; j++) {
if(fabs(a[j][i]) > fabs(a[k][i])) {
k = j;
}
}
if(k != i) {
for(int j = i; j < n; j++) {
swap(a[i][j], a[k][j]);
}
det = -det;
}
det *= a[i][i];
for(int j = i + 1; j < n; j++) {
double t = a[j][i] / a[i][i];
for(int k = i + 1; k < n; k++) {
a[j][k] -= t * a[i][k];
}
}
}
```
3.最后得到的行列式的值即为det。完整代码如下:
```c++
#include <iostream>
#include <cmath>
using namespace std;
const int N = 110;
double a[N][N];
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
cin >> a[i][j];
}
}
double det = 1.0;
for(int i = 0; i < n; i++) {
int k = i;
for(int j = i + 1; j < n; j++) {
if(fabs(a[j][i]) > fabs(a[k][i])) {
k = j;
}
}
if(k != i) {
for(int j = i; j < n; j++) {
swap(a[i][j], a[k][j]);
}
det = -det;
}
det *= a[i][i];
for(int j = i + 1; j < n; j++) {
double t = a[j][i] / a[i][i];
for(int k = i + 1; k < n; k++) {
a[j][k] -= t * a[i][k];
}
}
}
printf("%.0lf\n", det);
return 0;
}
```