import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
def f(x): # 求f(x)在2-3之间的定积分
return x ** 2
def f0():
def intf(x): # 原函数
return x ** 3 / 3.0
exactVal = intf(2) - intf(0)
return exactVal
def f1():
def g(x):
return 1 / 2
def z(x): # f(x)/g(x)
return f(x) / g(x)
a = 0
b = 2
N = 10000 # 一万次实验
X = np.random.uniform(low=a, high=b, size=N) # 利用均匀分布随机生成N个区间为【a,b】的数
Y = z(X) # 带入函数f(x)计算对应y值
return np.sum(Y) / N # 计算N次结果的均值
def f2():
def g(x):
return x / 2.0
def z(x): # f(x)/g(x)
return f(x) / g(x)
a = 0
b = 2
N = 10000 # 一万次实验
X = np.random.uniform(low=a, high=b, size=N) # 利用均匀分布随机生成N个区间为【a,b】的数
Y = z(X) # 带入函数f(x)计算对应y值
return np.sum(Y) / N # 计算N次结果的均值
def f3():
def g(x):
return 3 * x * x / 8.0
def z(x): # f(x)/g(x)
return f(x) / g(x)
a = 0
b = 2
N = 10000 # 一万次实验
X = np.random.uniform(low=a, high=b, size=N) # 利用均匀分布随机生成N个区间为【a,b】的数
Y = z(X) # 带入函数f(x)计算对应y值
return np.sum(Y) / N # 计算N次结果的均值
print(f0())
print(f1())
print(f2())
print(f3())
"""
2.6666666666666665
2.642675506081223
1.980958484741736
2.666666666666666
问题: f2() 为什么会比 f1() 差一些呢? 如何痕量选择最佳的 q(x) 函数
"""
0条评论