Пользовательские правила упрощения в Sympy в псевдокольце - PullRequest
0 голосов
/ 09 мая 2018

Я использую Sympy для представления элементов пользовательского коммутативного псевдокольца. Я хотел бы проинформировать Sympy о некоторых конкретных правилах упрощения из моего домена, таких как

x*x = x
n*x = x

С этими правилами я ожидаю, что что-то вроде x*y*x + y*x будет упрощено в x*y. Есть ли способ сделать это в Sympy? Вы рекомендуете другим библиотекам делать это? (Я использую только expand, simplify, тестирование на равенство, subs и parse_expr)

1 Ответ

0 голосов
/ 18 мая 2018

После нескольких экспериментов мне лучше всего использовать пользовательские замены констант на основе их расширенного пути (см. Sympy doc на Epath )

formula = expand(simplify(EPath("/*/*/Integer").apply(formula, lambda x: Integer(1))))
formula = expand(simplify(EPath("/*/Integer").apply(formula, lambda x: Integer(1))))
formula = expand(simplify(EPath("/Integer").apply(formula, lambda x: Integer(1))))

Эти три строки в основном делаюттребуемое упрощение (например, x*y*x + y*x -> x*y).

Возможно, существуют более элегантные решения, но я публикую этот ответ, поскольку он может помочь другим людям.

...