高斯消元法的MPI實現

2021-08-14 13:57:41 字數 1695 閱讀 1216

數學上,高斯消元法(或譯:高斯消去法),是線性代數規劃中的乙個演算法,可用來為線性方程組求解。但其演算法十分複雜,不常用於加減消元法,求出矩陣的秩,以及求出可逆方陣的逆矩陣。不過,如果有過百萬條等式時,這個演算法會十分省時。一些極大的方程組通常會用迭代法以及花式消元來解決。當用於乙個矩陣時,高斯消元法會產生出乙個「行梯陣式」。高斯消元法可以用在電腦中來解決數千條等式及未知數。

高斯消元法的演算法複雜度是o(n3

);這就是說,如果係數矩陣的是n∗

n ,那麼高斯消元法所需要的計算量大約與n3

成比例。所以運用並行化的方法處理高斯消元法是一種可行的途徑。

**見下:

#include "mpi.h"  

#include

#include

#include

int main(int argc,char *argv)

, ,,,

,,,,

,};

mpi_init(&argc,&argv);

mpi_comm_rank(mpi_comm_world,&self);

mpi_comm_size(mpi_comm_world,&size);

float *equivalent=(float*)malloc((size)*sizeof(float));

float *recv=(float*)malloc((size)*sizeof(float));

float *x=(float*)malloc((size)*sizeof(float));

float

b[10]=;

float

temp=0.0;

intmarked=0;

inti, j, k;

intflag=0;

//distribute

if(0==self)

for(j=1;j

} else

//pivot

for(i=0;i

marked=1;

} mpi_bcast(recv,size,mpi_float,i,mpi_comm_world);

if(0==marked)

} }

//backtracking

for (i=size-1; i>=0; i--)

x[i]=(b[i]-temp)/equivalent[i];

}mpi_bcast(x,size,mpi_float,i,mpi_comm_world);

mpi_barrier(mpi_comm_world);

}printf("the equivalent on %d is: %.2f %.2f %.2f ...\n",self,equivalent[0],equivalent[1],equivalent[2]);

mpi_barrier(mpi_comm_world);

if(size-1==self)

else}if

(flag)

if(0==self)

}putchar('\n');

free(recv);

free(equivalent);

free(x);

mpi_finalize();

return 0;

}

MPI 高斯消元

高斯消元 解方程組的預備工作 將矩陣化為上三角 不分主從執行緒 每個執行緒負責乙個方程 include mpi.h include include typedef struct md int main int argc,char argv mpi init argc,argv mpi comm ra...

高斯消元法(二) 高斯消元法原理

高斯消去法是一種常用的求解線性方程組的方法,通過逐次消元後,在回代求解,實際計算中常用的一種方法。順序消去法 將ax b按照從上至下 從左至右的順序化為上三角方程組,中間過程不對矩陣進行交換,主要步驟如下。step1 將第2行至第n行,每行分別與第一行做運算,消掉每行第乙個引數。公式如 形成如下圖所...

高斯消元法

寒假前,小導師給我們布置了三道程式設計題,其中有一道是利用高斯消元法解線性方程組的。在網上搜了些資料,自己照葫蘆畫瓢編出乙個簡單的高斯消元法 利用矩陣的初等行變換 高斯消元法解線性方程組 include include include define dim 10 double a dim 1 dim...