我想对同情的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'
我尝试过的所有其他原生语音功能也是如此(log
,sin
等。)
知道发生了什么事吗?
答案 0 :(得分:2)
您应该使用modules
函数的lambdify
参数指定要使用的模块:
f = sympy.lambdify(t, sympy.exp(t), modules=["sympy"])
答案 1 :(得分:2)
lambdify
的主要用途是允许对表达式进行快速数值计算。
这是通过将抽象和慢速SymPy函数(如sympy.exp
)替换为用于数字的更快的函数(如math.exp
或numpy.exp
)来实现的。
这些不能作为参数处理SymPy符号(如t
),这不是lambdify
的目的。
如果您使用lambdify
作为附加参数调用dummify=False
,则在调用f(t)
时会收到更有意义的错误,即:
TypeError: can't convert expression to float
此处无法转换的表达式是您的参数t
。
如果由于某种原因想要使用带符号作为参数的lambdified函数,则需要将modules=["sympy"]
作为附加参数传递给lambdify
。
此参数指定lambdify
用于替换SymPy函数的模块(如sympy.exp
) - 在这种情况下,它再次为sympy
,因此实际上没有任何实际发生。