Скажем, у меня есть следующее выражение:
a*b*c + b*c + a*d
Его можно разложить на множители как:
b*(a*c + c) + (a*d)
, или как
c*(a*b + b) + (a*d)
, или как
a*d + b*c*(a + 1)
среди других возможностей.
Для других выражений количество возможностей может быть намного больше.
У меня вопрос, есть ли у SymPy какая-нибудь утилита, которая позволяет пользователю выбирать, какие из них отображать? Есть ли способ указать общий коэффициент / коэффициенты для использования при факторизации / группировке терминов в выражении?
РЕДАКТИРОВАТЬ: Как @ user772649 указывает ниже, я могу использовать для этого collect
. Однако collect
, кажется, дает разные результаты в зависимости от начальной факторизации математического выражения, например:
a,b,c,d = symbols("a,b,c,d")
# These two equations are mathematically equivalent:
eq1 = a*b*c + b*c + a*d
eq2 = a*d + b*c*(a + 1)
print collect(eq1, a)
print collect(eq2, a)
печатает:
a*(b*c + d) + b*c
a*d + b*c*(a + 1)
Уравнения eq1
и eq2
математически эквивалентны, но collect
выводит разную факторизацию для каждого из них, несмотря на то, что вызов команды collect
был одинаковым для обоих. Это подводит меня к следующим двум вопросам:
collect
?