2015-01-14 6 views
3

Это должна быть легкая задача, но мне трудно заставить ее работать в 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 как класс, чтобы сделать эту замену?

ответ

4

Когда вы делаете advanced expression manipulation как это (хорошо, ваш пример еще просто), то replace method очень полезно:

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

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

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

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

+0

Спасибо! Это было именно то, что я искал. – Craig

Смежные вопросы