Оценка функции в точке 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)))