首页 > 其他分享 >用蒙特卡罗方法求积分

用蒙特卡罗方法求积分

时间:2024-05-06 18:22:30浏览次数:29  
标签:随机数 int 积分 MPI 蒙特卡罗 矩形 方法 节点

实验任务

采用 Monte-Carlo 法计算函数 y=x在 0~10 之间的积分值

实验目的

熟悉 MPI_Reduce() 函数的用法

实验方法

该算法的思想是通过随机数把函数划分成小的矩形块,通过求矩形块的面积和来求积分值,我们生成 n 个 0~10 之间的随机数,求出该随机数所对应的函数值作为矩形的高,由于随机数在 n 很大时会近似平均分布在 0~10 区间,所以矩形的宽取相同的值为 10/n ,对所有的矩形块求和即可得函数的积分值。

代码示例

/*文件名 inte.c*/ 
#define N 100000000 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include "mpi.h" 
int main(int argc, char** argv) 
{ 
int myid,numprocs; 
int i; 
double local=0.0; 
double inte,tmp=0.0,x; 
MPI_Init(&argc, &argv); 
MPI_Comm_rank(MPI_COMM_WORLD, &myid); 
MPI_Comm_size(MPI_COMM_WORLD,&numprocs); 
srand((int)time(0));//设置随机数种子 
/*各节点分别计算一部分积分值*/ 
/*以下代码在不同节点运行的结果不同*/

程序说明

以上程序通过随机数将积分区域划分为 100000000 个小的区域,各节点计算一部分小矩形的面积,最后通过 MPI_Reduce()函数对所有节点的计算结果进行归约求和得到最后的积分值,归约的过程就是各节点向主节点发送数据,由主节点接收数据并完成指定的计算操作,这一思想与云计算中Map/Reduce 思想类似,都是将任务分配到各节点计算最后由主节点汇总结果。程序通过 myid 和 numpros 参数的配合使同一段程序在不同的节点运行时完成不同部分的积分工作,这利用了 MPI 并行编程中变量分布式存储的原理,不同的节点其 myid 值是不同的。可见在 MPI 中会出现相同的代码在不同的节点执行时结果不一样的情况,这在串行程序中是不会出现的。 运行结果

标签:随机数,int,积分,MPI,蒙特卡罗,矩形,方法,节点
From: https://www.cnblogs.com/doris510/p/18175584

相关文章

  • 重写DRF的to_representation和to_internal_value方法有什么用途?
    DRF所有序列化器类都继承了BaseSerializer类,通过重写该类的to_representation()和to_internal_value()方法可以改变序列化和反序列化的行为,比如给序列化后的数据添加额外的数据,或者对客户端API请求携带的数据进行反序列化处理以及用来自定义序列化器字段。to_representation(......
  • snmp trap的162端口down解决方法
    电脑是WIN10的系统,进行snmptrap的测试发现,162端口down掉了1.cmd打开命令提示符窗口查看UDP端口占用用命令netstat-ano,发现没有162的端口被占用2.service里没有看到snmp安装1)打开设置中的[开发人员模式],设置->更新与安全->开发者选项->开发人员模式2)添加SNMP,设置->应用->应......
  • 软件需求分析方法有哪些?
    软件需求分析是软件开发过程中至关重要的一步,它旨在理解用户需求、功能需求、性能需求等,以便有效地设计和实现软件系统。以下是一些常见的软件需求分析方法:访谈(Interviews):直接与利益相关者交谈,了解他们的需求和期望。问卷调查(Questionnaires):通过书面形式向用户或相关方发送问卷,......
  • SSH远程连接时报错提示Permission denied (publickey).的解决方法
    1.发现问题在Linux终端使用sshroot@server_ip来连接到远程服务器时,出现Permissiondenied(publickey).提示2.分析问题远程主机禁用了ssh密码登录权限本地访问远程主机的公钥没有添加或者被取消(无法认证)本地生成的一对秘钥,私钥~/.ssh/id_rsa和公钥~/.ssh/id_rsa.pub。......
  • Java Object类有那些方法,分别作用
    1.类构造器是创建Java对象的途径之一,通过new关键字调用构造器完成对象的实例化,或通过构造器对象进行相对应的初始化。在JDK的Object类源码中,系统会自动添加一个无参构造器。publicObject(){Objectobj=newObject();//构造一个Object类的对象}2.registerNatives......
  • 重写 elementPlus 删除方法拦截前 和 tag 标签删除前提示
    <template><el-selectref="myselectref"v-model="currentValue"v-bind="$attrs"><slotname="option"><el-optionv-for="itemin$attrs.options":key="item.v......
  • Python高阶---魔法方法
    魔法方法:通过dir(函数名)查看到的方法中以双下划线开始,以双下划线结束的方法。=========================================classStudent:definit(self,name,age):"""负责初始化类的实例,实例是由__new__方法传递过来的,也就是这里的self:paramname::paramage:"""self......
  • 用php找出字符串中连续重复次数最多的字符,你有方法吗?
     找出字符串中连续重复次数最多的字符,这里总结了几种方法,不管是在开发中,还是在面试中都会遇到。方法一<?php$arr=str_split($str);//字符串分隔到数组中$arr=array_count_values($arr);//用于统计数组中所有值出现的次数,返回一个数组//键名为原数组的键值,键值为......
  • JS实现获取当前URL和来源URL的方法
    通用模式:Javascript正常取来源网页的URL只要用:index.html:<!DOCTYPEhtml><htmllang="zh-cn"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1,maximum-scale=......
  • 【学习方法】: 读书的方法
    【学习方法】:读书的方法    读书的方法。 读《历史》的方法。每段历史,都是一个场景;每段历史,都是一个抉择(选择做什么,选择不做什么)。每当我读历史类书籍的时候,置自己于历史之中。我想象自己在那段历史的环境中,自己会做什么不做什么;然后看看书中的人物做了什么......