雅克比迭代,一般用来对线性方程组,进行求解。形如:
\(a_{11}*x_{1} + a_{12}*x_{2} + a_{13}*x_{3} = b_{1}\)  
\(a_{21}*x_{1} + a_{22}*x_{2} + a_{23}*x_{3} = b_{2}\)  
\(a_{31}*x_{1} + a_{32}*x_{2} + a_{33}*x_{3} = b_{3}\)  
我们需要求解出\(x_{1}\) ,\(x_{2}\) ,\(x_{3}\),我们对这组方程进行变换:
\(x_{1}=\frac{1}{a_{11}}(b_{1} -a_{12}*x_{2} -a_{13}*x_{3})\)
  \(x_{2}=\frac{1}{a_{21}}(b_{2} -a_{21}*x_{1} -a_{23}*x_{3})\)
\(x_{3}=\frac{1}{a_{31}}(b_{3} -a_{31}*x_{1}-a_{32}*x_{2})\)

我们不妨假设 \(x_{0}^{0}=(X_{1}^{0},X_{2}^{0},X_{3}^{0})\) ,当我们代入上述公式的时候,我们就会得到一组新的 \(x_{0}^{1}=(X_{1}^{1},X_{2}^{1},X_{3}^{1})\) ,此刻我们称之为一次迭代.
然后我们将得到的X1,X2,X3再次代入公式,我们将会得到第二次迭代, 当我们重复这种迭代的时候,我们会得到第K次迭代:
\(x^{k}=(X_{1}^{k},X_{2}^{k},X_{3}^{k})\) , \(k = 1,2,3...n\)
我们将其归纳成一般式子:

eg: 对于方程组:

求解:
我们先将其变形:

然后,我们假设:
并将其代入得到:

我们将得到的X1,x2,x3再次代入方程中,反复迭代,将会得到如下:

最终我们将会得到一个收敛值,该组值,就是我们得到的解(会非常的逼近真实解)

那么这种方法,也可以用来求解矩阵:
对于方程: Ax =b ; 我们设定 A矩阵为: ,b矩阵为: , x矩阵为:
到这里,每个人都有自己的解法,直接的解法是将 x = \(A^{-1}\)b,但是A的逆矩阵\(A^{-1}\),计算较为复杂,我们这里需要一点小的tricks ,我们将A矩阵拆分成为一个对角矩阵D,下三角矩阵L,上三角矩阵U,即

这样的话,公式 Ax = b 就变成了 ( D - L -U )
x = b ,然后我们就可以得到:
Dx = b + (L+U)x ,当我们得到这个公式的时候,求解D的逆矩阵就容易了很多,我们得到D的逆矩阵为:

然后,我们将D移到右边变成:

这个公式,和我们上面描述的雅克比迭代是不是长得很像,然后我们可以将其一般化为:

我们知道A是一个已知的常量矩阵,因而D,L,U都是已知矩阵,那么我们可以简化为:
\(T = D^{-1}*( L +U)\) , \(c = D^{-1}*b\) ;

根据这一个思想,我们可以得到一个伪代码:

实现代码为:

参考资料为:
https://www3.nd.edu/~zxu2/acms40390F12/Lec-7.3.pdf

