Для функции SciPy fmin_ncg
, есть ли способ заменить гессиан и градиент как переменную, а не функцию?
Я пытаюсь переписать некоторый код Matlab на python. В коде используется подпрограмма оптимизации для подгонки некоторых параметров к набору данных. Для этого я поставил градиент и гессиан. Например в Matlab у меня что-то вроде этого:
fmincon(@myFunc,x0,[],[],[],[],lb,ub,[],options);
где myFunc
возвращает 3 значения: оценка функции, градиент и гессиан.
Однако для fmin_ncg
в Python кажется, что градиент и гессиан должны быть предоставлены как отдельные функции.
Мне это кажется неэффективным, поскольку код должен пройти большой набор данных, и есть вычисления, которые являются общими для функции, градиента и гессиана. например Представьте себе функцию f(x) = a(x)*b(x)
с градиентом g(x) = a(x)*c(x)
, гессиан h(x) = a(x)*d(x)
... в Matlab, я могу вычислить a(x)
один раз, где, как мне кажется, мне нужно вычислить это три раза в python.
Я неправильно понял, как работает fmin_ncg
или есть способ обойти это?