生成函数派生为Python可调用函数

时间:2018-05-24 18:19:21

标签: python function sympy mathematical-optimization nonlinear-optimization

我正在阅读此question,我正在努力做同样的事情,但我希望函数有一个参数说x。该参数是由优化求解器填充的“值”数组。例如:

def f(x):
   return x[0]**2 + 3*x[1]

该函数将引用:f(x)=x^2 + 3y,意思是x是一组变量。这些变量是否存在于当前函数中,因为它们是整个优化问题中的所有变量,这意味着它们可以出现在约束上。所以我想找到所有变量的函数偏导数。因此,在这种情况下,我将需要2个可调用的函数,因此我可以使用它来形成一个新的数组,它是函数的雅可比行列式。有没有办法做到这一点?怎么样?

1 个答案:

答案 0 :(得分:0)

免责声明:我是pyneqsys的作者。

如果您愿意使用库,pyneqsys就是这样做的。如果没有,你可以查看pyneqsys/symbolic.py的来源(大约)这样做来计算雅可比:

f = sympy.Matrix(self.nf, 1, self.exprs)
x = sympy.Matrix(self.nx, 1, self.x)
J = f.jacobian(x)

然后,您需要使用sympy.lambdify来获取具有特定解算器的预期语法的可调用对象。