Как заменить некоммутативные произведения в SymPy выражениями?Python

Программы на Python
Anonymous
Как заменить некоммутативные произведения в SymPy выражениями?

Сообщение Anonymous »

Я хочу обойти ограничение Sympy, заключающееся в частичном коммутативном поведении. Если я определяю некоммутативные символы

Код: Выделить всё

import sympy as sy
u = sy.Symbol('u',commutative=False)
v = sy.Symbol('v',commutative=False)
t = sy.Symbol('t',commutative=False)
тогда

Код: Выделить всё

uv = u*v-v*u
uv.expand()
дает

Код: Выделить всё

u*v - v*u
Теперь u и v, хотя и не коммутируют с другими символами, такими как t, на самом деле коммутируют, т. е. я хочу, чтобы приведенное выше давало ноль. Судя по всему, я не могу заставить себя так предположить. Итак, я пытаюсь обойти это, используя замену. С

Код: Выделить всё

uv.expand().xreplace({u*v:v*u})
Я действительно получаю 0, как и хотелось. Все идет нормально. Но теперь я хочу, чтобы это работало и в более длинных выражениях. Пусть

Код: Выделить всё

ut = u*t-t*v
vt = v*t-t*v
vut = v*ut - ut*v
uvt = u*vt - vt*u
x = (uvt - vut).expand()
отдает правильно

Код: Выделить всё

t*u*v - t*v*u - u*v*t + v*u*t
Но поскольку вы и v ездите на работу, это фактически исчезает. Итак, я, как и раньше, попробовал

Код: Выделить всё

x.expand().xreplace({u*v:v*u})
но не получите, но такой же, как и раньше (без замены).

Как заменить все товары u*v на обратные?

Вернуться в «Python»