Запустите функцию между каждой итерацией fsolve в MATLAB

Я использую fsolve, чтобы минимизировать функцию энергии в MATLAB. Алгоритм, который я использую, подгоняет сетку к зашумленным данным решетки с учетом расстояний сетки от каждой точки данных.

Целевая функция сформулирована с квадратами погрешностей, чтобы учесть алгоритм Гаусса-Ньютона для использования. Однако программа возвращается к Левенбергу-Марквардту:

Warning: Trust-region-dogleg algorithm of FSOLVE cannot handle non-square systems;
using Levenberg-Marquardt algorithm instead. 

Я понял, что это, вероятно, связано с тем, что, хотя затраты имеют квадратичные ошибки, в целевой (стоимостной) функции есть этап, который выбирает ближайший центр сетки к каждой точке данных, что делает алгоритм неквадратичным.

Что я хотел бы сделать, так это выполнить это обновление назначения ближайших центров сетки отдельно для оценки якобиана функции стоимости. Я считаю, что это позволит использовать Гаусса-Ньютона и значительно улучшит скорость алгоритма.

В настоящее время я считаю, что происходит что-то вроде этого:

while i < options.MaxIter && threshold has not been met
    Compute Jacobian of cost function (which includes assignment routine)
    Move down the slope in the direction of highest gradient
end

Что я хотел бы вместо этого:

while i < options.MaxIter && threshold has not been met
    Perform assignment routine
    Compute Jacobian of cost function (which is now square, as no assignment occurs)
    Move down the slope
end

Есть ли способ вставить подобную функцию в итерации, не разбирая весь алгоритм fsolve? Даже если я отредактирую fsolve вручную, позволит ли природа алгоритма Гаусса-Ньютона добавить этот дополнительный шаг?

Спасибо


person Bill Cheatham    schedule 05.04.2011    source источник


Ответы (1)


В любом случае, поскольку вы работаете с ошибками в квадрате, вы можете использовать LSQNONLIN вместо fsovle. Это позволяет вам вычислить якобиан (а также все необходимые приготовления) в вашей целевой функции. Затем якобиан возвращается как второй выходной аргумент.

person Jonas    schedule 05.04.2011