我正在尝试编写各种优化方法,作为一种修改方式。我希望能够使用 SymPy 在给定点评估具有任意数量变量的函数,其中点的坐标存储在数组中。
例如,我想f(x,y) = 3*x**2 - 2*x*y + y**2 + 4*x + 3*y
在点进行评估b = [1,2]
。但我真的很喜欢一种通用的方法,它可以处理一个具有任意数量的变量和适当长度数组的函数作为要评估的点,所以sympy.evalf(f, subs = {foo})
并不是很有用。
您正在使用 SymPy 表达式树,而不是函数。在任何表达式上,您都可以:
>>> vars = sorted(expression.free_symbols)
>>> evaluated = expression.subs(*zip(vars, your_values))
我也希望这更容易做到,但这是一个很好的解决方法:
如果您知道符号名称 ( 'x'
, 'y'
, eg),您可以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)))