非交换函数乘积的导数

时间:2018-05-13 12:06:45

标签: python sympy commutativity

如果我在SymPy中使用函数并调用diff方法,则会忽略交换属性。

h = Function('h',real=True,commutative=False)(t)
R = Function('R',real=True,commutative=False)(t)
print(diff(R*h,t))
# returns:
R(t)*Derivative(h(t), t) + h(t)*Derivative(R(t), t)

我在这里做错了吗?我只想让输出总是在前面有R ..

1 个答案:

答案 0 :(得分:1)

这可以说是SymPy中的一个错误,determines the commutativity of a function from its arguments。另见this comment。它与衍生物无关:只需打印h*R即可揭示错误(表达式显示为R(t)*h(t))。

在此行为发生变化之前,似乎达到预期结果的唯一方法是将t声明为非交换行为:

t = Symbol('t', commutative=False)
h = Function('h', real=True)(t)
R = Function('R', real=True)(t)
print(diff(R*h, t))

打印

R(t)*Derivative(h(t), t) + Derivative(R(t), t)*h(t)