蒙特卡罗模拟 - python实现

基本原理

蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数字方法来加以模拟,即进行一种数字模拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。

主要步骤如下:
1.构造或描述概率过程
2.实现从已知概率分布抽样
3.建立各种估计量

示例一:π值的计算
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline

# π的计算

n=30000

r=1.0 #半径
a,b=(0.0,0.0) #圆心
xmin,xmax=a-r,a+r
ymin,ymax=b-r,b+r

x=np.random.uniform(xmin,xmax,n)
y=np.random.uniform(ymin,ymax,n)

fig=plt.figure(figsize=(6,6))
axes=fig.add_subplot(1,1,1)
plt.plot(x,y,'ro',markersize=1)
plt.axis('equal')

d=np.sqrt((x-a)**2 + (y-b)**2)
res=sum(np.where(d<r,1,0))
print('落在圆内的点有%i个' % res)

pi = 4*res/n
print("π的近似值为:",pi)

#绘制圆形
from matplotlib.patches import Circle
circle=Circle(xy=(a,b),radius=r,alpha=0.5,color='r')
axes.add_patch(circle)
plt.grid(True,linestyle='--',linewidth='0.5')
plt.show()

在这里插入图片描述

示例二:计算积分y=x^2
n=10000 #投点次数

#矩形区域边界
x_min,x_max=0.0,1.0
y_min,y_max=0.0,1.0

#在矩形区域内随机投点
x=np.random.uniform(x_min,x_max,n)
y=np.random.uniform(y_min,y_max,n)

#创建函数y=x**2
def f(x):
    return x**2

#统计落在函数y=x^2图像下方的点的数目
res=sum(np.where(y<f(x),1,0))

#计算定积分的近似值
integral=res/n
print('integral:',integral)

#绘制散点图
fig=plt.figure(figsize=(6,6))
axes=fig.add_subplot(1,1,1)
axes.plot(x,y,'ro',markersize=1)
plt.axis('equal')

#绘制y=x^2面积图
xi=np.linspace(0,1,100)
yi=xi**2
plt.plot(xi,yi,'--k')
plt.fill_between(xi,yi,0,color='r',alpha=0.5,label='area')
plt.grid()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jepson2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值