gauss-seidel迭代法c++语言
时间: 2023-04-30 18:01:52 浏览: 351
Gauss-Seidel迭代法是一种求解线性方程组的方法,它可以通过迭代来逐步逼近方程组的解。下面是一个用C++语言实现Gauss-Seidel迭代法的示例代码:
```c++
#include <iostream>
#include <cmath>
using namespace std;
const int MAXN = 100;
const double eps = 1e-6;
int n; // 矩阵的维数
double a[MAXN][MAXN], b[MAXN]; // 系数矩阵和常数向量
double x[MAXN]; // 解向量
void GaussSeidel() {
double norm = .;
do {
norm = .;
for (int i = ; i < n; i++) {
double tmp = x[i];
x[i] = b[i];
for (int j = ; j < n; j++) {
if (i != j) {
x[i] -= a[i][j] * x[j];
}
}
x[i] /= a[i][i];
norm = max(norm, fabs(x[i] - tmp));
}
} while (norm > eps);
}
int main() {
cin >> n;
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
cin >> a[i][j];
}
cin >> b[i];
}
GaussSeidel();
for (int i = ; i < n; i++) {
cout << x[i] << " ";
}
cout << endl;
return ;
}
```
在这个代码中,我们首先读入矩阵的维数和系数矩阵以及常数向量,然后调用GaussSeidel函数求解线性方程组。在GaussSeidel函数中,我们使用了一个do-while循环来进行迭代,直到解向量的变化量小于一个给定的精度eps为止。在每一次迭代中,我们对每个未知量使用Gauss-Seidel迭代公式进行更新,然后计算解向量的变化量norm。最后,我们输出求解得到的解向量。
需要注意的是,Gauss-Seidel迭代法只有在系数矩阵是对称正定的情况下才能保证收敛。如果系数矩阵不满足这个条件,可能会出现不收敛的情况。此外,Gauss-Seidel迭代法的收敛速度比较慢,因此在实际应用中可能需要使用其他更快的方法来求解线性方程组。
阅读全文