雅克比迭代,通常用来对线性方程组,进行求解。形如:
\(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})\)spa
咱们不妨假设 \(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\)
咱们将其概括成通常式子:
3d
eg: 对于方程组:
求解:
咱们先将其变形:
而后,咱们假设:
并将其代入获得:
咱们将获得的X1,x2,x3再次代入方程中,反复迭代,将会获得以下:
最终咱们将会获得一个收敛值,该组值,就是咱们获得的解(会很是的逼近真实解)blog
那么这种方法,也能够用来求解矩阵:
对于方程: 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的逆矩阵为:get
而后,咱们将D移到右边变成:
class
这个公式,和咱们上面描述的雅克比迭代是否是长得很像,而后咱们能够将其通常化为:
pdf
咱们知道A是一个已知的常量矩阵,于是D,L,U都是已知矩阵,那么咱们能够简化为:
\(T = D^{-1}*( L +U)\) , \(c = D^{-1}*b\) ;
方法
根据这一个思想,咱们能够获得一个伪代码:
im
实现代码为:d3
参考资料为:
https://www3.nd.edu/~zxu2/acms40390F12/Lec-7.3.pdfcms