蒙塔卡罗算法
#蒙塔卡罗算法
import numpy as np
import random
import matplotlib.pyplot as plt
class MC:
def __init__(self):
#计数
self.n=0
# 投点次数
self.N = 10000
# 矩形区域边界
self.x_min, self.x_max = 0.0, 1.0
self.y_min, self.y_max = 0.0, 1.0
#随机点
self.x = np.random.uniform(0,1,10000) # 均匀分布
self.y = np.random.uniform(0,1,10000)
def mc(self):
'''for i in range(self.N):
x=self.x
y=self.y
if y<=x**3:
self.n+=1
else:
self.n=self.n
print(self.n)
print(self.N)
print(self.n/self.N)'''
res = sum(np.where(self.y < self.x**3, 1, 0))
print(res/self.N)
def draw_MC(self):
def f(x):
return x ** 3
# 画图
fig = plt.figure()
axes = fig.add_subplot(111)
axes.plot(self.x,self.y, 'ro', markersize=1)
plt.axis('equal') # 防止图像变形
axes.plot(np.linspace(self.x_min, self.x_max, 10) , f(np.linspace(self.x_min, self.x_max, 10)), 'b-') # 函数图像
#plt.xlim(x_min, x_max)
plt.show()
if __name__=='__main__':
mm = MC()
mm.mc()
mm.draw_MC()