如何在 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 does。 lambdify
尚未自动包含 SciPy 函数,因此您需要执行
lambdify(r, _ek, modules=['numpy', {'elliptic_k': scipy.special.ellipk}])
有关详细信息,请参阅 the lambdify documentation。
我想使用 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 does。 lambdify
尚未自动包含 SciPy 函数,因此您需要执行
lambdify(r, _ek, modules=['numpy', {'elliptic_k': scipy.special.ellipk}])
有关详细信息,请参阅 the lambdify documentation。