我正在尝试创建一个以函数作为输入的函数,该函数返回具有该函数及其派生元素的元组。在我所有的尝试中,即使该函数是符号函数,该函数的导数也被评估为零或一:我简化了代码以仅返回其派生代码:
t = var("t")
q = function("q")(t)
print("Expected",diff(q,t)) # return diff(q(t), t) as expected
Gamma(a) = diff(a)
print("Unexpected_v1 ",Gamma(q)) # return 1
Gamma(a) = diff(a,a.arguments()[0])
print("Unexpected_v2 ", Gamma(q)) # return 1
Gamma(a,b) = diff(a,b)
print("Unexpected_v3 ", Gamma(q,t)) # return 0
如何实现?
我不确定您要达到的目标。但是无论如何您的线路
Gamma(a) = diff(a)
有点危险,因为这不是合法的Python(未定义a
)。发生的事情是Sage“准备”了它:
sage: preparse('Gamma(a) = diff(a)')
'__tmp__=var("a"); Gamma = symbolic_expression(diff(a)).function(a)'
因此您可以看到a
现在是一个符号变量,因此它具有默认变量a
,因此派生显然是1
,并且您已分配Gamma(a)
始终返回此变量。其他的行为类似。
如果您确定输入将始终正确,则应https://sagecell.sagemath.org/?z=eJxLSU1T8K10K81L1kjTtOLlUgCCotSS0qI8hTSdlMy0NKAwLxcvV4mCrUJZYpGGUokSkF8I5KUB9ZRk5udpKBUqaWqUAEWh5hRqAgD_FBee&lang=sage&interacts=eJyLjgUAARUAuQ==
。
def MyFunc(f):
return f,diff(f)
t = var("t")
q = function("q")(t)
MyFunc(q)
不过,这是超级通用的,因此对于您的目的而言可能太大了。希望它为您指明了正确的方向。