Как алгоритм Levenberg–Marquardt работает подробно, но понятным способом?

Я использую Eclipse Европа, которая также имеет Любимый предпочтительный раздел:

Окно> Предпочтения> Java> Редактор> Содержание Помогает> Избранное

шахта In, у меня есть следующие записи (при добавлении используйте "Новый Тип" и опустите .*):

org.hamcrest.Matchers.*
org.hamcrest.CoreMatchers.*
org.junit.*
org.junit.Assert.*
org.junit.Assume.*
org.junit.matchers.JUnitMatchers.*

Все кроме третьего из тех - статический импорт. При наличии тех как избранное, если я тип "112" и хит Ctrl + Пространства, Eclipse предлагает assertThat как предложение, и если я выбираю его, это добавит надлежащий статический импорт в файл.

14
задан Per Arneng 16 July 2009 в 09:25
поделиться

4 ответа

13
ответ дан 1 December 2019 в 06:24
поделиться

Попробуйте Числовые рецепты (Левенберг-Марквардт находится в разделе 15.5). Он доступен в Интернете, и я считаю, что они подробно объясняют алгоритмы (у них есть полный исходный код, насколько более подробный вы можете получить ...), но при этом доступны.

3
ответ дан 1 December 2019 в 06:24
поделиться

Я использовал эти заметки из курса в Университете Пердью , чтобы закодировать общий алгоритм подбора кривой Левенберга-Марквардта в MATLAB, который вычисляет числовые производные и, следовательно, принимает любую функцию вида f (x; p) , где p - вектор подгоночных параметров.

1
ответ дан 1 December 2019 в 06:24
поделиться

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

Алгоритм LM и многие другие алгоритмы минимизации используют эту схему.

Предположим, что минимизируемая функция - это F, и мы находимся в точке x (n) в нашей итерации. Мы хотим найти следующую итерацию x (n + 1), такую, что F (x (n + 1))

Сначала вычислите линейное приближение к F в точке x (n). Направление спуска линейной функции легко определить, поэтому мы используем линейную аппроксимирующую функцию, чтобы определить направление спуска. Алгоритм LM определяет эти значения следующим образом -

Сначала вычислите линейное приближение к F в точке x (n). Направление спуска линейной функции легко определить, поэтому мы используем линейную аппроксимирующую функцию, чтобы определить направление спуска. Алгоритм LM определяет эти значения следующим образом:

Сначала вычислите линейное приближение к F в точке x (n). Направление спуска линейной функции легко определить, поэтому мы используем линейную аппроксимирующую функцию, чтобы определить направление спуска. Далее нам нужно знать, как далеко мы можем зайти в этом выбранном направлении. Если наша аппроксимирующая линейная функция является хорошим приближением для F для большой области около x (n), то мы можем сделать довольно большой шаг. Если это хорошее приближение только очень близко к x (n), то мы можем сделать только очень маленький шаг.

Это то, что делает LM - вычисляет линейное приближение к F в x (n), таким образом давая направление спуска, затем вычисляет, насколько большой шаг нужно сделать, основываясь на том, насколько хорошо линейная функция приближает F в x (n ). LM выясняет, насколько хороша аппроксимирующая функция, делая шаг в определенном таким образом направлении и сравнивая, насколько уменьшилось линейное приближение к F и насколько уменьшилась фактическая функция F. Если они близки, аппроксимирующая функция хороша, и мы можем сделать немного больший шаг.

27
ответ дан 1 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: