Интегральная функция (x, y) в python

#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 для получения дополнительной информации.

Редактировать: если есть проблемы, убедитесь, что вы используете числа с плавающей запятой вместо целых чисел.