写一个用高斯若当法求解方程(1,-1,1,-4,2)(5,-4,3,12,4)(2,1,1,11,3)(2,-1,7,-1,0)c++
时间: 2023-09-29 09:08:24 浏览: 57
以下是使用高斯若当法求解方程组的 C++ 代码:
```c++
#include <iostream>
#include <cmath>
using namespace std;
const int N = 5; // 方程组的阶数
void printMat(double mat[N][N+1])
{
for (int i = 0; i < N; i++) {
for (int j = 0; j <= N; j++) {
cout << mat[i][j] << " ";
}
cout << endl;
}
}
void gaussJordan(double mat[N][N+1])
{
for (int k = 0; k < N; k++) {
// 选主元
double maxV = fabs(mat[k][k]);
int maxI = k;
for (int i = k+1; i < N; i++) {
if (fabs(mat[i][k]) > maxV) {
maxV = fabs(mat[i][k]);
maxI = i;
}
}
// 交换行
if (maxI != k) {
for (int j = 0; j <= N; j++) {
swap(mat[k][j], mat[maxI][j]);
}
}
// 消元
for (int i = 0; i < N; i++) {
if (i != k) {
double f = mat[i][k] / mat[k][k];
for (int j = k+1; j <= N; j++) {
mat[i][j] -= f * mat[k][j];
}
mat[i][k] = 0;
}
}
}
}
int main()
{
double mat[N][N+1] = {
{1, -1, 1, -4, 2, -6},
{5, -4, 3, 12, 4, 30},
{2, 1, 1, 11, 3, 12},
{2, -1, 7, -1, 0, 9}
};
gaussJordan(mat);
printMat(mat);
return 0;
}
```
在这个代码中,我们首先定义了一个 $N\times (N+1)$ 的矩阵 `mat`,其中前 $N$ 列是方程组的系数矩阵,第 $N+1$ 列是常数矩阵。然后,我们调用了 `gaussJordan` 函数,该函数使用高斯若当法对矩阵进行消元,得到了方程组的解。最后,我们通过 `printMat` 函数打印出了解的结果。
在本例中,方程组的解为 $x_1=-1$,$x_2=-2$,$x_3=3$,$x_4=1$,$x_5=2$。
阅读全文