c++高斯消元法求解非齐次线性方程组
时间: 2023-08-31 13:04:58 浏览: 95
下面是使用C++实现高斯消元法求解非齐次线性方程组的代码:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
const int MAXN = 100;
const double eps = 1e-6;
int n; // 矩阵的行数
double a[MAXN][MAXN + 1]; // 矩阵增广矩阵
void gauss() {
for (int i = 1; i <= n; i++) {
int r = i;
for (int j = i + 1; j <= n; j++)
if (fabs(a[j][i]) > fabs(a[r][i]))
r = j;
if (fabs(a[r][i]) < eps)
continue;
if (r != i)
swap(a[r], a[i]);
for (int j = i + 1; j <= n + 1; j++)
a[i][j] /= a[i][i];
a[i][i] = 1;
for (int j = i + 1; j <= n; j++)
for (int k = i + 1; k <= n + 1; k++)
a[j][k] -= a[j][i] * a[i][k];
}
for (int i = n; i >= 1; i--)
for (int j = i + 1; j <= n; j++)
a[i][n + 1] -= a[i][j] * a[j][n + 1];
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n + 1; j++)
cin >> a[i][j];
gauss();
for (int i = 1; i <= n; i++)
printf("%.2f\n", a[i][n + 1]);
return 0;
}
```
其中,输入的第一行为矩阵的行数n,接下来的n行每行有n+1个数,代表矩阵的增广矩阵。输出为方程组的解。
具体的操作流程是:
1. 对于每一列,选取该列中绝对值最大的元素所在的行,将其与当前行交换位置。
2. 将该行的第一个元素变为1,同时将该行的其他元素除以该行的第一个元素。
3. 将该列下面的所有行都减去该行的倍数,使得该列的所有元素都变为0。
4. 重复以上操作,直到所有的列都处理完毕。
5. 倒序回带求解方程组的解。
需要注意的是,高斯消元法可能会出现无解或者有多组解的情况。这时需要根据具体的问题进行判断。
阅读全文