非交换函数乘积的导数

The derivative of the product of non-commutative functions

如果我在 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..

这可以说是 SymPy 中的一个错误,determines the commutativity of a function from its arguments. See also 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)