高斯赛德尔迭代法c++实现,详细代码
时间: 2024-10-28 11:12:18 浏览: 33
高斯-塞德尔迭代法是一种用于求解线性方程组的数值算法,通常应用于大型稀疏矩阵的情况。下面是一个简单的C++实现,假设我们有一个二阶方程组Ax = b,其中A是系数矩阵,b是常数向量:
```cpp
#include <iostream>
#include <vector>
// 矩阵元素类型
using Real = double;
// 线性方程组的系数矩阵和常数项
std::vector<std::vector<Real>> A = {{4, -1}, {-1, 2}};
std::vector<Real> b = {6, 8};
// 高斯-塞德尔迭代函数
Real gauss_seidel(const std::vector<std::vector<Real>>& A, const std::vector<Real>& b, int iterations, Real tolerance) {
int n = A.size();
std::vector<Real> x(n, 0.0); // 初始猜测解
std::vector<Real> x_new(n, 0.0); // 新迭代结果
for (int iter = 0; iter < iterations && std::abs(x_new - x).max_element() > tolerance; ++iter) {
x_new = x;
for (int i = 0; i < n; ++i) {
double sum = 0.0;
if (i != 0)
sum += A[i][i - 1] * x_new[i - 1];
if (i != n - 1)
sum += A[i][i + 1] * x_new[i + 1];
x_new[i] = (b[i] - A[i][i] * x_new[i]) / (A[i][i] + sum);
}
x = x_new;
}
return x;
}
int main() {
int iterations = 100; // 迭代次数
Real tolerance = 1e-6; // 达到误差容忍度
std::vector<Real> solution = gauss_seidel(A, b, iterations, tolerance);
for (int i = 0; i < solution.size(); ++i)
std::cout << "x_" << i << " = " << solution[i] << "\n";
阅读全文