如何在 sympy 中对椭圆函数进行 lambdify

How to lambdify elliptic functions in 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 函数。 谢谢

sympy.functions.elliptic_k 也许?

答案在lambdify的文档中:

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

因此您需要将相应模块的名称传递给 lambdify(对于 elliptic_k 函数是 sympy 而不是 numpy)。

ek=sym.lambdify(r,_ek,'sympy')

NumPy 没有椭圆函数,但是SciPy doeslambdify 尚未自动包含 SciPy 函数,因此您需要执行

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

有关详细信息,请参阅 the lambdify documentation