levmar е реализация на нелинейния Levenberg-Marquardt най-малките квадрати алгоритми в C / C ++.
Рутинна lmder от Minpack, приложени в началото на 80-те в Argonne National Lab, е може би най- Най-широко се използва свободно изпълнение на алгоритъма на LM. lmder е писано в FORTRAN77 и през годините се е доказала като надежден част от софтуера. Като се има предвид, че FORTRAN съчетания може да се плати от C / C ++, логично възниква въпросът за мотивацията за написването на версия на LM във В. Е, проблемът е, че когато FORTRAN се нарича от C, програмистът трябва да е наясно (и да се спазят ) няколко правила по отношение на името пресоване, аргумент къса, многоизмерна оформление масив памет, свързаността конвенции, и т.н., които са неестествено в сравнение с обикновените правила C. Втората причина е, че този подход приема за даденост, че FORTRAN компилатор за околната среда целева програмиране е достъпно, които може да не е задължително да е така. Друга причина е свързана с липсата на разбиране на вътрешната изработки на FORTRAN изпълнение: от време на време, когато това е необходимо, за да се разбере какво точно на FORTRAN код прави, някои части от него може да изглеждат неразбираеми за програмисти, без да знаят нищо за FORTRAN. Автоматично FORTRAN за C преводачи (напр F2c) не решава проблема, тъй като произвежда C код е доста нечетливи да "непосветените" хора. Нещо повече, документация, описваща математика, на които изпълнението се базира може да е неясна или недостъпни. Не на последно място, прилагането на кандидат LM в C трябва да бъде свободен и технически издържано. Например, C вариант на алгоритъма на LM представени в "Числени Рецепти" книгата (т.е. mrqmin), не винаги е жизнеспособен избор: Освен неговото авторско, той е известен с това, липсва издръжливост
. Поради гореизложените причини, аз съм развил пакета levmar която включва C реализации на LM аромати, които също могат да се използват с C ++. levmar включва двойни и единични прецизност LM реализации, както с аналитична и Крайна разлика приблизително Jacobians. Тя се предоставя безплатно, при условията на GNU General Public License. Математическата теория зад непринуден levmar е описана подробно в конспекти право Методи за нелинейни последни Squares Проблеми, от К. Madsen, HB Nielsen и O. Tingleff, Техническия университет на Дания; Matlab реализации на алгоритмите, представени в лекция бележки също са на разположение. Имайте предвид обаче, че формулирането на проблема за минимизиране приет тук е малко по-различна от тази, описана в конспекти Използвайте
Функция на:.
Levmar предлага няколко потребителя изискуем функции слушането след именуване: Първата буква (г или S) се посочва, двойна или единична точност и наставката (_der или _dif) означава аналитична или приблизителната Jacobian. Ако присъства, ЗЕС, Британска Колумбия и blec компонентите предполагат линейно уравнение, кутия и едновременно кутия и линейни ограничения уравнения, съответно. По-конкретно, levmar включва функциите по-долу:
непринуден оптимизация
dlevmar_der (): двойна точност, аналитичната Jacobian
dlevmar_dif (): двойна точност, Крайна разлика сближи Jacobian
slevmar_der (): единична точност, аналитичната Jacobian
slevmar_dif (): единична точност, Крайна разлика приблизително Jacobian
Ограничен оптимизация
dlevmar_lec_der () : двойна точност, линейни ограничения уравнения, аналитичната Jacobian
dlevmar_lec_dif (): двойна точност, линейни ограничения уравнения, Крайна разлика сближени Jacobian
slevmar_lec_der (): единична точност, линейни ограничения уравнения, аналитичната Jacobian
slevmar_lec_dif (): единична точност, линейни ограничения уравнения, Крайна разлика приблизително Jacobian
dlevmar_bc_der (): двойна точност, кутия ограничения, аналитичната Jacobian
dlevmar_bc_dif (): двойна точност, кутия ограничения, ограничен разлика приблизително Jacobian
slevmar_bc_der (): единична точност, кутия ограничения, аналитичната Jacobian
slevmar_bc_dif (): единична точност, кутия ограничения, Крайна разлика приблизително Jacobian
dlevmar_blec_der (): двойно прецизност, кутия и линейни ограничения уравнения, аналитичната Jacobian
dlevmar_blec_dif (): двойна точност, кутия и линейни ограничения уравнения, Крайна разлика сближени Jacobian
slevmar_blec_der (): единична точност, кутия и линейно уравнение ограничения, аналитичната Jacobian
slevmar_blec_dif (): единична точност, кутия и линейно уравнение ограничения, Крайна разлика сближени Jacobian
Забележете, че с помощта на крайни разлики да сближи Jacobian резултатите в повтарящи се оценки на функцията за монтиране. С цел да се намали общия брой на тези оценки, функциите на xxxxxxx_dif прилагат секущите приближения до Jacobian използващи Broyden ранга една актуализации. Всички функции решаване на същия проблем, т.е. те потърси параметър вектор Р, че най-добре описва (по отношение на нормата L2) на измервания вектор х. По-точно, даден вектор функция е: R ^ т -> R ^ п с п> = т, те се изчисли така, че ап е (п) ~ = Х, т.е. квадрат норма || д || ^ 2 = | | XF (п) || ^ 2 е сведена до минимум. Също така, кутия ограничения на форма LB [в]
<силни> Какво ново в тази версия:
- Тази версия добавя поддръжка за диагонал мащабиране да xlevmar_bc_der (), който може да подобри конвергенция, когато отправната точка е далеч от истинската Minimizer.
- A линейни системи решаване подкрепа паралелно Cholesky разлагане с плазма, линейна алгебра библиотеката за многоядрени процесори.
- Линейни решават за които са определени така, че да работят на по-ниски триъгълници от симетрични матрици, което води до по-добра производителност на кеша.
- конфигурационни файлове CMake за изграждането на проекта, да бъдат ревизирани.
- Няколко други незначителни промени са били направени.
Какво ново във версия 2.5:
- ВНИМАНИЕ ЗА предишните версии ПОТРЕБИТЕЛИ: За по-добра съгласуваност и избягване на конфликти, на името на заглавния файл levmar е променено от lm.h да levmar.h; моля обновете съответно вашите изходни файлове.
- Добавена е поддръжка за минимизиране на по симултанен кутия, линейно уравнение и неравенство ограничения (виж функции xlevmar_bleic_der () & xlevmar_bleic_dif ()).
- Реализирани удобство опаковки да xlevmar_bleic_der () & xlevmar_bleic_dif (), занимаващи се с по-прости ограничени случаи, напр xlevmar_blic_der () & xlevmar_blic_dif () минимизиране на подпомагане по бокс и линейни ограничения неравенство само.
- Добавена линеен системи решаване на базата на разлагането UDUt (т.е., SQRT без Cholesky).
- Премахнато някои ненужни копиране памет от повечето линейни решават.
- добавено ново за нагласяване на данните тест проблем (Osborne).
- направи няколко други дребни промени.
Какво ново във версия 2.4:
- ВНИМАНИЕ ЗА предишните версии ПОТРЕБИТЕЛИ: Размерът на аргумента на информация (т.е., LM_INFO_SZ) се увеличава с единица за настаняване нова област връщане (т.е., информация [9]), която съответства на общия брой разрешени по време на намаляването до минимум линейни системи. Индексите на предварително върнати полета в информационния масив, остават непроменени.
- приложили повече кеш-ефективна схема за изчисляване на приблизителна Hessian J ^ T * J и J ^ T * E за малки проблеми за минимизиране.
- гарантира, че всяка работна памет запазва между извиквания на линейния решават се освобождава при прекратяване на levmar съчетания.
- гарантира, че линейните решават да използват минимално необходимото количество спомагателни памет, избягване на случайни над-разпределения.
- Изпълнено схема за точене на линия за ускоряване на изчисленията на д = х-HX.
- Фиксирана няколко въпроса с привеждане в съответствие с памет на 64-битови системи.
- Добавена функции за изчисляване на коефициента на характер.
- справили с някои дребни проблеми.
Коментари не е намерена