c++列主元高斯消去法
时间: 2023-11-18 08:53:47 浏览: 97
gauss.zip_列主元gauss
C++列主元高斯消去法是一种求解多元一次方程组的方法。它的基本思想是通过消元和回代的方式,将方程组化为上三角矩阵,然后通过回代求解方程组的根。列主元素消去法是为控制舍入误差而提出来的一种算法,计算基本上能控制舍入误差的影响。在进行第 k(k=1,2,...,n-1)步消元时,从第k列的 akk及其以下的各元素中选取绝对值最大的元素,然后通过行变换将它交换到主元素akk的位置上,再进行消元。这样可以保证每一步消元时主元素的绝对值最大,从而减小舍入误差的影响。
下面是C++列主元高斯消去法的代码实现:
```
#include <iostream>
#include <cmath>
using namespace std;
const int MAXN = 100;
const double eps = 1e-6;
double a[MAXN][MAXN], b[MAXN];
int n;
void Gauss() {
for (int k = 1; k <= n; k++) {
int p = k;
for (int i = k + 1; i <= n; i++) {
if (fabs(a[i][k]) > fabs(a[p][k])) {
p = i;
}
}
if (fabs(a[p][k]) < eps) {
cout << "No unique solution" << endl;
return;
}
if (p != k) {
swap(a[p], a[k]);
swap(b[p], b[k]);
}
for (int i = k + 1; i <= n; i++) {
double f = a[i][k] / a[k][k];
for (int j = k + 1; j <= n; j++) {
a[i][j] -= f * a[k][j]; }
b[i] -= f * b[k];
}
}
for (int i = n; i >= 1; i--) {
for (int j = i + 1; j <= n; j++) {
b[i] -= a[i][j] * b[j];
}
b[i] /= a[i][i];
}
for (int i = 1; i <= n; i++) {
cout << "x" << i << " = " << b[i] << endl;
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
cin >> b[i];
}
Gauss();
return 0;
}
```
阅读全文