猿问

使用 scipy 最小化带参数的函数

我想问一下如何用scipy最小化中的优化方法来最小化一个函数(平方误差的总和)。我试过了,但似乎我做得不好,因为错误和参数没有从初始值改变。这是我的代码:


def objective(p, y):

    y = np.array([98.494500, 97.828500, 97.610000, 97.314000, 97.014500, 92.959000, 96.696222])

    p = beta0, beta1, beta2, beta3, tau1, tau2

    return  (((100 * DiscountFactor('rate',np.exp(p[0] + (p[1]+ p[2]) * (1 - np.exp(-yearfractionTenors()/p[4])) * p[4]/yearfractionTenors() - p[2] * np.exp(-yearfractionTenors()/p[4]) + p[3] * (1 - np.exp(-yearfractionTenors()/p[5])) * p[5] / yearfractionTenors() - p[3] * np.exp(-yearfractionTenors() / p[5])) -1, fecha_valoracion, maturity, composition= 'linear', basis= 'act/360').result) - y) ** 2).sum()

x0 = np.array([0.03, -0.03, 0, 0, 1, 1]) #Initial values of beta0, beta1, beta2, beta3, tau1 and tau2

res = optimize.minimize(objective, x0, args = y)

print(res)

output: fun: 64.30571361326217

hess_inv: array([[1, 0, 0, 0, 0, 0],

   [0, 1, 0, 0, 0, 0],

   [0, 0, 1, 0, 0, 0],

   [0, 0, 0, 1, 0, 0],

   [0, 0, 0, 0, 1, 0],

   [0, 0, 0, 0, 0, 1]])

  jac: array([0., 0., 0., 0., 0., 0.])

  message: 'Optimization terminated successfully.'

  nfev: 8

  nit: 0

  njev: 1

 status: 0

 success: True

    x: array([ 0.03, -0.03,  0.  ,  0.  ,  1.  ,  1.  ])

我的错误似乎是我没有以好的方式使用输入值(初始值)。我想知道是否有人可以帮助我解决这个问题。


守候你守候我
浏览 177回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答