Что-то вроде этого не совсем существует, как вы описываете, но это не сложно сделать, что вы хотите.
Во-первых, есть функция cse()
, которая тянетобщие подвыражения в качестве переменных автоматически.Однако он не будет использовать предопределенные переменные, если вы этого хотите.Но если ваша цель состоит в том, чтобы просто упростить оценку выражения, и вас не волнует, что такое промежуточные выражения, cse
- ваш лучший выбор.
Один прием, который вы можете использовать, состоит в том, чтобы выделить одну часть ваших подвыражений и заменить их.Например, скажем, у вас есть выражение expr
, содержащее x + y
, и вы хотите заменить x + y
на z
.Простое выполнение expr.subs(x + y, z)
часто работает.Но в некоторых случаях это не так, потому что subs
заменяет x + y
только в том случае, если он находит его точно в выражении.
Уловка, которую вы можете использовать вместо этого, состоит в том, чтобы «решить» (вы можете сделать это автоматически с solve
, если хотите) замену z = x + y
для одной переменной, такой как x = y - z
, и заменить ее (expr.subs(x, y - z)
).Поскольку нет никакой двусмысленности в том, где x
выглядит так, как было для x + y
, это заменит его везде.Вы часто должны expand
выражение, чтобы получить вещи, которые нужно отменить.