蒙特卡罗方法,又称随机抽样或统计试验方法,是以概率和统计理论方法为基础的一种计算方法。
使用随机数(或者更常见的伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,
用电子计算机实现统计模拟或抽样,以获得问题的近似解。
基本原理:
蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。
它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解。
可以把蒙特卡罗解题归结为三个主要步骤:
1,构造或描述概率过程
2,实现从已知概率分布抽样
3,建立各种估计量
借助计算机技术,蒙特卡罗模拟实现了两大优点:
1,简单,省却了繁复的数学报导和演算过程,使得一般人也能够理解和掌握
2,快捷,是蒙特卡罗方法在现代项目管理中获得应用的技术基础
特点:随机采样上计算得到近似结果,随着采样的增多,得到的结果是正确结果的概率逐渐加大。
举例:
# Π的计算:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
n = 10000
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)
# 每一个点都是在x轴,和y轴上有具体的位置。那么要求每一个点到中心0.0的距离,就要用到a**2 + b**2 = c**2 三角形求斜边的公式。
# 最后判断每一个点到中心0.0的距离是不是小于半径r
res = sum(np.where(d<r, 1, 0))
pi = 4 * res / n
pi
#画圆
from matplotlib.patches import Circle
circle = Circle(xy = (a,b), radius=r, alpha=0.5, color='gray')
axes.add_patch(circle)
plt.grid(True, linestyle='--', linewidth='0.8')
plt.show()