Производная произведения некоммутативных функций

Если я использую функции в 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 ответ

Решение

Возможно, это ошибка в SymPy, которая определяет коммутативность функции по ее аргументам. Смотрите также этот комментарий. Это не связано с производными: просто печать 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)
Другие вопросы по тегам