蒙特卡罗法计算pi值是比较基础的入门应用之一,网上流传的大部分代码包括百度百科上的代码都是使用for循环完成迭代的,运算速度非常慢,这里我们提供一个向量化运算的方式,以加快运算速度。接触编程久了后,会发现运算速度是一个非常重要的问题,尤其是对于matlab这类高层语言,想提高matlab的运算速度,可以数学建模公会之前的一篇总结——优化matlab运行速度的方案的教程

方法一:蒲丰投针

l = 0.6; %针的长度
a = 1; %平行线的宽度
n = 100000; %做n次投针试验
y = unifrnd(0, a/2, 1, n); %在[0, a/2]内服从均匀分布随机产生n个数
theta = unifrnd(0, pi, 1, n); %在[0, pi]内服从均匀分布随机产生n个数
k=sum(y<(l/2)*sin(theta));%记录针与平行线相交的次数
pival = (2*l*n)/(a*k);
disp(pival)

第5行代码中,直接生成了theta的100000组数据,采用matlab自带的sin函数可以同时计算这100000组数据的sin值。实际上,matlab大多数自带的函数都是支持向量化运算的,大多数情况下可以避免使用for循环。

方法二:通过圆的面积计算

n = 100000; %做n次投点试验
x=2*rand(1,n)-1;
y=2*rand(1,n)-1;
pival=4*mean(x.^2+y.^2<1);
disp(pival)

在方法二中,我们在第四行代码中同样使用了向量化操作,不用每生成一个点判断一次是否在圆形当中。

可以重复以上两种方法100次,观察pi值计算的平均误差和误差的标准差。

方法一的误差:
numrepeat=100;
pivalset=zeros(1,numrepeat);
for i=1:numrepeatl = 0.6; %针的长度a = 1; %平行线的宽度n = 100000; %做n次投针试验y = unifrnd(0, a/2, 1, n); %在[0, a/2]内服从均匀分布随机产生n个数theta = unifrnd(0, pi, 1, n); %在[0, pi]内服从均匀分布随机产生n个数k=sum(y<(l/2)*sin(theta));%记录针与平行线相交的次数pival = (2*l*n)/(a*k);pivalset(i)=pival;
end
err1=abs(pi-pivalset);
disp(mean(err1))
disp(std(err1))
方法二的误差:

numrepeat=100;
pivalset=zeros(1,numrepeat);
for i=1:numrepeatn = 100000; %做n次投点试验x=2*rand(1,n)-1;y=2*rand(1,n)-1;pival=4*mean(x.^2+y.^2<1);pivalset(i)=pival;
end
err2=abs(pi-pivalset);
disp(mean(err2))
disp(std(err2))

了解更多matlab应用及教程,欢迎关注公众号“数学建模公会”——

matlab 蒙特卡罗计算pi值相关推荐

  1. linux多线程计算pi,使用蒙特卡洛方法多线程计算pi值

    我正在尝试使用montecarlo方法和使用并行C代码来查找PI的值.我已经写了serail代码并且工作正常.但是,并行代码给我一些时间0或PI错误的值负值使用蒙特卡洛方法多线程计算pi值 我的代码 ...

  2. 用hadoop计算PI值

    一.计算PI值的方式与原理 百度一下,计算PI的方法还真不少.但在hadoop examples代码中的注释写的是:是采用 Quasi-Monte Carlo 算法来估算PI的值. 维基百科中对Qua ...

  3. 搭建MPI并行计算环境并计算pi值[windows 和 Ubuntu]

    文章目录 一. 选在Linux,Ubuntu或者Windows上搭建mpi环境 First of all What's more 二.VS配置mpi 三.计算pi值 (1)基础编译环境的构建 (2)M ...

  4. 如何用hadoop自带的包计算pi值

    一.计算pi的值的原理 通过hadoop计算pi值确实是一件很酷的事情,我想你可能会有疑问,(Hadoop不是一个分布式计算的处理数据的吗?)当然,计算它能处理大量数据,我们可以通过这种方式来计算pi ...

  5. python学习之 利用蒙特卡洛方法计算PI值

    使用环境为python IDLE3.5. #利用蒙特卡洛方法计算PI值 from random import random from math import sqrt from time import ...

  6. 基于CUDA的GPU计算PI值

    访问[WRITE-BUG数字空间]_[内附完整源码和文档] 基于CUDA的GPU计算PI值.本项目使用CUDA编程模型并行计算PI值,研究GPU与CPU效率的比较,分析不同GPU线程分块对性能的影响. ...

  7. Matlab 迭代法计算灰值图像的level

    Matlab 迭代法计算灰值图像的level Matlab中,已知函数im2bw(X,Level),默认level为0.5.这里level为阈值,其含义是: 第Xij个像素,利用利用二值化处理时,le ...

  8. 从蒙特卡洛方法计算pi值谈random模块

    计算机模拟常常需要用到随机选择的数.本文从随机数的一个简单应用开始简要地介绍Python的random模块. 使用蒙特卡洛方法计算pi值 Links:该问题来自于pudure university(普 ...

  9. 程序实现蒙特卡洛算法计算PI值和积分

    蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法.是 ...

最新文章

  1. 粒子群优化RBF神经网络源码程序
  2. 数据库记录的添加、修改、删除(DataAdapter、DataTable 、DataRow )
  3. html不居中代码,HTML – 为什么我不能居中div?
  4. java面试基础_Java面试基础
  5. PS2019摄影后期处理(二)
  6. Educational Codeforces Round 81 (Rated for Div. 2) B. Infinite Prefixes 数学
  7. RuoYi-Cloud 部署篇_02(linux环境 Oracle +nginx版本)
  8. 控制for each循环次数_CCF CSP编程题解201312-1:出现次数最多的数
  9. Docker(一) docker简介安装以及下载运行第一个镜像
  10. E - Wireless Network(并查集)
  11. 【SDPVRP】基于matlab遗传算法求解同时取送货的车辆路径问题【含Matlab源码 1487期】
  12. 自己动手定制winpe+各类dos工具箱U盘启动盘+minilinux
  13. acfun json 弹幕 转换 bilibili xml 弹幕
  14. 一文读懂品质体系认证,学会判断 PCB 板厂生产资质
  15. ubuntu18.04下载显卡驱动+CUDA+CUDNN
  16. excel公式编辑器_七款编辑器/笔记工具推荐
  17. Windows/Ubuntu双系统磁盘管理中删除Ubuntu分区后Ubuntu EFI分区无法删除卷解决办法
  18. cookie与session区别
  19. 频压转换(RC低通滤波方式,频率信号如何转成模拟电压信号)
  20. 软件测试日语简历范文,工程师软件测试的英文简历范文.doc

热门文章

  1. 机器学习数据预处理----分类型文字数据的处理
  2. 软件工程Alpha冲刺day1
  3. Python 数据结构 之 串 的链式存储结构
  4. Thread.currentThread.interrupt()
  5. 使用ip地址计算子网掩码的方法
  6. 2021-06-07 RK3328 Android 10 上调试es7243记录
  7. 如何取消shutdown关机命令?-shutdown命令的使用解析
  8. S7-1200PLC 基于以太网的TCP通信
  9. FreeRDP 2.0 for Windows 编译
  10. 在visio中插入数学公式