我知道如何使用蒙特卡罗方法来计算积分,但我想知道是否可以将梯形法则与numpy结合起来以提高效率并得到相同的积分结果。我不确定哪种方法更快或后者是否可行?
例如,要对
这个可以很容易地计算出来:
在这种情况下很容易,但如果间隔没有像
所以,我的问题是能否在一个带有梯形法则的函数中积分连续函数(例如
这个方法比我在这里使用的方法更好吗?
欢迎任何建议。
例如,要对
e**-x**2 > y
进行积分,我可以使用蒙特卡罗方法,如下所示:import numpy as np
import matplotlib.pyplot as plt
X = np.random.rand(500000,2)
X[:,0] = X[:,0]*4-2
J = np.where(X[:,1] < np.exp(-X[:,0]**2))[0]
Xp = X[:2000]
Ip = [i for i in range(len(Xp)) if i in J]
Inp = [i for i in range(len(Xp)) if i not in J]
plt.plot(Xp[Ip,0],Xp[Ip,1], 'bd', Xp[Inp,0],Xp[Inp,1], 'rd')
plt.show()
这个可以很容易地计算出来:
print len(J) / 500000.0 * 4
这将会得到:
1.767784
在这种情况下很容易,但如果间隔没有像
[a,b],n
这样明确规定,并且我想制作一个函数,那么我认为上述方法不是特别有效,至少我是这么认为的。所以,我的问题是能否在一个带有梯形法则的函数中积分连续函数(例如
cos(x)/x
)的一个确定区间,比如[a,b]
?这个方法比我在这里使用的方法更好吗?
欢迎任何建议。
scipy.integrate
有什么问题吗? - Andrey Tyukin