Я использую 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
как предложение, и если я выбираю его, это добавит надлежащий статический импорт в файл.
Попробуйте Числовые рецепты (Левенберг-Марквардт находится в разделе 15.5). Он доступен в Интернете, и я считаю, что они подробно объясняют алгоритмы (у них есть полный исходный код, насколько более подробный вы можете получить ...), но при этом доступны.
Я использовал эти заметки из курса в Университете Пердью , чтобы закодировать общий алгоритм подбора кривой Левенберга-Марквардта в MATLAB, который вычисляет числовые производные и, следовательно, принимает любую функцию вида f (x; p)
, где p
- вектор подгоночных параметров.
Сведение к минимуму функции похоже на попытку найти самую низкую точку на поверхности. Представьте, что вы идете по холмистой местности и пытаетесь добраться до самой низкой точки. Вы найдете направление, ведущее под гору, и идете, пока оно не перестанет спускаться. Затем вы должны выбрать новое направление, которое идет под гору, и идти в этом направлении, пока оно не перестанет спускаться, и так далее. В конце концов (надеюсь) вы достигнете точки, где больше нет направления под уклон. Тогда у вас будет (локальный) минимум.
Алгоритм 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. Если они близки, аппроксимирующая функция хороша, и мы можем сделать немного больший шаг.