Оценка функции в точке SymPy
Я пытаюсь кодировать различные методы оптимизации, как способ пересмотра. Я хочу иметь возможность использовать SymPy для оценки функции с произвольным числом переменных в данной точке, где координаты точки хранятся в массиве.
например, я хотел бы оценить f(x,y) = 3*x**2 - 2*x*y + y**2 + 4*x + 3*y
в точке b = [1,2]
. Но мне бы очень хотелось, чтобы это был общий способ, который может обрабатывать функцию с любым количеством переменных и соответствующим массивом длины в качестве точки оценивается как, так sympy.evalf(f, subs = {foo})
на самом деле не очень полезно.
2 ответов
вы работаете с деревьями выражений симпатии, а не с функциями. По любому выражению можно сделать:
>>> vars = sorted(expression.free_symbols)
>>> evaluated = expression.subs(*zip(vars, your_values))
Я бы также ожидал, что это будет проще сделать, но вот хороший обходной путь:
если вы знаете имена символов ('x'
,'y'
, например), вы можете создать dict
С помощью zip
:
fvars = sympy.symbols('x, y') #these probably already exist, use: fvars = [x,y]
b = [1,2]
sympy.evalf(f, subs = dict(zip(fvars,b)))