#python #module #integral
#python #модуль #интеграл
Вопрос:
У меня есть функция, подобная:
(np.sqrt((X)**2 (Y)**2))/(np.sqrt((X)**2 (Y)**2 d**2))
Я написал программу для вычисления интеграла с использованием рядов:
for i in range (num): # for X
print i
Y=(-distance)
for j in range(num): # for Y
f=(np.sqrt((X)**2 (Y)**2))/(np.sqrt((X)**2 (Y)**2 d**2))
Y=Y delta
sum =(f*(delta**2))/((2*distance)**2)
X=X delta
print sum
И это отлично работает для меня.. Но для какой-то сложной функции это занимает слишком много времени.
Существует ли какой-либо модуль python для интеграции этой функции, когда -2.0 < X
и Y < 2.0
? (или что-то еще)
Комментарии:
1. Если у вас нет SciPy, вы, вероятно, захотите его получить: docs.scipy.org/doc/scipy/reference/integrate.html
Ответ №1:
Я предполагаю, что вы хотите интегрировать fun
между x
равными a
и b
и y
равными c
и d
. В этом случае вам нужно сделать следующее:
import numpy as np
# Define 'd' to whatever value you need
d = 1.
# Function to integrate
fun = lambda x, y: np.sqrt(x**2. y**2.) / np.sqrt(x**2. y**2. d**2.)
# Limits of integration
a, b = -2., 2.
c, d = -2., 2.
gfun = lambda x: c
hfun = lambda x: d
# Perform integration
from scipy.integrate import dblquad
int, err = dblquad(fun, a, b, gfun, hfun)
Если вам нужны более сложные пределы интеграции, вам просто нужно изменить gfun
и hfun
. Если вас интересует более продвинутая функция, вы можете ознакомиться с документацией dblquad
: http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.dblquad.html#scipy.integrate.dblquad
Ответ №2:
Для этого есть библиотека, scipy.integrate
. Это должно быть довольно просто сделать:
func = lambda y: (np.sqrt((X)**2 (Y)**2))/(np.sqrt((X)**2 (Y)**2 d**2)) and a == -2 and b == 2
from scipy import integrate
integrate.quad(func, a b)
Это должно сделать это. Я бы обратился к документации для SciPy для получения дополнительной информации.
Редактировать: если есть проблемы, убедитесь, что вы используете числа с плавающей запятой вместо целых чисел.