Jacobian in scipy.optimize.minimize form

时间:2017-11-29 11:36:12

标签: python optimization scipy

我的目标是优化具有一些约束的度数多项式函数的最小二乘,所以我的目标是使用scipy.optimize.minimize(...., method = 'SLSQP', ....)。在最优化中,在方法中传递雅可比总是好的。 但是,我不确定如何设计我的' jac'功能

我的目标函数如下所示:

def least_squares(args_pol, x, y):
    a, b, c, d, e = args_pol
    return ((y-(a*x**4 + b*x**3 + c*x**2 + d*x + e))**2).sum() 

其中xy是numpy数组并包含点的坐标。我在文档中找到了“jacobian' scipy.ompitmize.minimize是梯度ob目标函数,因此它是一阶导数。

对于args_pol,它很容易找到第一个导数,例如

db = (2*(a*x**4 + b*x**3 + c*x**2 + d*x + e - y)*x**3).sum()

但我的numpy.array x中的每个[x_i]都是衍生物

dx_i = 2*(a*x[i]**4 + b*x[i]**3 + c*x[i]**2 + d*x[i] + e - y[i])*
       (4*a*x[i]**3 + 3*b*x[i]**2 + 2*c*x[i] + d)

以及每个y_i等等。因此,合理的方法是将每个导数计算为numpy.array dxdy

我的问题是 - 渐变返回的函数应该是什么形式的结果?例如它应该是

return np.array([[da, db, dc, dd, de], [dx[1], dx[2], .... dx[len(x)-1]], 
                 [dy[1], dy[2],..........dy[len(y)-1]]])

或应该看起来像

return np.array([da, db, dc, dd, de, dx, dy])

感谢您的任何解释。

0 个答案:

没有答案