蒙特卡罗模拟法的理论基础是大数定律。其发展得益于计算能力的提升和计算成本的下降。蒙特卡罗模拟法在很多领域都有广泛的应用。

引子

图片来源:Wikipedia

matrix67的《数学里也能耍流氓》一文,其中提到了旋轮线的面积的证明:

车轮在地上旋转一圈的过程中,车轮圆周上的某一点划过的曲线就叫做“旋轮线”。在数学和物理中,旋轮线都有着非常重要而优美的性质。比如说,一段旋轮线下方的面积恰好是这个圆的面积的三倍。这个结论最早是由伽利略(Galileo Galilei,1564-1642)发现的。不过,在没有微积分的时代,计算曲线下方的面积几乎是一件不可能完成的任务。伽利略是如何求出旋轮线下方的面积的呢?

他的方法简单得实在是出人意料:它在金属板上切出旋轮线的形状,拿到秤上称了称,发现重量正好是对应的圆形金属片的三倍。

“称重”是对蒙特卡罗模拟法最形象的解释。

蒙特卡洛模拟

我们首先把旋轮线放在坐标系中:

旋轮线的方程为:

x=r*(θ-sinθ)

y=r*(1-cosθ)

旋轮线内切于一个矩形,并且将这个矩形分为两部分:旋轮线上方平面和下方平面。

假设点在平面上的分布是均匀的,而且所有点的面积、质量相等。则,旋轮线上方平面和下方平面的面积之比等于质量之比,也等于平面内点的个数之比。

如果从矩形区域内随机取点,随着次数的增加,在旋轮线上方平面内的总数与下方平面内的总数之比将趋向一个固定的数值。

这个数值,就是两个平面的面积之比。只要有了这个比例,计算上下两个平面的面积就简单了。

由于旋轮线是轴对称的,所以我们只研究[0,pi]区间内的面积比。

具体过程如下:

首先,在[0,2]内取一个随机数作为y,在[0,pi]内取一个随机数作为x,并且保证x和y是完全独立的。

然后,根据旋轮线方程,用y求解θ,再用θ计算x′。则(x′ , y)在旋轮线上。

最后,比较x和x′。如果x>x′,则随机取到的点(x , y)在旋轮线下平面内,计数变量counter增加1。否则,(x , y)在旋轮线上平面内。

重复以上过程N次,当N足够大时,counter/N的值就是上平面与下平面的面积之比。

用Matlab做100000次随机抽样,counter/N最后收敛至0.7502(这是旋轮线下方平面与矩形面积的比例)。

容易得到,旋轮线下方平面的面积为3.0008pi=0.7502*(2*2pi)。圆面积为pi。结论得证。

对于一些特殊分布的问题,只要调整产生随机数的算法就可以了。

随机数是蒙特卡洛模拟的关键

在TB上,用以下程序进行测试,只要K线根数足够多,Pips最终将收敛至0.75。

但是,在通达信上同样的逻辑,

Pips并不能收敛至0.75。

经过分析,TB中同一根K线上的Seed1和Seed2是两个独立的随机数。

但是在通达信中,同一根K线上的Seed1和Seed2是相同的。也就是说,随机数X和Y并不独立,存在线性关系Y=2/pi*X。

并且,这条直线在旋轮线下方平面内,所以,不管我们计算多少次,条件X2

图中Pips对1的偏离,并不是基于大数定理的收敛,而是计算误差。

