原理:

将积分区间平均分成多份,每个进程计算相应的任务,计算完成后通过根进程收集并求和得出答案并计算出相应的误差。

代码如下:

#include <stdio.h>
#include "mpi.h"
#include <string.h>
#include<math.h>
#define PI 3.1415926
double my_abs(double x)
{if(x <= 0)x = x * -1;return x;
}
int main(int argc,char **argv)
{MPI_Comm comm = MPI_COMM_WORLD;MPI_Status status;int size,rank,dest;char str[100];MPI_Init(&argc,&argv);MPI_Comm_size(comm,&size);MPI_Comm_rank(comm,&rank);int n = 100000;        //将区间分成100000份double dx = PI / 2 / n;if(rank==0){double sum,sum1,sum2,sum3,sum4;double error_ ;MPI_Recv(&sum1,1,MPI_DOUBLE,1,1,comm,&status);     //接收子进程计算结果MPI_Recv(&sum2,1,MPI_DOUBLE,2,2,comm,&status);MPI_Recv(&sum3,1,MPI_DOUBLE,3,3,comm,&status);//MPI_Recv(&sum4,1,MPI_DOUBLE,4,4,comm,&status);sum = sum1 + sum2 + sum3;error_ = (1 - my_abs(1 - my_abs(sum))) * 100;       //计算误差printf("result is : %lf\n",sum);printf("right is : %lf%% \n",error_);}else if(rank==1){double aij = 0;double sum = 0;int i = 0;//while(aij + i * dx <= PI / 2)while(i <= n)                     //计算积分{sum += dx * cos(aij + dx / 2);i++;aij += dx;}MPI_Send(&sum,1,MPI_DOUBLE,0,1,comm);//将计算结果发给根进程}else if(rank==2){double aij = PI / 2;double sum = 0;int i = 0;while(i <= n){sum += dx * cos(aij + dx / 2);i++;aij += dx;}MPI_Send(&sum,1,MPI_DOUBLE,0,2,comm);}else if(rank==3){double aij = PI;double sum = 0;int i = 0;while(i <= n){sum += dx * cos(aij + dx / 2);i++;aij += dx;}MPI_Send(&sum,1,MPI_DOUBLE,0,3,comm);}/*else if(rank==4){double aij = 3*PI /2;double sum = 0;int i = 0;while(aij + i * dx <= PI*2){sum += dx * cos(aij + dx / 2);i++;}MPI_Send(&sum,1,MPI_DOUBLE,0,4,comm);}*/MPI_Finalize();return 0;
}

运行结果:

如图所示,区间分的份数越多,误差越小。

MPI编程----计算cosx的积分相关推荐

  1. MPI求计算cosx的定积分

    计算定积分 设计思想 计算cos(x)中从0-2π的定积分,基本思想,分成p块,每一块都是平均分成n个小区,然后n可以初始化定义也可以输入,n理论上越小,精确值越高,用长方形的面积累加表示区间面积,利 ...

  2. MPI编程及性能优化

    第1节 MPI简介 1.1 MPI及其历史 与OpenMP相似,消息传递接口(Message Passing Interface,简称MPI)是一种编程接口标准,而不是一种具体的编程语言.该标准是由消 ...

  3. 高性能MPI编程实验

    文章目录 一.实验目的 二.实验要求 三.华为云平台的功能特性和实践关键步骤 四.高性能MPI编程开发关键过程 五.WordCount算法的MPI实现关键点 六.MPI编程与MapReduce的比较分 ...

  4. MPI编程实例(PI、AllGather、排序)

    1.MPI 简介 MPI(Message Passing Interface)是目前最重要的一个基于消息传递的并行编程工具,它具有移植性好.功能强大.效率高等许多优点,而且有多种不同的免费.高效.实用 ...

  5. 编程计算1+2+3+4+...+n的值超过500的和的第一个值

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p91 习题3 12.编程计算1+2+3+4+-+n的值超过500的第一个和值为多少:n的值为多少. # ...

  6. 【MPI编程】任意数节点的树形求和(高性能计算)

    简述 之前写过一个只能在2幂次数的节点环境下使用的树形结构求和 [MPI编程]2幂节点的树形求和(高性能计算) 稍微修改了一下对应代码,就可以使用了.其实就是在逻辑上扩充一下为2的幂数.也就是说接受节 ...

  7. php单词出现频率,PHP编程计算文件或数组中单词出现频率的方法

    本文实例讲述了PHP编程计算文件或数组中单词出现频率的方法.分享给大家供大家参考,具体如下: 如果是小文件,可以一次性读入到数组中,使用方便的数组计数函数进行词频统计(假设文件中内容都是空格隔开的单词 ...

  8. MPI编程的常用接口速查

    获取当前时间 在插入MPI提供的头文件后,可以获得获取时间的函数. double MPI_Wtime(void) 取得当前时间, 计时的精度由 double MPI_Wtick(void) 取得 作为 ...

  9. [转]C#算法 一对小兔子一年后长成大兔子;一对大兔子每半年生一对小兔子。大兔子的繁殖期为4年,兔子的寿命是6年。假定第一年年初投放了一对小兔子,试编程计算,第n年末总共会有多少对兔子...

    /// <summary>/// 一对小兔子一年后长成大兔子:一对大兔子每半年生一对小兔子.大兔子的繁殖期为4年,兔子的寿命是6年./// 假定第一年年初投放了一对小兔子,试编程计算,第n ...

最新文章

  1. shiro多realm验证之——shiro实现不同身份使用不同Realm进行验证(转)
  2. 创始人爆料!被谷歌收购前,DeepMind 已濒临破产
  3. iOS自定义简易刷新视图(仿MJRefresh)
  4. python笔记之while和for循环练习
  5. java golang速度_golang思考之运行速度
  6. 大括号之谜:C++的列表初始化语法解析
  7. html悬浮窗口退出,网页中可关闭的漂浮窗口实现
  8. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引...
  9. python consulate_使用python测测你的系统最多能创建多少个线程 | 学步园
  10. Linux三剑客之grep
  11. 驱动兼容_「图」英特尔DCH驱动新版发布:重点修复Windows 10兼容性问题
  12. 成员变量和局部变量详解
  13. 干货丨7款易上手C语言编程软件推荐
  14. java sql 工具类_Java防SQL注入工具类
  15. LabView 2018破解版下载
  16. 图解MongoDB数据库学习路线指南
  17. 查看CentOS版本信息
  18. 最原始的yuv图像叠加文字的实现--手动操作像素
  19. python 列表索引位置_python列表索引查找
  20. r语言查找是否存在空值_R语言读取数据空值

热门文章

  1. 【U8】填制凭证输入完摘要,回车后报错运行时错误70,拒绝的权限。
  2. UE4 解决Ribbon连线异常
  3. 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--低级建模的基础实例(七)
  4. 塑壳断路器的机械原理
  5. Kaldi安装(Linux环境)
  6. 怎么用Java来操作Word和Excel?
  7. 详解三次握手和四次挥手
  8. 支付宝小程序打开淘系域名
  9. FZU 2238 Daxia Wzc's problem【规律+lucas】
  10. ipa安装包通过引流下载页在线下载安装(itms-services)