打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python实现蒙特卡罗方法

一、蒙特卡罗方法简介

蒙特卡罗(Monte Carlo)方法:简单来说,蒙特卡洛的基本原理简单描述是先大量模拟,然后计算一个事件发生的次数,再通过这个发生次数除以总模拟次数,得到想要的结果,精髓就是:用统计结果去计算频率,从而得到真实值的近似值。蒙特卡洛方法可以应用在很多场合,但求的是近似解,在模拟样本数越大的情况下,越接近与真实值,但样本数增加会带来计算量的大幅上升。

二、实例

1.求圆周率pi的近似值:
(1)正方形内部有一个相切的圆,它们的面积之比是π/4。现在,在这个正方形内部,随机产生10000个点,计算它们与中心点的距离,从而判断是否落在圆的内部,若这些点均匀分布,则圆周率 pi=res/n
其中res:表示落到圆内投点数 n:表示总的投点数
(2)代码

import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.patches import Circle# 投点次数n = 10000# 圆的半径、圆心r = 1.0a,b = (0.,0.)# 正方形区域x_min, x_max = a-r, a+ry_min, y_max = b-r, b+r# 在正方形区域内随机投点x = np.random.uniform(x_min, x_max, n) #均匀分布y = np.random.uniform(y_min, y_max, n)#计算点到圆心的距离d = np.sqrt((x-a)**2 + (y-b)**2)#统计落在圆内点的数目res = sum(np.where(d < r, 1, 0))#计算pi的近似值(Monte Carlo:用统计值去近似真实值)pi = 4 * res / nprint('pi: ',pi)#画个图fig = plt.figure()axes = fig.add_subplot(111)axes.plot(x, y,'ro',markersize = 1)plt.axis('equal') #防止图像变形circle = Circle(xy=(a,b), radius=r ,alpha=0.5)axes.add_patch(circle)plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

(3)运行结果:


pi的值是:

可以看出存在一定误差,模拟样本越大,误差也会随之减小。
2.求定积分的近似值
(1)在一个1×1的正方形区域里,使用蒙特卡洛方法,随机在这个正方形里面产生大量随机点(数量为n),计算有多少点(数量为res)落在函数下方区域内,res/n就是所要求的积分值,也即红色区域的面积。
(2)代码

n = 30000#矩形边界区域x_min, x_max = 0.0, 1.0y_min, y_max = 0.0, 1.0#在矩形区域内随机投点xx = np.random.uniform(x_min, x_max, n)#均匀分布y = np.random.uniform(y_min, y_max, n)#统计落在函数y=x^2下方的点res = sum(np.where(y < f(x), 1 ,0))#计算定积分的近似值integral = res / nprint('integeral: ', integral)# 画个图fig = plt.figure()axes = fig.add_subplot(111)axes.plot(x, y,'ro',markersize = 1)plt.axis('equal') # 防止图像变形axes.plot(np.linspace(x_min, x_max, 10), f(np.linspace(x_min, x_max, 10)), 'b-') # 函数图像#plt.xlim(x_min, x_max)plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

(3)运行结果


积分值:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
粒子滤波
简单易学!一步步带你理解机器学习算法——马尔可夫链蒙特卡罗(MCMC)
资源 | 跟着Sutton经典教材学强化学习中的蒙特卡罗方法(代码实例)
matplotlib 设置坐标轴位置(spines),设置坐标别名(xticks,yticks)
最速降线
Ch1概率论的基本概念 延伸阅读:蒲丰投针试验及其它
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服