Рекурсивная замена в симпы
У меня есть выражение симпатии с несколькими переменными, которые необходимо заменить. Проблема в том, что некоторые из выражений, которые должны быть заменены, также содержат экземпляры переменных, которые необходимо заменить.
from sympy import *
from sympy.abs import a,b, x,y
expr = a + b
replace = [[a, x+y], [b, 2*a]]
expr.subs(replace) # 2*a + x + y, I want 3*x + 3*y
Если список замен находится в правильном порядке, он будет применять каждую замену последовательно, хотя в моем реальном приложении я не знаю, какой порядок будет подходящим:
expr.subs(reversed(replace)) # 3*x + 3*y
Я могу форсировать подстановку, применяя подстановку n раз кexpr
или жеreplace
, но это кажется вычислительно расточительным:
result = expr
for _ in replace:
# Applying n times
result = result.subs(replace)
Я надеялся наrecursive
возможностьsubs
но этого, похоже, не существует. Есть лучшие варианты?