levmar є реалізація нелінійної Левенберга-Marquardt найменших квадратів алгоритми в C / C ++.
Дня lmder від MINPACK, реалізований на початку 80-х в Аргонської національної лабораторії, мабуть Найбільш широко використовується вільну реалізацію алгоритму 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, як з аналітичної та кінцевих різниць наближено якобіанам. Він надається безкоштовно, відповідно до умов GNU General Public License. Математична теорія, що лежить без обмежень levmar докладно описано в лекціям, які мають право Методи нелінійного методу найменших квадратів проблем, К. Мадсен, HB Nielsen і О. Tingleff, Технічний Університет Данії; Matlab реалізації алгоритмів, представлених у лекціях, також доступні. Зауважимо, однак, що постановка задачі мінімізації прийнятої тут трохи відрізняється від тієї, що описана в конспектів Використання
функції в :.
Levmar пропонує кілька користувальницьких викликаються функції, котрі підпорядковуються наступну угоду про імена: перша буква (г або S) Установка подвійний або одинарної точністю, і суфікс (_der або _dif) позначає аналітичну або приблизне якобіан. Якщо присутній, LEC, BC і BLEC компоненти увазі лінійне рівняння, коробка і одночасно вікно і лінійних обмежень рівняння, відповідно. Більш конкретно, levmar включає в себе функції нижче:
безумовної оптимізації
dlevmar_der (): подвійний точності, аналітична Якобі
dlevmar_dif (): подвійний точності, кінцевих різниць наближено Якобі
slevmar_der (): з одинарної точністю, аналітична Якобі
slevmar_dif (): з одинарної точністю, кінцевих різниць наближено якобіан
оптимізації з обмеженнями
dlevmar_lec_der () : подвійний точності, лінійні обмеження рівняння, аналітичне Якобі
dlevmar_lec_dif (): подвійний точності, лінійні обмеження рівняння, різницева наближено якобіан
slevmar_lec_der (): з одинарної точністю, лінійні обмеження рівняння, аналітичне Якобі
slevmar_lec_dif (): з одинарної точністю, лінійні обмеження рівняння, різницева наближено Якобі
dlevmar_bc_der (): подвійний точності, коробка обмеження, аналітична Якобі
dlevmar_bc_dif (): подвійний точності, коробка обмеження, кінцева Різниця наближено якобіан
slevmar_bc_der (): з одинарної точністю, коробка обмежень, аналітична Якобі
slevmar_bc_dif (): з одинарної точністю, коробка обмеження, кінцева різниця апроксимується Якобі
dlevmar_blec_der (): двоспальне точність, коробка і лінійні обмеження рівняння, аналітичне Якобі
dlevmar_blec_dif (): подвійний точності, коробка і лінійні обмеження рівняння, різницева наближено якобіан
slevmar_blec_der (): одинарної точності, коробка і лінійного рівняння обмежень, аналітичного градієнта
slevmar_blec_dif (): одинарної точності, коробка і лінійне рівняння обмеження, кінцева різниця апроксимується Якобі
Зверніть увагу, що за допомогою кінцевих різниць для апроксимації Якобі результати в повторюваних оцінок функції для установки. Прагнучи зменшити загальну кількість цих оцінок, функції xxxxxxx_dif реалізації січними наближення до Якобі, використовуючи рангу поновлення Бройдо. Всі функції вирішити ту ж саму проблему, тобто вони прагнуть вектора параметрів р, що найкраще описує (з точки зору норми L2) Вимірювання вектор х. Точніше, враховуючи вектор-функцію F: R ^ т -> R ^ N з п> = т, вони виробляють AP таким чином, що F (P) ~ = х, тобто квадрата норми || е || ^ 2 = | | XF (р) || ^ 2 зведено до мінімуму. Крім того, коробка обмеження виду фунт [я]
Що нового У цьому випуску:
- Ця версія додає підтримку для діагонального масштабування для xlevmar_bc_der (), яка може поліпшити збіжність, коли відправною точкою є далеко від істинного мінімізатор.
- лінійний решатель системи, що підтримують паралельний Чолескі розкладання з плазмою, бібліотеки лінійної алгебри для багатоядерних процесорів.
- Лінійні вирішувачі були закріплені так, що вони працюють на нижчих трикутників симетричних матриць, що призводить до підвищення продуктивності кеша.
- Файли конфігурації 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 () мінімізація підтримка в графі і лінійні обмеження у вигляді нерівностей тільки.
- Додана лінійний решатель системи, засновані на розкладанні Удут (тобто, SQRT без Cholesky).
- Прибрані деякі зайвого копіювання пам'яті від більшості лінійних решателей.
- Додана нова тестової задачі підбору даних (Осборн).
- Зроблено кілька інших незначних змін.
Що нового у версії 2.4:
- УВАГА У попередніх версіях КОРИСТУВАЧІВ: розмір інфо аргументу (тобто, LM_INFO_SZ) була збільшена на один, щоб розмістити новий зворотний поле (тобто, інформації [9]), що відповідає загальній кількості лінійних систем, що вирішуються в ході мінімізації. Індекси раніше повернутих полів в інформаційному масиві залишаються незмінними.
- Реалізована більш кеш-пам'яті ефективна схема для обчислення приблизного Гессе J ^ T * J і J ^ T * E проблем малих мінімізації.
- запевнив, що в будь-який робочий пам'яті зберігається між викликами лінійних решателей вивільняється при припиненні levmar процедур.
- запевнив, що лінійні вирішувачі використовують мінімальну необхідну кількість допоміжного пам'яті, уникаючи іноді по-асигнувань.
- Реалізована схема розгортання циклу для прискорення обчислення е = х-Гк.
- Виправлена пара питань з вирівнюванням пам'яті на 64-бітних системах.
- Додані функції для обчислення коефіцієнта детермінації.
- справу з невеликими проблемами.
Коментар не знайдено