雅克比迭代,一般用来对线性方程组,进行求解。形如:
\(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. os2

    1. os.getcwd() 显示当前路径 2. a = os.name 显示当前操作系统 3. a = listdir(path) 显示该路径的所有内容,类似与ls 4. os.chdir(&quo ...

  2. Scala-Unit-2-Scala基础语法1

    一.Scala程序的开始->HelloScala 这里的操作如同java的helloworld程序,直接放代码! object HelloScala{ def main(args:Array[S ...

  3. P2279 [HNOI2003]消防局的设立

    P2279 [HNOI2003]消防局的设立考场上想出了贪心策略,但是处理细节时有点问题,gg了.从(当前深度最大的节点)叶子节点往上跳k个,在这里设消防局,并从消防局遍历k个距离,标记上. #inc ...

  4. 003.Keepalived搭建LVS高可用集群

    一 基础环境 1.1 IP规划 OS:CentOS 6.8 64位 节点类型 IP规划 主机名 类型 主 Director Server eth0:172.24.8.10 DR1 公共IP eth1: ...

  5. Vue自学

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.Vue是框架而jQuery则是库. 1.2.AMD与CM ...

  6. hibernate log4j 输出sql

    applicationContext.xml <bean id="sessionFactory"        class="org.springframework ...

  7. 那些天使用AWS填过的坑和注意事项

    一直在找免费的GPU云端,在某乎上看到AWS提供免费的,就上去试了下,结果那个免费一年的只有CPU,并没有GPU,GPU还是需要付费的,相关背景就说这些,下面放几个相关教程,里面会说怎么使用,看了这几 ...

  8. atom那些事儿

    基于electron(Electron 的底层基于Chromium 和node.js)

  9. Django单表操作

    一.数据库相关设置 配置ORM的loggers日志: # 配置ORM的loggers日志 LOGGING = { 'version': 1, 'disable_existing_loggers': F ...

  10. [数学] 奇异值分解SVD的理解与应用

    看一个预测的代码,在预处理数据的时候使用了svd.了解了一下svd相关资料,比较喜欢第一篇文章的解释,不过第二篇也很简单. https://blog.csdn.net/ab_use/article/d ...