高斯消去法的迭代改善法 C++代码
时间: 2023-07-10 12:17:11 浏览: 144
以下是高斯消去法的迭代改善法的C++代码示例:
```c++
#include<iostream>
#include<cmath>
using namespace std;
const int N = 100; // 矩阵最大维数
const double eps = 1e-6; // 精度
double a[N][N], b[N], x[N]; // 系数矩阵a,常数列b,解x
int n; // 矩阵维数
// 判断方程组是否有唯一解
bool check() {
for(int i = 1; i <= n; i++) {
double t = 0;
for(int j = 1; j <= n; j++) {
if(i != j) t += fabs(a[i][j]);
}
if(fabs(a[i][i]) < t) return false;
}
return true;
}
// 高斯消元
void gauss() {
for(int i = 1; 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 = 1; j <= n; j++) swap(a[i][j], a[k][j]);
swap(b[i], b[k]);
}
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];
b[j] -= t * b[i];
}
}
}
// 迭代改善
void improve() {
for(int i = n; i >= 1; i--) {
for(int j = i + 1; j <= n; j++) b[i] -= a[i][j] * x[j];
x[i] = b[i] / a[i][i];
}
}
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];
}
if(!check()) {
puts("No unique solution");
return 0;
}
gauss();
improve();
// 输出解
for(int i = 1; i <= n; i++) printf("%.6lf ", x[i]);
puts("");
return 0;
}
```
在上述代码中,我们首先输入矩阵的维数和系数矩阵a以及常数列b,然后进行高斯消元求解。如果判断方程组无唯一解,则输出"No unique solution"。否则,我们进行迭代改善,最终输出解。
阅读全文