初学者都能看懂的蒙特卡洛方法以及python实现

初学者都能看懂的蒙特卡洛方法以及python实现1 什么是蒙特卡洛方法 MonteCarlome 蒙特卡罗方法也称统计模拟方法 是 1940 年代中期由于科学技术的发展和电子计算机的发明 而提出的一种以概率统计理论为指导的数值计算方法 是指使用随机数 或更常见的伪随机数 来解决很多计算问题的方法 20 世纪 40 年代 在冯 诺伊曼 斯塔尼斯拉夫 乌拉姆和尼古拉斯 梅特罗波利斯在洛斯阿拉莫斯国家实验室为核武器计划工作时 发明了蒙特卡罗

1.什么是蒙特卡洛方法(Monte Carlo method)

2.蒙特卡洛方法的基本思想

3.蒙特卡洛求定积分

在此图中,做了四次随机采样,得到了四个随机样本 x 1 , x 2 , x 3 , x 4 x_1, x_2, x_3, x_4 x1,x2,x3,x4,并且得到了这四个样本的 f ( x i ) f(x_i) f(xi)的值分别为 f ( x 1 ) , f ( x 2 ) , f ( x 3 ) , f ( x 4 ) f(x_1), f(x_2), f(x_3), f(x_4) f(x1),f(x2),f(x3),f(x4)。对于这四个样本,每个样本能求一个近似的面积值,大小为 f ( x i ) ∗ ( b − a ) f(x_i)*(b-a) f(xi)(ba)。为什么能这么干么?对照图下面那部分很容易理解,每个样本都是对原函数f的近似,所以我们认为 f ( x ) f(x) f(x)的值一直都等于 f ( x i ) f(x_i) f(xi)

按照图中的提示,求出上述面积的数学期望,就完成了蒙特卡洛积分。

当然实际应用中,我们最常用的还是取 f X f_X fX为均匀分布:
f X ( x ) = 1 b − a , a ≤ x ≤ b f_X(x) = \frac{1}{b – a}, a \le x \le b fX(x)=ba1,axb
此时
g ∗ ( x ) = ( b − a ) g ( x ) g^*(x) = (b-a)g(x) g(x)=(ba)g(x)
代入积分表达式有:
I = ( b − a ) ∫ a b g ( x ) 1 b − a d x I = (b-a) \int_a^b g(x) \frac{1}{b-a}dx I=(ba)abg(x)ba1dx










4.蒙特卡洛方法python实例

首先看一个经典的用蒙特卡洛方法求 π \pi π值。

import random def calpai(): n =  r = 1.0 a, b = (0.0, 0.0) x_neg, x_pos = a - r, a + r y_neg, y_pos = b - r, b + r count = 0 for i in range(0, n): x = random.uniform(x_neg, x_pos) y = random.uniform(y_neg, y_pos) if x*x + y*y <= 1.0: count += 1 print (count / float(n)) * 4 
def integral(): n =  x_min, x_max = 0.0, 1.0 y_min, y_max = 0.0, 1.0 count = 0 for i in range(0, n): x = random.uniform(x_min, x_max) y = random.uniform(y_min, y_max) # x*x > y,表示该点位于曲线的下面。所求的积分值即为曲线下方的面积与正方形面积的比。 if x*x > y: count += 1 integral_value = count / float(n) print integral_value 

代码运行的结果为:

0. 

由此可见,与解析值的结果误差还是比较小的。

参考文献:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204342.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午8:30
下一篇 2026年3月19日 下午8:30


相关推荐

  • 滑动窗口算法

    滑动窗口算法什么是滑动窗口算法我们学习过计算机网络都知道为了避免拥塞发生 在网络传输时有滑动窗口协议控制传输时流量 该协议允许发送方在停止并等待确认前发送多个数据分组 由于发送方不必每发一个分组就停下来等待确认 因此该协议可以加速数据的传输 提高网络吞吐量 这个跟我们今天说的滑动窗口算法是一个原理 滑动窗口算法的作用该算法的作用就是将我们多层嵌套的循环语句根据局部最优解来转换为单个的循环语句 从而减少时

    2026年3月20日
    2
  • 什么是跨域跨域解决方法_500错误原因解决方法

    什么是跨域跨域解决方法_500错误原因解决方法一、为什么会出现跨域问题出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协…

    2022年4月18日
    491
  • 从mssql (sqlserver2000)中导出数据到mysql 中用load data

    从mssql (sqlserver2000)中导出数据到mysql 中用load data

    2021年4月28日
    179
  • 3D游戏建模真的很累吗?前景怎么样?又需要哪样的基础

    3D游戏建模真的很累吗?前景怎么样?又需要哪样的基础所有行业都是一样的,没有什么容易的,只不过这一行是偏向于技术的,一个有好的建模师月薪10k+是很常见的,这个需要有自己刻苦学习的成果。游戏建模前景在游戏模型行业,你基本不用担心找不到工作,因为游戏模型师人才缺口非常大。举个例子:游戏制作公司的人员配比大多数是这样的:比如100人的三维制作组,可能有60人在做模型贴图,10个人在K动画。只要你保证技能在手,一定是抢手的人才。在几年前游戏建模这个行业不仅仅缺人才,甚至连新手都非常稀缺,那个时候公司愿意招聘实习生,培养他们然后给公司干活,但是工资一定不

    2022年5月19日
    49
  • SpringBoot线程池使用详解

    SpringBoot线程池使用详解前提摘要:基于Springboot2.1.4.RELEASE▎配置TaskExecutorimportjava.util.concurrent.ThreadPoolExecutor;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.core.ta…

    2022年6月22日
    42
  • fpga的spi的编程_UASP协议

    fpga的spi的编程_UASP协议什么是SPI协议?如何用FPGA实现?

    2022年10月16日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号