雅克比迭代算法(JacobiIterativeMethods)--[mpi,c++]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
雅克⽐迭代算法(JacobiIterativeMethods)--[mpi,c++]雅克⽐迭代,⼀般⽤来对线性⽅程组,进⾏求解。
形如:
a11∗x1+a12∗x2+a13∗x3=b1
a21∗x1+a22∗x2+a23∗x3=b2
a31∗x1+a32∗x2+a33∗x3=b3
我们需要求解出x1 ,x
2 ,x
3
,我们对这组⽅程进⾏变换:
x1=
1
a11(b
1
−a12∗x2−a13∗x3)
x
2=
1
a21(b
2
−a21∗x1−a23∗x3)
x3=
1
a31(b
3
−a31∗x1−a32∗x2)
我们不妨假设x0
0=(X0
1
,X0
2
,X0
3
) ,当我们代⼊上述公式的时候,我们就会得到⼀组新的x1
=(X1
1
,X1
2
,X1
3
) ,此刻我们称之为⼀次迭代.
然后我们将得到的X1,X2,X3再次代⼊公式,我们将会得到第⼆次迭代, 当我们重复这种迭代的时候,我们会得到第K次迭代:
x k=(X k
1,X k
2
,X k
3
) , k=1,2,3...n
我们将其归纳成⼀般式⼦:
eg: 对于⽅程组:
求解:
我们先将其变形:
然后,我们假设:
并将其代⼊得到:
我们将得到的X1,x2,x3再次代⼊⽅程中,反复迭代,将会得到如下:
最终我们将会得到⼀个收敛值,该组值,就是我们得到的解(会⾮常的逼近真实解)
那么这种⽅法,也可以⽤来求解矩阵:
对于⽅程: Ax =b ; 我们设定 A矩阵为: ,b矩阵为:, x矩阵为:
到这⾥,每个⼈都有⾃⼰的解法,直接的解法是将 x = A−1b,但是A的逆矩阵A−1,计算较为复杂,我们这⾥需要⼀点⼩的tricks ,我们将A矩阵拆分成为⼀个对⾓矩阵D,下三⾓矩阵L,上三⾓矩阵U,即
这样的话,公式 Ax = b 就变成了 ( D - L -U )x = b ,然后我们就可以得到:
D x = b + (L+U)x ,当我们得到这个公式的时候,求解D的逆矩阵就容易了很多,我们得到D的逆矩阵为:然后,我们将D移到右边变成:
这个公式,和我们上⾯描述的雅克⽐迭代是不是长得很像,然后我们可以将其⼀般化为:
我们知道A是⼀个已知的常量矩阵,因⽽D,L,U都是已知矩阵,那么我们可以简化为:
T=D−1∗(L+U) , c=D−1∗b ;
根据这⼀个思想,我们可以得到⼀个伪代码:
实现代码为:
参考资料为:
Processing math: 100%。