前言

还记得浦丰投针实验吗?

浦丰所进行的是一个概率实验(Probability experiment),这样的方法称为蒙特卡罗方法(Monte Carlo Method)。而蒙特卡罗(Monte Carlo)是世界著名的“赌城”,世界三大赌城之一(美国超级赌城拉斯维加斯与号称东方拉斯维加斯的中国澳门)。事实上还有拉斯维加斯方法(本文不涉及)。

本文将通过几个案例解释蒙特卡罗方法的原理和应用。

案例一

往正方形区域D={(x,y):x∈[−1,1],y∈[−1,1]}内生成随机点,在单位圆区域C={(x,y):x2+y2≤1}内的点和点的总数之比近似为~pi/4。随着实验样本总数的改变,结果越来越精确,不加证明的给出此例中增加一位小数精度需使用100倍的样本数。MATLAB实现如下:

①绘制图形

x=[1,-1,-1,1,1];
y=[1,1,-1,-1,1];%将正方体的角连起来
t=linspace(0,2*pi,1000);
x1=cos(t);y1=sin(t);
plot(x,y,x1,y1);
legend('square','circle')
title('Square inscribed circle')
axis([-1.5 1.5 -1.5 1.5]);

②生成随机点列

xt=unifrnd(-1,1,[n,1]);%testblock&times
yt=unifrnd(-1,1,[n,1]);

③筛选计数

k=0;
for i=1:nif (xt(i,1)^2+yt(i,1)^2)<=1k=k+1;scatter(xt(i,1),yt(i,1),'r*')elsescatter(xt(i,1),yt(i,1),'b*')end
end
p=4*k/n;%估计值
e=p-pi;%误差

④精度分析

案例二

      Monte Carlo method 对维数并不敏感,可被用来计算多重积分。左图是计算球的面积

x=[1,1,1,1,1,-1,-1,-1,-1,-1,-1,1,1,-1,-1,1];
y=[-1,-1,1,1,-1,-1,-1,1,1,-1,-1,-1,1,1,1,1];
z=[1,-1,-1,1,1,1,-1,-1,1,1,-1,-1,-1,-1,1,1];
plot3(x,y,z);%绘制正方体
axis([-1.5,1.5,-1.5,1.5,-1.5,1.5]);
hold on;
n=5000;
[x1,y1,z1]=sphere(50);%绘制球体
mesh(x1,y1,z1);
title('Cube inscribed sphere');
xt=unifrnd(-1,1,[n,1]);%testblock&times
yt=unifrnd(-1,1,[n,1]);
zt=unifrnd(-1,1,[n,1]);
k=0;
for i=1:nif (xt(i)^2+yt(i)^2+zt(i)^2)<=1scatter3(xt(i),yt(i),zt(i),'r*')k=k+1;elsescatter3(xt(i),yt(i),zt(i),'b*')end
end
p=k/n*6;
e=p-pi;

案例三

下面利用Monte Carlo method求解浦丰投针问题:

考虑针的中点x位置,不妨设,a是平行线簇的间距,设针与平行线所成角度为,则当针与线相交时,,针落在线上的概率为,再利用Monte Carlo方法计算积分值即知

为方便计算,取

plot([0,pi],[1,1],'linewidth',2);
t=linspace(0,pi,1000);
y=0.5*sin(t);
hold on
plot(t,y);
n=10000;
x1=unifrnd(0,pi,[n,1]);
y1=unifrnd(0,1,[n,1]);
k=0;
for i=1:nif y1(i)<0.5*sin(x1(i))k=k+1;scatter(x1(i),y1(i),'r*')elsescatter(x1(i),y1(i),'b*')end
end
axis([0,pi,0,1]);
p=n/k;
e=p-pi;

总结

案例一,二是Monte Carlo method在二维,三维的应用,没有本质差别(维数对Monte Carlo method影响很小),案例三是先用数学方法从概率实验中抽离出待求式再通过Monte Carlo method计算。而Monte Carlo 的缺点也很明显:1.对于确定性问题需要转化成随机性问题。2.误差是概率误差。3.通常需要较多的计算步数N.

