高斯列主元消元法mpi实现
2017-07-01 05:38
351 查看
列主元法mpi实现
列主元消元法在求解线性方程组时很好的解决了因为计算机本身字长的限制而产生的问题。本文中使用mpi将矩阵分行处理,并将通信量最小化。这是课程作业,学弟学妹们参考参考就好直接放代码
#include<iostream> #include"mpi.h" #include<fstream> #include<algorithm> #include<cmath> using namespace std; const double eps=1e-10; const int N=1000; int main(){ double **a=new double* ; double *answer=new double ; int *local=new int[N+1]; double max; int i,j,myid,numprocs,madex; for(i=0;i<N;i++) a[i]=new double[N+1];//malloc /*local 数组用于对应主元的位置和原来的位置的映射关系*/ for(i=0;i<N+1;i++) local[i]=i; ifstream fin("matrix.dat");//fscanf for(i=0;i<N;i++) for(j=0;j<N+1;j++) fin>>a[i][j]; MPI_Init(0,0); MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); int numtasks=N/numprocs; for(j=0;j<N;j++){ if(myid==j%numprocs){ max=madex=0; for(int k=0;k<N;k++) if(local[k]>=j&&abs(a[j][local[k]])>=max){ max=abs(a[j][local[k]]); madex=k; } } MPI_Bcast(&madex,1,MPI_INT,j%numprocs,MPI_COMM_WORLD); MPI_Bcast(a[j],N+1,MPI_DOUBLE,j%numprocs,MPI_COMM_WORLD); swap(local[j],local[madex]);//交换两个部分的值 for(i=myid;i<N;i+=numprocs){ if(i!=j){ double temp=a[i][local[j]]/(a[j][local[j]]+eps); for(int k=0;k<N+1;k++){ a[i][k]-=a[j][k]*(temp); } } } } for(j=0;j<N;j++){ if(myid==j%numprocs){ answer[local[j]]=a[j] /(a[j][local[j]]+eps); } MPI_Bcast(answer+local[j],1,MPI_DOUBLE,j%numprocs,MPI_COMM_WORLD); } if(myid==0){ for(j=0;j<N;j++){ cout<<"X["<<j<<"]="<<answer[j]<<endl; } } MPI_Finalize(); }
相关文章推荐
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 全选主元高斯消去算法
- 高斯列主元消元法解方程Ax=b(A为方阵且为满秩)
- 选主元的高斯-约当(Gauss-Jordan)消元法解线性方程组和求逆矩阵
- Matlab实现——严格对角占优三对角方程组求解(高斯赛尔德Gauss-Seidel迭代、超松弛)
- 混合高斯视频算法的实现
- 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯等等
- OPENCV中混合高斯背景模型的实现
- 高斯全主元消去法解线性方程组
- 10个重要的算法C语言实现源代码(其3--高斯列主元消去法)
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 10个重要的算法C语言实现源代码(8-9-10-----秦九昭和幂法和高斯塞德尔)
- 高斯模糊的.net实现 (摘自网络)
- 线性方程数值分析中高斯迭代matlab实现
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 快速排序(QuickSort)的C#实现(采用随机化主元方式)
- 高斯图像滤波原理及其编程离散化实现方法