计算积分,图片中公式的转换,代码就是注意下公式就可以了,然后这个我固定了是0 到 2PI 自己也可以更改
#include "mpi.h"
#include <stdio.h>
#include <math.h>
#include <string.h>
#define PI acos(-1.0)
int main(int argc,char **argv){
int size,rank;
MPI_Comm comm = MPI_COMM_WORLD;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_size(comm,&size);
MPI_Comm_rank(comm,&rank);
if(rank == 0) {
int n;
printf("input a num\n");
scanf("%d",&n);
for(int i = 1;i < size;i++)
MPI_Send(&n,1,MPI_INT,i,99,comm);
int p = size;
double h = 2*PI/p/n;
double sum = 0.0;
for(int i = 0;i < n;i++) {
double num = (rank*n + i)*h;
sum += cos(num + h/2)*h;
}
for(int i = 1;i < size;i++) {
double tmp_num;
MPI_Recv(&tmp_num,1,MPI_DOUBLE,i,99,comm,&status);
sum += tmp_num;
}
printf("cos(x) = %.3lf\n",sum);
}
else {
int p = size;
int n;
MPI_Recv(&n,1,MPI_INT,0,99,comm,&status);
double h = 2*PI/p/n;
double sum = 0.0;
for(int i = 0;i < n;i++) {
double num = (rank*n + i)*h;
sum += cos(num + h/2)*h;
}
MPI_Send(&sum,1,MPI_DOUBLE,0,99,comm);
}
MPI_Finalize();
return 0;
}