高斯赛德尔迭代法c++
时间: 2023-07-04 11:28:09 浏览: 29
高斯赛德尔迭代法是一种求解线性方程组的迭代算法。下面是一个简单的 C++ 实现示例:
```c++
#include <iostream>
#include <cmath>
using namespace std;
const int N = 100; // 最大迭代次数
const double eps = 1e-10; // 精度
int n; // 方程组的未知数个数
double a[N][N], b[N]; // 系数矩阵和常数项
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j];
}
cin >> b[i];
}
double x[N] = {0}; // 初始解
int k = 0; // 迭代次数
while (k < N) {
double maxv = 0;
for (int i = 0; i < n; i++) {
double sum = b[i];
for (int j = 0; j < n; j++) {
if (i != j) {
sum -= a[i][j] * x[j];
}
}
double new_x = sum / a[i][i];
maxv = max(maxv, fabs(new_x - x[i]));
x[i] = new_x;
}
if (maxv < eps) break;
k++;
}
if (k == N) {
cout << "迭代失败" << endl;
} else {
cout << "迭代次数:" << k << endl;
for (int i = 0; i < n; i++) {
cout << "x[" << i << "] = " << x[i] << endl;
}
}
return 0;
}
```
输入格式为:
```
n
a[0][0] a[0][1] ... a[0][n-1] b[0]
a[1][0] a[1][1] ... a[1][n-1] b[1]
...
a[n-1][0] a[n-1][1] ... a[n-1][n-1] b[n-1]
```
其中 `n` 为未知数的个数,`a[i][j]` 和 `b[i]` 分别表示系数矩阵和常数项。输出格式为:
```
迭代次数:k
x[0] = ...
x[1] = ...
...
x[n-1] = ...
```
其中 `k` 表示迭代次数,`x[i]` 表示第 `i` 个未知数的解。如果迭代失败,则输出 `迭代失败`。