Jacobi迭代法是一种用于解线性方程组的迭代方法,通常用于对称正定矩阵。其基本原理是通过不断迭代更新解向量的每个分量直到满足一定的收敛条件。下面是一个简单的C++实现Jacobi迭代法的示例代码,用于解线性方程组Ax=b:
```cpp #include <iostream> #include <vector> #include <cmath> using namespace std; // 定义矩阵和向量类型 typedef vector<vector<double>> Matrix; typedef vector<double> Vector; // Jacobi迭代函数 Vector jacobiIteration(const Matrix& A, const Vector& b, int maxIterations, double tolerance) { int n = A.size(); Vector x(n, 0.0); // 初始化解向量 Vector x_new(n); // 用于存储每次迭代更新后的解向量 for (int iter = 0; iter < maxIterations; ++iter) { for (int i = 0; i < n; ++i) { double sum = 0.0; for (int j = 0; j < n; ++j) { if (j != i) { sum += A[i][j] * x[j]; } } x_new[i] = (b[i] - sum) / A[i][i]; } // 计算误差 double error = 0.0; for (int i = 0; i < n; ++i) { error += abs(x_new[i] - x[i]); } // 更新解向量 x = x_new; // 检查收敛条件 if (error < tolerance) { break; } } return x; } int main() { Matrix A = {{4, 1, 2}, {3, 5, 1}, {1, 1, 3}}; Vector b = {4, 7, 3}; int maxIterations = 1000; double tolerance = 1e-6; Vector solution = jacobiIteration(A, b, maxIterations, tolerance); cout << "Solution:" << endl; for (size_t i = 0; i < solution.size(); ++i) { cout << "x" << i << " = " << solution[i] << endl; } return 0; } ```
在这个示例中,我们实现了 `jacobiIteration` 函数来执行Jacobi迭代法。在 `main` 函数中,我们定义了一个示例线性方程组的系数矩阵A和右侧向量b,并设置了最大迭代次数和收敛容差。然后我们调用 `jacobiIteration` 函数来求解线性方程组,并输出解向量。
你可以根据需要修改系数矩阵A、右侧向量b、最大迭代次数和收敛容差,然后运行这个程序来使用Jacobi迭代法求解线性方程组。