Как ламбдифицировать эллиптические функции в sympy

Я хочу использовать эллиптическую функцию, встроенную в библиотеку sympy, но что-то не так, когда я пытаюсь лямбдифицировать elliptic(f(z)), где f — символьная функция:

import sympy as sym
import numpy as np

r = sym.S('r')
_f = 500.0*r
f=sym.lambdify(r,_f,'numpy')

f(np.arange(0,1.1,0.1) )

Вывод правильный:

array([   0.,   50.,  100.,  150.,  200.,  250.,  300.,  350.,  400.,
    450.,  500.])

Затем я пробую f2(f(r)):

_f2 = _f/10
f2= sym.lambdify(r,_f2,'numpy')

f2(np.arange(0,1.1,0.1) )

И это работает:

array([  0.,   5.,  10.,  15.,  20.,  25.,  30.,  35.,  40.,  45.,  50.])

Но когда я пытаюсь:

_ek=sym.elliptic_k(_f)
ek=sym.lambdify(r,_ek,'numpy')

ek(0)

Я получил:

Traceback (most recent call last):

File "<ipython-input-17-35ab6a3fc36f>", line 1, in <module>
EK(0)

File "<string>", line 1, in <lambda>

NameError: name 'elliptic_k' is not defined

Любые идеи, как это решить? Конечно, я бы не хотел переписывать все функции elliptic_k, если это возможно. Спасибо


person Oscar Gargiulo    schedule 25.11.2015    source источник


Ответы (3)


sympy.functions.elliptic_k возможно?

person Severin Pappadeux    schedule 25.11.2015
comment
Нет такой функции. - person Emilien; 25.11.2015

Ответ находится в документации lambdify:

Attention: Functions that are not in the math module will throw a name error when the lambda function is evaluated!.

Таким образом, вам нужно передать lambdify имя соответствующего модуля (которое sympy, а не numpy для функции elliptic_k).

ek=sym.lambdify(r,_ek,'sympy')
person Emilien    schedule 25.11.2015
comment
Спасибо большое, я этого не заметил! :) - person Oscar Gargiulo; 25.11.2015

NumPy не имеет эллиптических функций, но SciPy делает. lambdify еще не включает функции SciPy автоматически, поэтому вам нужно будет сделать

lambdify(r, _ek, modules=['numpy', {'elliptic_k': scipy.special.ellipk}]) 

Дополнительную информацию см. в документации lambdify. .

person asmeurer    schedule 01.12.2015