Я пытаюсь найти локальный минимум функции, используя метод scipy BFGS
Но мне нужно добавить еще одну функцию rosen и изменить функцию rosen_der, но я не понимаю, что мне нужноизменить, чтобы заставить его работать, когда я переключаюсь на свою новую функцию, я смотрю некоторую проблему с => Warning: Desired error not necessarily achieved due to precision loss
, и не имею итераций
import numpy as np
from scipy.optimize import minimize
def rosen(x):
"""The Rosenbrock function"""
# x = x[:-1]
# y = y[1:]
return np.sum(100.0 * (x[1:] - x[:-1] ** 2.0) ** 2.0 + (1 - x[:-1]) ** 2.0, axis=0)
# need use this function => return np.sum((10 ** -6) / ((x[:-1] ** 2 - 0.001 ** 2) ** 2 + ((x[:-1] / x[1:]) * 0.001) ** 2) ** 0.5, axis=0)
def rosen_der(x):
# also need change this all to work with new function
xm = x[1: -1] # also dont understand what that var is mean (1)
xm_m1 = x[:-2] # also dont understand what that var is mean (2)
xm_p1 = x[2:] # also dont understand what that var is mean (3)
der = np.zeros_like(x)
der[1: -1] = 200 * (xm - xm_m1 ** 2) - 400 * (xm_p1 - xm ** 2) * xm - 2 * (1 - xm)
der[0] = -400 * x[0] * (x[1] - x[0] ** 2) - 2 * (1 - x[0])
der[-1] = 200 * (x[-1] - x[-2] ** 2)
return der
x0 = np.array([1.3, 0.7, 0.8])
res = minimize(rosen, x0, method='BFGS', jac=rosen_der, options={'disp': True})
print(res.x)