Математическая интеграция функции в Python - PullRequest
3 голосов
/ 19 февраля 2011

Я пытаюсь интегрировать эту функцию:

enter image description here

Однако я сталкиваюсь с ошибкой:

Traceback (most recent call last):

  File "<ipython console>", line 1, in <module>

  File "siestats.py", line 349, in NormalDistro

    P_inner = scipy.integrate(NDfx,-dev,dev)

TypeError: 'module' object is not callable

Мой код выполняет это:

# Definition of the mathematical function:
def NDfx(x):

    return((1/math.sqrt((2*math.pi)))*(math.e**((-.5)*(x**2))))

# This Function normailizes x, u, and o2 (position of interest, mean and st dev) 
# and then calculates the probability up to position 'x'

def NormalDistro(u,o2,x):


    dev = abs((x-u)/o2)


    P_inner = scipy.integrate(NDfx,-dev,dev)

    P_outer = 1 - P_inner

    P = P_inner + P_outer/2

    return(P)

Функция NormalDistro предназначена для импорта и используется следующим образом:

foo.NormalDistro(30,2.5,1.25)

В качестве примера.

Ответы [ 3 ]

7 голосов
/ 19 февраля 2011

Модуль, который вы пытаетесь вызвать, - scipy.integrate, вам необходимо вызвать одну из функций внутри модуля.Основываясь на предыдущих комментариях к chat , вы, вероятно, хотите использовать scipy.integrate.quad().

. Кроме того, он возвращает кортеж (Result,MaximumError), поэтому вы не должны использовать P_inner напрямуюсумма за P, вы хотите P = P_inner[0] + P_outer/2

2 голосов
/ 19 февраля 2011

return не требует (), просто return P работает просто отлично

Хотя это на самом деле не решит проблему, которую вы видите, так как return(foo) также должен работать.

Дополнительная информация об ошибке будет полезна.

1 голос
/ 03 марта 2011

Интеграл гауссиана определяется как функция ошибки . Он доступен из pythons math libaray или scipy.special (если вам нужна векторизованная функция). Это называется эрф. Также доступна erfc, дополнительная функция ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...