Я знаю, что якобиан является первой производной, но я не знаю, как вычислить его для моей простой функции (я пробовал онлайн-производные калькуляторы) и передать ее в функцию минимизации scipy.
В коде, вот целевая функция (предположим, что массивы могут содержать тысячи переменных):
def objective(current_guesses_array, first_guesses_array):
return np.sum(np.divide(np.square(current_guesses_array - first_guesses_array), first_guesses_array))
Я думаю, что якобиан такой, но определенно мог ошибиться здесь:
dx = 2x/ y - 2
dy = 1 - (x ^ 2 / y ^ 2)
В коде:
def jacobian_for_minimize(self, x,a):
dx = (2*x)/a - 2
dy = 1 - (np.square(x) / np.square(a))
return np.array([dx,dy])
minimize(objective,initial_guesses,args=initial_guesses,jac=jacobian_for_minimize,method='SLSQP')
После вызова свернуть, я получаю ошибку:_slsqp.error: не удалось преобразовать 8-й аргумент `g '_slsqp.slsqp в массив C / Fortran
Согласно другой странице переполнения стека, это означает, что целевая функция не возвращает скаляр, и она должна.
Может кто-нибудь сказать, где я ошибся с этим?