C++代码实现Jacobi迭代法

简介: C++代码实现Jacobi迭代法

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迭代法求解线性方程组。

相关文章
|
1月前
|
C++
使用C++代码实现栈
使用C++代码实现栈
|
1月前
|
存储 C++
使用C++代码实现哈夫曼树的构造
使用C++代码实现哈夫曼树的构造
|
4月前
|
数据可视化 编译器 程序员
【好一朵美丽的玫瑰花】(C++代码实现+EasyX图形化界面)
【好一朵美丽的玫瑰花】(C++代码实现+EasyX图形化界面)
36 0
|
5月前
|
存储 机器学习/深度学习 人工智能
图的存储及基本操作总结(邻接矩阵、邻接表)及C/C++代码实现
图的存储及基本操作总结(邻接矩阵、邻接表)及C/C++代码实现
501 0
|
10月前
|
存储 算法 数据可视化
关于B+树的介绍、用途和c++代码实现
关于B+树的介绍、用途和c++代码实现
十进制转二进制的方法 + 写代码实现[C/C++]
整数十进制转二进制转换方法 + 如何用代码实现为主要内容 方法1:除二取余法 十进制数除2得商取余法:对十进制进行除法运算,十进制除以2可以得到一个商和余数 方法2:按权相加法 ......
420 1
|
数据可视化 程序员 编译器
【好一朵美丽的玫瑰花】(C++代码实现+EasyX图形化界面)
以程序员的方式撒狗粮,专业浪漫,值得拥有!为您展示一朵迷人的七夕玫瑰花
360 0
【好一朵美丽的玫瑰花】(C++代码实现+EasyX图形化界面)
|
存储 算法 机器人
剑指 Offer(第 2 版)完整题解笔记 & C++代码实现(LeetCode版)
剑指 Offer(第 2 版)完整题解笔记 & C++代码实现(LeetCode版)
317 0
剑指 Offer(第 2 版)完整题解笔记 & C++代码实现(LeetCode版)
|
存储 缓存 人工智能
LeetCode 热题 HOT 100 完整题解笔记&知识点分类 C++代码实现
LeetCode 热题 HOT 100 完整题解笔记&知识点分类 C++代码实现
644 0
LeetCode 热题 HOT 100 完整题解笔记&知识点分类 C++代码实现
|
安全 数据安全/隐私保护 C++
【信息安全】RSA非对称加密算法原理(详解和C++代码实现)
【信息安全】RSA非对称加密算法原理(详解和C++代码实现)
8641 10
【信息安全】RSA非对称加密算法原理(详解和C++代码实现)