Sympy: Как минимизировать количество умножений в многомерных выражениях? - PullRequest
1 голос
/ 19 октября 2019

У меня много выражений, которые по умолчанию записываются в виде сумм произведений переменных. Эти выражения могут быть довольно длинными. Я хотел бы упростить эти выражения, чтобы иметь как можно меньше умножений. Сокращенный пример:

from sympy import symbols, cse, factor, simplify, count_ops, collect
a,b,c=symbols("a b c", integer=True, positive=True)
e = a*a*b + a*a + a*b*b + a*b*c + 4*a*b + a*c + 3*a + b*b*c + 4*b*c + 3*c + 1

Я хотел бы получить что-то вроде:

(a + b + 3) * (a + c) * (b + 1) + 1

, который в данном случае имеет только 3 умножения и 5 сложений.

Функции Sympy, такие как factor, не работают из-за дополнительных условий.

simplify продолжает настаивать на создании сумм простых факторов, даже когда я экспериментирую с аргументом меры для наказания степеней и умножений.

cse разделяет только продукты простых терминов.

Есть ли способ сгенерировать подобные упрощения с симпати?

...