【问题标题】:How to lambdify elliptic functions in sympy如何在 sympy 中对椭圆函数进行lambdify
【发布时间】:2015-11-25 13:56:30
【问题描述】:

我想使用 sympy 库中嵌入的 elliptic 函数,但是当我尝试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 函数。 谢谢

【问题讨论】:

    标签: python-3.x numpy ipython sympy


    【解决方案1】:

    答案在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')
    

    【讨论】:

    • 非常感谢,我没注意到! :)
    【解决方案2】:

    NumPy 没有椭圆函数,但 SciPy doeslambdify 还没有自动包含 SciPy 函数,所以你需要这样做

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

    请参阅the lambdify documentation 了解更多信息。

    【讨论】:

      【解决方案3】:

      sympy.functions.elliptic_k 也许?

      【讨论】:

      • 没有这个功能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多