前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >雅可比松弛法

雅可比松弛法

作者头像
gojam
发布2019-11-17 14:03:49
1K0
发布2019-11-17 14:03:49
举报
文章被收录于专栏:gojam技术备忘录

有道题叫分析,那先了解下这种方法。

查阅了资料后初步得知这是一种通过矩阵迭代解方程组的方法。

给出如下方程:

a11*x1+a12*x2+a13*x3=b1

a21*x1+a22*x2+a23*x3=b2

a31*x1+a32*x2+a33*x3=b3

可以化成如下式子:

x1=(b1-a12*x2-a13*x3)/a11

x2=(b2-a21*x1-a23*x3)/a22

x3=(b3-a31*x1-a32*x2)/a33

我们先假设x1=0, x2=0, x3=0,代入式子右边:

x1=b1/a11

x2=b2/a22

x3=b3/a33

我们得到新的x1,x2,x3,于是我们可以继续将新的值代入方程,又得到新的x1,x2,x3,如此循环下去,X将会越来越接近准确值。

如果以矩阵的形式表示上述方程,即Ax=B。将A分成对角矩阵D,右上三角矩阵U,左下三角矩阵L。Ax=B转化为Dx=b+(L+U)x,继而转成x=b*D^(-1)+(L+U)x*D^(-1)

又由于DLUA都是已知量,可以把上式系数算出来,于是式子可以化简成x(k)=Tx(k-1)+c。

于是又可以令x=[0,0,....,0],然后迭代。

现在我明白这是怎么一回事了,但是刚才才看就挺懵的。

这篇博客以上部分是笔记,想具体了解该算法请左转https://www.cnblogs.com/gongxijun/p/10149337.html

MPI代码分析(书上的题,有些看不懂)

代码语言:javascript
复制
float Arow[N],X[N],NewX,B,error,Temp;//雅可比迭代法的输入应该是矩阵吧,那NewX和B是矩阵,Arow是N*N的矩阵,X是数组,至于error嘛,Allreduce里面用到了,作为recvAddress,大概理解成,如果error超过一定量度,就不会继续迭代
MPI_Comm comm;//MPI通信域
error=SomeLargeValue;//一个常量,error值超过它就不再迭代
初始化A、x和B
MPI_Init(&argc,&argv);//进入MPI环境
comm=MPI_COMM_WORLD;//为MPI通信域赋值
MPI_Comm_rank(comm,&my_rank);//获取当前进程在指定通信域的编号到my_rank
while(error>SomeErrorBound){//一次完整的迭代
Temp=B;//B是常量矩阵
for(int i=0;i<N;i++)Temp-=Arow[i]*X[i];//A是系数矩阵的一列,X是未知数(为上一次迭代计算出的值),算出一个矩阵,用B减去,减了N次
Temp/=A[my_rank];//只除以这个处理器对应的系数矩阵的一行
NewX=Temp+X[my_rank];//新的X要加上Temp
MPI_Allgather(&NewX,1,MPI_FLOAT,&X,1,MPI_FLOAT,comm);//每个处理器处理了一行(获得了一个新的X),聚集起来每个处理器获得所有新的X
Temp=Temp*Temp;//为什么要平方
MPI_Allreduce(&Temp,&error,1,MPI_FLOAT,MPI_SUM,comm);//所有处理器的Temp都被归并到根进程的error,方式是计算总和
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年11月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,助力维护团队卓越代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档