使用蒙特卡洛算法来求函数y=x3在[0,1]上的积分值:
# 导入所需库
import random # random函数是符合正态分布的
import matplotlib.pyplot as plt #画图函数
import numpy as np
# 定义一个类
class MC():
def __init__(self, m): # 类与外界的接口
self.m = m
def MC(self):
N = 0 # 计算阴影区域的面积
x = [] # 自变量列表
y = [] # 因变量列表
for i in range(self.m):
x.append(random.uniform(0, 1))
y.append(random.uniform(0, 1))
if y[i] <= x[i]**3:
N += 1
else :
print(i)
return x, y, N/self.m
def drow_MC(self, X):
plt.figure()
X1 = []
for i in range(len(X)):
X1.append(X[i]**3)
X1.sort()
y = np.arange(self.m)
plt.plot(y, X1, linewidth=5) # 折线图
plt.scatter(y, X, c='r') # 散点图
plt.scatter(y, X, s=100, c='b', marker='.')
plt.title("****y=x3****")
plt.xlabel("X")
plt.ylabel("y")
plt.show()
if __name__ == '__main__':
mc = MC(1500)
x, _, rt = mc.MC()
print("y=x3函数的在[0-1]上的积分值为:", rt)
mc.drow_MC(x)
实现结果展示: