заменить функцию sympy произвольными аргументами

Это должно быть легкой задачей, но мне трудно заставить ее работать в Sympy. Я хочу заменить неопределенную функцию с произвольными аргументами определенной формулой, например:

from sympy import *
var('a b c')
f= Function('f')
test= f(a+b)
lin= test.subs({f(c):2*(c)})
print(lin)

Я хочу, чтобы это распечатать

2*(a+b)

Однако для этого я должен использовать

lin= test.subs({f(a+b):2*(a+b)})

Должен ли я определять f как класс, чтобы выполнить эту замену?


person Craig    schedule 14.01.2015    source источник


Ответы (1)


Когда вы выполняете расширенные операции с выражениями, как это (хорошо, ваш пример все еще простой), метод замены очень полезно:

test.replace(f, lambda arg: 2*arg)  # returns: 2*x + 2*y

Из документов:

[заменить] Обходит дерево выражений и выполняет замену совпадающих подвыражений снизу вверх дерева.

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

person Oliver W.    schedule 14.01.2015
comment
Благодарю вас! Это было как раз то, что я искал. - person Craig; 15.01.2015