【发布时间】:2015-04-28 13:15:31
【问题描述】:
我有几个未定义函数的表达式,其中一些包含该函数的相应(未定义)导数。函数及其导数都仅作为数值数据存在。我想从我的表达式中创建函数,然后使用相应的数值数据调用该函数以数值计算表达式。不幸的是,我遇到了lambdify的问题。
考虑以下简化示例:
import sympy
import numpy
# define a parameter and an unknown function on said parameter
t = sympy.Symbol('t')
s = sympy.Function('s')(t)
# a "normal" expression
a = t*s**2
print(a)
#OUT: t*s(t)**2
# an expression which contains a derivative
b = a.diff(t)
print(b)
#OUT: 2*t*s(t)*Derivative(s(t), t) + s(t)**2
# generate an arbitrary numerical input
# for demo purposes lets assume that s(t):=sin(t)
t0 = 0
s0 = numpy.sin(t0)
sd0 = numpy.cos(t0)
# labdify a
fa = sympy.lambdify([t, s], a)
va = fa(t0, s0)
print (va)
#OUT: 0
# try to lambdify b
fb = sympy.lambdify([t, s, s.diff(t)], b) # this fails with syntax error
vb = fb(t0, s0, sd0)
print (vb)
错误信息:
File "<string>", line 1
lambda _Dummy_142,_Dummy_143,Derivative(s(t), t): (2*_Dummy_142*_Dummy_143*Derivative(_Dummy_143, _Dummy_142) + _Dummy_143**2)
^
SyntaxError: invalid syntax
显然 Derivative 对象没有正确解析,我该如何解决?
作为 lambdify 的替代方案,我也愿意使用基于 theano 或 cython 的解决方案,但我在使用相应的打印机时遇到了类似的问题。
感谢任何帮助。
【问题讨论】:
标签: python python-3.x sympy