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

Искам да използвам елиптична функция, вградена в библиотеката на sympy, но нещо не е наред, когато се опитвам да lambdify 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