雅克比迭代算法(Jacobi Iterative Methods) -- [ mpi , c++]的更多相关文章

  1. 多线性方程组迭代算法——Jacobi迭代算法的Python实现

    多线性方程(张量)组迭代算法的原理请看这里:若想看原理部分请留言,不方便公开分享 Gauss-Seidel迭代算法:多线性方程组迭代算法——Gauss-Seidel迭代算法的Python实现 impo ...

  2. 线性方程组迭代算法——Jacobi迭代算法的python实现

    原理: 请看本人博客:线性方程组的迭代求解算法——原理 代码: import numpy as np max=100#迭代次数上限 Delta=0.01 m=2#阶数:矩阵为2阶 n=3#维数:3X3 ...

  3. 多线性方程组迭代算法——Gauss-Seidel迭代算法的Python实现

    多线性方程组(张量)迭代算法的原理请看这里:原理部分请留言,不方便公开分享 Jacobi迭代算法里有详细注释:多线性方程组迭代算法——Jacobi迭代算法的Python实现 import numpy ...

  4. 软阈值迭代算法(ISTA)和快速软阈值迭代算法(FISTA)

    缺月挂疏桐,漏断人初静. 谁见幽人独往来,缥缈孤鸿影. 惊起却回头,有恨无人省. 拣尽寒枝不肯栖,寂寞沙洲冷.---- 苏轼 更多精彩内容请关注微信公众号 "优化与算法" ISTA ...

  5. c#迭代算法

    //用迭代算法算出第m个值 //1,1,2,3,5,8...;           //{1,0+1,1+1,1+2,2+3 ,3+5} static void Main(string[]   arg ...

  6. 【C/C++】求解线性方程组的雅克比迭代与高斯赛德尔迭代

    雅克比迭代: /* 方程组求解的迭代法: 雅克比迭代 */ #include<bits/stdc++.h> using namespace std; ][]; ]; void swapA( ...

  7. ICP算法(Iterative Closest Point迭代最近点算法)

    标签: 图像匹配ICP算法机器视觉 2015-12-01 21:09 2217人阅读 评论(0) 收藏 举报 分类: Computer Vision(27) 版权声明:本文为博主原创文章,未经博主允许 ...

  8. 【转】ICP算法(Iterative Closest Point迭代最近点算法)

    原文网址:https://www.cnblogs.com/sddai/p/6129437.html.转载主要方便随时可以查看,如有版权要求请及时联系. 最近在做点云匹配,需要用c++实现ICP算法,下 ...

  9. barnes-hut算法 && Fast Multipole Methods算法

    barnes-hut算法 http://arborjs.org/docs/barnes-hut Fast Multipole Methods算法 http://www.umiacs.umd.edu/~ ...

随机推荐

  1. img-html-2

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Scala-Unit-1-概述及安装

    一.Scala简介 官网:www.scala-lang.org Scala语言很强大,它集成了面对对象和函数式编程的特点,并且运行在JVM(Java Virtual Machine)上,即必须安装jd ...

  3. Codefoces Gym 101652 【最大连续和】

    <题目链接> 题目大意: 给你一段只由 'B'和'R'组成的字符串,问你在连续的区间内,"B"和"R"的差值最大是多少,输出该区间:如果对于差值相等 ...

  4. 数据结构--图 的JAVA实现(上)

    1,摘要: 本系列文章主要学习如何使用JAVA语言以邻接表的方式实现了数据结构---图(Graph),这是第一篇文章,学习如何用JAVA来表示图的顶点.从数据的表示方法来说,有二种表示图的方式:一种是 ...

  5. 在Eclipse中使用Junit进行单元测试

    单元测试与Junit4 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证.单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离 ...

  6. 146. 大小写转换 II

    146. Lowercase to Uppercase II Description Implement an upper method to convert all characters in a ...

  7. (Android系统目录结构)目录预览

    Android系统进入设备后,查看根目录下文件系统,如下: 重要目录和文件说明:mnt 挂载点目录etc 系统主要配置文件system Android 系统文件sys Linux 内核文件proc 运 ...

  8. ReactNative用指定的设备/模拟器运行项目

    命令行中React native项目目录下键入react-native run-ios会启动iOS模拟器, 默认是使用iPhone6,如果想要试用其他版本的模拟器则需要在react-native ru ...

  9. python数据类型内置方法 字符串和列表

    1.字符串 内置方法操作# a = 'qqssf'#1. print(a[-1:]) #按索引取,正向从0开始,反向从-1开始# print(len(a)) #取长度# a = 'qqssf'# 2. ...

  10. 关于在ViewPager的子页面中不能跳转的问题

    关于在ViewPager的子页面中不能跳转的问题 什么是ViewPager? 相信很多人使用过微信,其实微信的四个子页面:微信.通讯录.发现.我以及下面的引导空间就是ViewPager. 出现的问题: ...