Matlab和Python中的优化算法(狗腿信任区域)

时间:2016-12-05 13:15:08

标签: python matlab optimization scipy minimization

我正在尝试使用Matlab和Python中的狗腿信任区域算法来解决一组非线性方程。

在Matlab中有fsolve这个算法是默认的,而对于Python,我们在scipy.optimize.minimize中指定'dogleg'。我不需要为Matlab指定Jacobian或Hessian,而Python需要一个来解决问题。

我没有Jacobian / Hessian所以有没有解决这个问题的方法?或者是否有另一个函数在fsolve

中执行相当于Matlab的dog-leg方法

1 个答案:

答案 0 :(得分:2)

在较新版本的scipy中有approx_fprime函数。它使用foward步长有限差分计算位置f处的函数xk的雅可比的数值近似。它返回一个ndarray,其中f的部分派生位于xk位置。

如果您无法升级您的scipy版本,则可以随时从scipy's source复制实施。

编辑:

如果输入scipy.optimize.minimize

approx_fprime会在内部调用jac=False。因此,在您的情况下,应该足以执行以下操作:

scipy.optimize.minimize(fun, x0, args, method='dogleg', jac=False)

修改

scipy似乎无法正确处理jac=False条件,因此有必要使用jac构建可调用的approx_fprime,如下所示

jac = lambda x,*args: scipy.optimize.approx_fprime(x,fun,epsilon,*args)
scipy.optimize.minimize(fun, x0, args, method='dogleg', jac=jac)