首页 文章

lambdify表达式与原生的sympy函数

提问于
浏览
2

我想lambdify sympy的 exp ,但是当我试图在 sympy.Symbol 评估函数时遇到了一些有趣的问题 . 这个

import sympy

t = sympy.Symbol('t')
f = sympy.lambdify(t, t**2)
f(t)  # no problem

工作正常,但这个

t = sympy.Symbol('t')
f = sympy.lambdify(t, sympy.exp(t))
f(t)

AttributeError: 'Symbol' object has no attribute 'exp'

对于我尝试过的所有其他原生语言功能也是如此( logsin 等) .

知道发生了什么事吗?

2 回答

  • 2

    您应该使用 lambdify 函数的 modules 参数指定要使用的模块:

    f = sympy.lambdify(t, sympy.exp(t), modules=["sympy"])
    
  • 2

    lambdify 的主要用途是允许对表达式进行快速数值计算 . 这是通过将抽象和慢速SymPy函数(如 sympy.exp )替换为用于数字的更快的函数(如 math.expnumpy.exp )来实现的 . 这些不能处理SymPy符号(比如你的 t )作为参数,这不是 lambdify 无论如何 .

    如果使用 dummify=False 作为附加参数调用 lambdify ,则在调用 f(t) 时会出现更有意义的错误,即:

    TypeError: can't convert expression to float
    

    这里无法转换的表达式是您的参数 t .

    如果由于某种原因想要使用带符号作为参数的lambdified函数,则需要将 modules=["sympy"] 作为附加参数传递给 lambdify . 此参数指定 lambdify 用于替换SymPy函数的模块(如 sympy.exp ) - 在这种情况下,它再次为 sympy ,因此实际上没有任何实际发生 .

相关问题