Я знаю, как использовать Монте-Карло для вычисления интегралов, но мне было интересно, можно ли использовать правило трапеции в сочетании с 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]
, в функцию с правилом трапеции?
И это лучше, чем метод, который я использовал здесь?
Любой совет приветствуется.