阿白数模笔记之蒙特卡罗方法(Monte Carlo Method)相关推荐

  1. 【Matlab 六自由度机器人】基于蒙特卡罗方法(Monte Carlo Method)构建机器人工作空间(附MATLAB建模仿真完整代码)

    [Matlab 六自由度机器人]基于蒙特卡洛法构建工作空间 往期回顾 前言 正文 一.蒙特卡洛方法及机器人工作空间的概述 1. 蒙特卡洛法 2. 机器人工作空间 二.rand函数的应用 1. rand ...

  2. 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)

    1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...

  3. 阿白数模笔记之灰色-马尔科夫模型(Grey Markov model)

    目录 前言(preface) GM(1,1) 简介(brief introdution) ①级比检验(Grade ratio test) ②建立GM(1,1)模型 Ⅰ.邻值生成序列(Adjacent ...

  4. java计算椭圆的面积_java算法3_蒙特卡洛方法(Monte Carlo method)求PI和椭圆面积

    蒙特卡洛方法,是一种以概率统计理论为指导的一类非常重要的数值计算方法.是指使用随机数来解决很多计算问题的方法.蒙特卡洛方法的名字来源于摩纳哥的一个城市蒙特卡洛,该城市以×××业闻名,而蒙特卡洛方法正是 ...

  5. 数模笔记(三):灰色系统分析方法

    数模笔记(一):线性规划.整数规划及非线性规划 数模笔记(二):层次分析法 数模笔记(三):灰色系统分析方法 数模笔记(四):插值与拟合 数模笔记(五):变异系数法 数模笔记(六):两变量相关性分析与 ...

  6. Python数模笔记-Sklearn(5)支持向量机

    支持向量机(Support vector machine, SVM)是一种二分类模型,是按有监督学习方式对数据进行二元分类的广义线性分类器. 支持向量机经常应用于模式识别问题,如人像识别.文本分类.手 ...

  7. Python数模笔记-NetworkX(3)条件最短路径

    1.带有条件约束的最短路径问题 最短路径问题是图论中求两个顶点之间的最短路径问题,通常是求最短加权路径. 条件最短路径,指带有约束条件.限制条件的最短路径.例如,顶点约束,包括必经点或禁止点的限制:边 ...

  8. Python数模笔记-NetworkX(2)最短路径

    1.最短路径问题的常用算法 最短路径问题是图论研究中的经典算法问题,用于计算图中一个顶点到另一个顶点的最短路径. 欢迎关注 Youcans 原创系列,每周更新数模笔记 Python数模笔记-PuLP库 ...

  9. Python数模笔记-NetworkX(1)图的操作

    1.NetworkX 图论与网络工具包 NetworkX 是基于 Python 语言的图论与复杂网络工具包,用于创建.操作和研究复杂网络的结构.动力学和功能. NetworkX 可以以标准和非标准的数 ...

最新文章

  1. ToString()的格式设置
  2. 三菱触摸屏通讯错误_三菱触摸屏常见问题及故障汇总
  3. Electron中实现拖拽文件进div中通过File对象获取文件的路径和内容
  4. Linux 信号可靠性,同步,异步,多线程信号等介绍
  5. 在java 8 stream表达式中实现if/else逻辑
  6. 真正爱你的女人是这样的
  7. 2020年11月全国程序员工资,新出炉!
  8. 百度java的线程技术_自我提升(基础技术篇)——java线程简介
  9. python编写加密程序_用Python实现一个简单的加密程序
  10. 用idea建立jsp项目_用idea创建maven项目,配置tomcat详解
  11. php utf-8编码 正则匹配中文
  12. html自动给js添加版本号,通过gulp 在原html文件上自动化添加js、css版本号
  13. Windows下VB6.0开发——VB程序断点调试与顺序执行不一致问题(通信原因)
  14. 如何让BERT具有文本生成能力
  15. ASP.NET加密和解密数据库连接字符串
  16. 编写一个程序,给出汉字“你” “我” “他”在Unicode表中的位置
  17. Spring系列七:JDK 动态代理和 CGLIB 代理
  18. Idea中使用maven 与pom文件讲解
  19. Android开发地图应用--坐标转换
  20. 了解下常用分析JVM参数以及优化工具

热门文章

  1. JS事件cancelBubble、event.preventDefault()与event.stopPropagation()简单介绍
  2. android webview 铺满_统编三年级上《铺满金色巴掌的水泥路》学习笔记
  3. 行云创新:用云原生,实现企业数字化转型最短路径
  4. html网页滚动条自动滚动,win10网页滚动条自动滚动怎么办-解决网页滚动条自动滚动的方法 - 河东软件园...
  5. win10 专业版 git bash 闪退问题终极解决方案
  6. 由内而外的 螺旋数组
  7. NLP / LLMs中的Temperature 是什么?
  8. Java的发展应用以及前景
  9. iOS UI设计模版收藏
  10. 问答精选|新年特辑:全方位揭秘MeterSphere一站式开源持续测试平台