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

相关文章
|
11天前
|
C语言 C++ 开发者
深入探索C++:特性、代码实践及流程图解析
深入探索C++:特性、代码实践及流程图解析
|
2天前
|
安全 算法 程序员
探索C++的魅力:语言特性、编程实践及代码示例
C++是广泛应用的编程语言,尤其在系统级编程、应用开发、游戏和嵌入式系统中广泛使用。其主要特性包括:面向对象编程(封装、继承、多态),泛型编程(通过模板实现代码复用和类型安全),以及丰富的标准库和第三方库。在编程实践中,需注意内存管理、异常处理和性能优化。示例代码展示了面向对象和泛型编程,如类的继承和泛型函数的使用。C++的内存管理和库支持使其在解决复杂问题时具有高效和灵活性。
|
2天前
|
存储 算法 编译器
C++性能调优:从代码层面提升程序效率
本文探讨了C++程序性能调优的关键点:选择合适的数据结构和算法,例如用哈希表(如`std::unordered_map`)替换低效的数组或链表;减少不必要的内存分配和释放,利用智能指针和容器如`std::vector`自动管理内存;优化循环和条件语句,例如在循环外存储数组大小;利用编译器优化如`-O2`或`-O3`;以及使用性能分析工具如`gprof`、`callgrind`和`perf`识别并解决性能瓶颈。通过这些方法,可以有效提升C++程序的运行效率。
|
11天前
|
存储 安全 算法
【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)
【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)
27 0
|
11天前
|
算法 Linux 数据安全/隐私保护
【Linux | C++ 】生产者消费者模型(Linux系统下C++ 代码模拟实现)
【Linux | C++ 】生产者消费者模型(Linux系统下C++ 代码模拟实现)
16 0
|
11天前
|
C++
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
【C++】一文深入浅出带你参透库中的几种 [ 智能指针 ]及其背后实现原理(代码&图示)
|
11天前
|
C++ 数据格式
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
【C++】C++中的【文件IO流】使用指南 [手把手代码演示] & [小白秒懂]
|
11天前
|
编译器 C++
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
|
11天前
|
C++
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
|
11天前
|
Serverless C++ 容器
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】