levmar jest realizacja nieliniowych Levenberga Marquardt najmniejszych kwadratów algorytmów w C / C ++.
Rutynowe lmder z Minpack, realizowany we wczesnych latach 80-tych w Argonne National Lab, jest być może najczęściej używane wolnej implementacji algorytmu LM. lmder jest napisane w FORTRAN77 i przez lata okazały się niezawodne kawałek oprogramowania. Biorąc pod uwagę, że FORTRAN procedury mogą być wywoływane z C / C ++, można się zastanawiać, na temat motywacji do pisania wersji LM w C. Cóż, problem jest, że gdy FORTRAN jest wywoływana z C, programista powinien być świadomy (i zgodne z ) kilka przekręcona zasady dotyczące nazwy argumentu, mimochodem, wielowymiarowym układzie pamięci tablica, konwencji linek, itp, które są nienaturalne porównaniu ze standardowymi zasadami C. Drugim powodem jest to, że to podejście bierze za pewnik, że kompilator języka Fortran dla środowiska programowania celem jest dostępne, co może nie być prawdą. Kolejny powód wiąże się z brakiem zrozumienia wewnętrznych mechanizmów w FORTRAN realizacji: Od czasu do czasu, gdy jest to konieczne, aby dokładnie zrozumieć, co robi kodu FORTRAN, niektóre kawałki mogą wydawać się niezrozumiałe to programistom bez znajomości FORTRAN. Automatyczne FORTRAN dla tłumaczy C (np f2c) nie rozwiąże problemu, ponieważ produkowane kod C jest dość nieczytelne do "niewtajemniczonych" ludzi. Ponadto dokumentację opisującą matematyki, na których oparta jest implementacja może być niejasne lub niedostępny. Ostatni, ale nie najmniej, implementacja w C LM kandydat powinien być wolny i sprawny technicznie. Na przykład, wariant C algorytmu LM przedstawione w "Numerical Recipes" książki (tzn mrqmin), nie zawsze jest dobrym wyborem: Poza jego są chronione prawem autorskim, jest podobno brakuje solidności
. Z powyższych powodów, wyrobiłem pakiet levmar C, który zawiera implementacje smaków LM, które także są użyteczne z C ++. levmar obejmuje podwójne i pojedyncze implementacje precyzja LM, zarówno z różnicy analityczne i skończonej przybliżeniu Jacobians. Jest ona bezpłatna, zgodnie z warunkami GNU General Public License. Matematyczna Teoria nieograniczonej levmar jest szczegółowo opisane w notach wykład pt Metody nieliniowe najmniejszych kwadratów Problemów przez K. Madsen, HB Nielsen i O. Tingleff, Politechnika Danii; Implementacje algorytmów Matlab z prezentowanych w wykładów są również dostępne. Należy jednak pamiętać, że sformułowanie problemu minimalizacji przyjętej tutaj jest nieco inny od opisanego w notatek
funkcyjnego przeznaczenie:.
Levmar oferuje kilka funkcji wpłacone przez użytkownika posłuszeństwa następujących konwencji nazewnictwa: Pierwsza litera (d lub s) określa, podwójną lub pojedynczą precyzję i przyrostek (_der lub _dif) oznacza analityczny lub przybliżoną jakobian. Jeśli występuje, lec, bc i BLEC równanie liniowe elementy sugerują, pola i jednoczesne pole i ograniczeń równań liniowych, odpowiednio. Dokładniej, levmar zawiera poniższe funkcje:
Nieograniczony optymalizacja
dlevmar_der (): podwójna precyzja analityczna jakobian
dlevmar_dif (): podwójna precyzja, skończone różnica w przybliżeniu jakobian slevmar_der
(): pojedyncza precyzja analityczna jakobian slevmar_dif
(): pojedyncza precyzja, skończone różnica przybliżeniu jakobian
ograniczane optymalizacji
dlevmar_lec_der () : podwójna precyzja, równanie liniowe ograniczenia, analityczne jakobian
dlevmar_lec_dif (): podwójna precyzja, liniowe ograniczenia równanie, skończony różnica przybliżeniu jakobian
slevmar_lec_der (): pojedynczej precyzji, liniowych ograniczeń równania, analityczne jakobian
slevmar_lec_dif (): pojedyncza precyzja, liniowe ograniczenia równanie, skończony różnica przybliżeniu jakobian
dlevmar_bc_der (): podwójna precyzja, ograniczenia skrzyni, analityczne jakobian
dlevmar_bc_dif (): podwójna precyzja, ograniczenia box, skończone Różnica w przybliżeniu jakobian
slevmar_bc_der (): pojedyncza precyzja, ograniczenia box, analityczne jakobian slevmar_bc_dif
(): pojedyncza precyzja, ograniczenia box, skończone różnica przybliżeniu jakobian
dlevmar_blec_der (): podwójne Precyzja, pudełko i ograniczenia równanie liniowe, analityczne jakobian dlevmar_blec_dif
(): podwójna precyzja, pudełko i ograniczenia równanie liniowe, skończone różnica przybliżeniu jakobian
slevmar_blec_der (): ograniczenia pojedynczej precyzji, skrzynki i równanie liniowe, analityczny jakobian
slevmar_blec_dif (): ograniczenia pojedynczej precyzji, box & równanie liniowe, skończone różnica przybliżeniu jakobian
Zauważ, że za pomocą różnic skończonych zbliżenie jakobian wyniki w powtarzalnych ocen funkcji do zamontowania. Dążąc do zmniejszenia całkowitej liczby tych ocen, funkcje xxxxxxx_dif realizacji siecznej przybliżeniach jakobian używając Broyden za rangi jednej aktualizacji. Wszystkie funkcje rozwiązania tego samego problemu, to znaczy, że poszukiwania parametrów wektora p, która najlepiej opisuje (w zakresie normy L2) pomiary wektora x. Dokładniej, biorąc pod uwagę funkcję wektora f: R ^ m -> R ^ n z n> = m, to takie, że obliczenia ap f (p) ~ = x, czyli kwadrat normy || || ^ e 2 = | | xf (p) || ^ 2 jest zminimalizowane. Ponadto, ograniczenia rubryce lb [i]
Co nowego w tym wydaniu:
- Ta wersja dodaje wsparcie dla Skalowanie do xlevmar_bc_der przekątnej (), która może poprawić spójność, gdy punktem wyjścia jest daleko od prawdziwego Minimizer.
- Solver systemy liniowe równoległe Cholesky'iego rozkładu wsparcia z osocza, bibliotek algebry liniowej dla procesorów wielordzeniowych.
- rozwiązują liniowe zostały ustalone tak, aby działać na niższych trójkątów macierzy symetrycznych, co skutkuje lepszą wydajność pamięci podręcznej.
- Pliki konfiguracyjne CWprowadä do budowania projektu zostały zmienione.
- Kilka inne drobne zmiany zostały wprowadzone.
Co nowego w wersji 2.5:
- UWAGA poprzednich wersji UŻYTKOWNIKÓW: Dla lepszej spójności i uniknięcia konflikty, nazwa pliku nagłówka levmar została zmieniona z lm.h do levmar.h; należy zaktualizować pliki źródłowe odpowiednio.
- Dodano wsparcie dla minimalizacji mocy jednoczesnym polu, liniowych ograniczeń równań i nierówności (patrz funkcje xlevmar_bleic_der () xlevmar_bleic_dif ()).
- Wprowadzone owijarki wygody xlevmar_bleic_der () () & xlevmar_bleic_dif czynienia z prostszych ograniczonych przypadkach, np xlevmar_blic_der () xlevmar_blic_dif () minimalizacja wsparcie w ramach pudełkiem i liniowe nierównościowych tylko.
- Dodane liniową solver systemy oparte na rozkładzie UDUt (czyli wolne sqrt Cholesky).
- Usunięto niektóre zbędne kopiowanie pamięci z większości rozwiązują liniowych.
- Dodano nową testową problemu danych dopasowane (Osborne).
- Wykonane kilka innych drobnych zmian.
Co nowego w wersji 2.4:
- UWAGA poprzednich wersji UŻYTKOWNIKÓW: wielkość informacji argumentu (tj LM_INFO_SZ) została zwiększona o jeden, aby pomieścić nowe pole powrotną (to info [9]), która odpowiada całkowitej ilości układów liniowych rozwiązane w trakcie minimalizacji. Wskaźniki wcześniej zwracanych pól w tablicy informacji pozostają bez zmian.
- Wdrożony system cache bardziej efektywnych do obliczenia przybliżonej Hesji J ^ T * J i J ^ T * e dla małych problemów minimalizacji.
- zapewnić, aby wszelkie pamięć robocza zachowane między wywołaniami rozwiązują liniowych jest zwolniony po zakończeniu procedur levmar.
- zapewnił, że rozwiązują liniowe zatrudniają minimalną wymaganą ilość pamięci pomocniczej, unikając nadmiernej alokacji sporadyczne.
- Wdrożony system pętli rozwijając dla przyspieszenia obliczeń e = x-HX.
- Poprawiono kilka problemów z wyrównania pamięci na 64 bitowych systemach.
- Dodano funkcje do obliczania współczynnika determinacji.
- do czynienia z kilku drobnych problemów.
Komentarze nie znaleziono