雅可比迭代方法 c++
时间: 2024-06-16 21:02:05 浏览: 132
雅可比迭代C++实现
4星 · 用户满意度95%
雅可比迭代法(Jacobi Iteration)是一种用于求解线性方程组的迭代算法,特别适用于对角占优矩阵的情况,因为它在每次迭代中只需要矩阵的对角元素。在C++中实现雅可比迭代法,首先你需要定义一个矩阵结构和迭代函数。
以下是一个简单的C++代码示例:
```cpp
#include <iostream>
#include <vector>
// 定义一个矩阵类
class Matrix {
public:
int n;
std::vector<std::vector<double>> data;
// 构造函数等
};
// 雅可比迭代函数
std::vector<double> jacobiIteration(const Matrix& A, const std::vector<double>& b, double tolerance, int maxIter) {
std::vector<double> x(A.n, 0.0); // 初始化猜测解
double prevError = 1e9; // 初始误差
for (int iter = 0; iter < maxIter; ++iter) {
double error = 0.0;
for (int i = 0; i < A.n; ++i) {
double sum = 0.0;
for (int j = 0; j < A.n; ++j) {
if (i != j)
sum += A.data[i][j] * x[j]; // 只考虑对角线外的元素
}
x[i] = (b[i] - sum) / A.data[i][i];
error += std::abs(x[i] - prevX[i]);
}
if (error < tolerance) {
break;
}
prevError = error;
prevX = x; // 保存上一步的解
}
return x;
}
int main() {
// 创建矩阵并初始化
Matrix A({4, 1, 0, 0}, {1, 5, 1, 0}, {0, 1, 6, 1}, {0, 0, 1, 9});
std::vector<double> b = {10, 20, 30, 40};
// 设置迭代参数
double tolerance = 1e-6;
int maxIter = 100;
auto solution = jacobiIteration(A, b, tolerance, maxIter);
// 打印结果并检查误差
return 0;
}
```
阅读全文