Вычисление Якобиана и Переход к Сципи Минимизировать - PullRequest
0 голосов
/ 12 февраля 2019

Я знаю, что якобиан является первой производной, но я не знаю, как вычислить его для моей простой функции (я пробовал онлайн-производные калькуляторы) и передать ее в функцию минимизации 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

Согласно другой странице переполнения стека, это означает, что целевая функция не возвращает скаляр, и она должна.

Может кто-нибудь сказать, где я ошибся с этим?

...