蒙特卡洛模拟 matlab实例,蒙特卡洛模拟的简单例子相关推荐

  1. matlab编程进行卡尔曼滤波的简单例子

    1.matlab编程进行卡尔曼滤波的简单例子 clear N=50; x(1)=0; %理论速度初值v(1)=0 ut=-270; %加速度值 F=1; %状态转移矩阵 B=0.01; %控制矩阵 步 ...

  2. MATLAB contour 和 contourf 函数 简单例子

    MATLAB contour 和 contourf 函数 简单例子 x = -10:0.1:10; y = 0:0.1:5; % 横向201个数 纵向51个数 [X,Y] = meshgrid(x,y ...

  3. python遗传算法计算实例_遗传算法python简单例子(详解)

    # -*-coding:utf-8 -*- #目标求解sin(x)最大值 import random import math import matplotlib.pyplot as plt #初始化种 ...

  4. 协方差检验用在什么地方_通过一个简单例子,通俗讲下协方差分析

    内容来自:"小白学统计"微信公众号,感谢作者授权. 临床中经常碰到这种设计:研究对象分为两组,接受不同治疗(如治疗组和安慰组),每组分别在治疗前和治疗后测量观察指标(如血压值).目 ...

  5. 蒙特卡洛随机模拟的MATLAB实例解析纪录

    蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法. 假设我们有个y=x^2的表达式,如何用MC方法求得函数在[0,1]区间的定积分呢 ...

  6. 2021-04-09 随机模拟—蒙特卡洛方法 Matlab代码实现

    随机模拟-蒙特卡洛方法 Matlab代码实现 蒙特卡洛方法 蒙特卡洛方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出 ...

  7. V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电

    V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电. 充电开始时刻.放电时刻.日行驶里程等参数可以自己设置,易于修改. _:3120644246447334浪迹天涯

  8. V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电。 充电开始时刻、放电时刻、日行驶里程等参数可以自己设置,易于修改。

    V2G汽车的蒙特卡洛模拟matlab代码,可以从电网充电也可以向电网放电. 充电开始时刻.放电时刻.日行驶里程等参数可以自己设置,易于修改. :4720644246447334浪迹天涯

  9. 蒙特卡洛 股票 matlab,风险管理matlab蒙特卡洛模拟股票价格

    1. 蒙特卡洛模拟用于风险分析 蒙特卡洛模拟是风险评价.评估中常用的一种方法. 主要用于,当在项目评价中输入的随机变量个数多于3个,每个输入变量可能出现3个以上以致无限多种状态时(如连续随机变量),就 ...

  10. 蒙特卡洛原理及实例(附Matlab代码)

    文章目录 一.理论基础 1.1 伯努利大数定理 1.2 辛钦大数定理 1.3 切比雪夫大数定理 1.4 三者区别和联系 二.蒙特卡洛法 2.1 蒙特卡洛的起源 2.2 蒙特卡洛的解题思路 2.2 蒙特 ...

最新文章

  1. 五分钟让你搞懂什么是“构造方法”
  2. 安卓收取费用_作为自由职业者应收取的费用:以价值为基础的定价是否能达到炒作的目的?...
  3. 微信官方jssdk Demo -php版
  4. 【学习笔记】求解简单递归式的一般方法
  5. SAP Cloud for Customer的自动化测试指南
  6. leetcode236 二叉树的最近公共祖先
  7. javascript类功能代码集
  8. 开源跨平台的Fuchsia操作系统
  9. 海湾火灾自动报警系统中文编码查询表
  10. android微信版本怎么升级,微信版本怎么看 微信版本升级更新至最新版本方法介绍...
  11. 康佳电视android,康佳电视怎么连接手机 康佳电视连接手机步骤【图文介绍】
  12. java web 错误处理实例_javaweb异常提示信息统一处理(使用springmvc,附源码)
  13. excel批量添加超级链接
  14. Doc2Vec模型的介绍与gensim中Doc2Vec的使用
  15. 使用梯子导致的浏览器不能正常使用
  16. slack加错团队怎么退出_Slack团队聊天的最佳选择
  17. idea编译报错:Refer to the generated Javadoc files in ‘..\target\apidocs‘ dir. 解决
  18. 信用评分卡模型稳定度指标PSI
  19. 2022年cfa一级二级三级网课资源
  20. itchat 调用微信网页版 python 调用微信

热门文章

  1. 股票交易费用精确计算器
  2. 算法第四版 课后习题答案
  3. ARM指令集--相关指令的功能
  4. 动态lacp和静态lacp区别_LACP学习笔记
  5. 使用IDEA回退SVN到某个历史版本
  6. Tomcat日志总结
  7. 如何自己搭建测试环境
  8. 二本学院计算机专业的考研er如何顺利上岸?
  9. Linux进程通信之信号量
  10. 解决向日葵解锁密码忘记的问题,HKEY_LOCAL_MACHINE\SOFTWARE \Oray\SunLogin下没有\Oray\SunLogin目录