Я пытаюсь интегрировать функцию над списком точки и передать весь массив функции интегрирования, чтобы векторизовать вещь. Для начала вызов scipy.integrate.quad слишком медленный, так как у меня есть что-то вроде 10 000 000 точек для интеграции. Использование scipy.integrate.romberg делает трюк намного быстрее, почти мгновенно, в то время как квадроцикл медленный, так как вы должны контактировать с ним или векторизовать его.scipy интегрировать по массиву с ограничениями переменных
Моя функция довольно сложная, но для демонстрационной цели, скажем, я хочу интегрировать x^2 из a в b, но x представляет собой массив скаляра для оценки x. Например
импорт NumPy в нп
from scipy.integrate import quad, romberg
def integrand(x, y):
return x**2 + y**2
quad(integrand, 0, 10, args=(10) # this fails since y is not a scalar
romberg(integrand, 0, 10) # y works here, giving the integral over
# the entire range
но это только работа для фиксированных границ. Есть ли способ сделать что-то вроде
z = np.arange(20,30)
romberg(integrand, 0, z) # Fails since the function doesn't seem to
# support variable bounds
Только, как я вижу это повторно реализовать сам алгоритм в NumPy и использовании, что вместо того, чтобы таким образом я могу иметь переменные границы. Любая функция, которая поддерживает что-то вроде этого? Существует также romb, где вы должны предоставить значения подынтегрального выражения напрямую и dx-интервал, но это будет слишком неточно для моей сложной функции (функция marcum Q не может найти никакой реализации, это может быть другим способом ее усечения).