LINUX.ORG.RU

Библиотека для решения задачи о наименьших квадратов.

 ,


0

2

Есть ли в природе реализация алгоритма Левенберга-Марквардта, или другого алгоритма решения задачи о наименьших квадратах:

F(\vec{x})=\|\vec{f}(\vec{x})\|^2=\sum_{i=1}^m f_i^2(\vec{x})=\sum_{i=1}^m(\varphi_i(\vec{x})-\mathcal{F}_i)^2\to\min

под некопилефтной лицензией на С?
cast Reset.

★★★★

Любая библиотека для выпуклой оптимизации. Начни с gsl. Можешь заценить вот это http://cvxgen.com но 99%, что оно тебе не нужно. Самому методы оптимизации реализовывать без опыта не советую. Обращай больше внимания на робастность, чем на скорость.

maggotroot
()
Ответ на: комментарий от yvv

С чего бы в библиотеке для работы с линейной алгеброй быть методам математического программирования? Только в случае линейных мнк, когда решение записывается в явном виде через псевдообращение, можно, например, лапаковским свд вычислить решение. Метод Левенберга-Марквардта решаются обычно нелинейные задачи о наименьших квадратах.

maggotroot
()

Плюсую GSL. Правда, не всякое уравнение можно так решить. Если функция разрывная или имеет близкие к бесконечности производные на интересующем интервале, фигвам.

// я использовал GSL, чтобы гауссианы вписывать в сечения изображений; с двумерными гауссианами хуже оказалось — либо большая погрешность, либо очень долго; кружочки аппроксимировать не смог из-за бесконечной производной (но для кружочков я другой хороший алгоритм нашел).

А, не: в GSL такого нет.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 2)

Если нужен именно Левенберг-Марквардт не GPL'ный, то хрен его знает. Я свой написал. Хорошее начало педивикия и http://www.ics.forth.gr/~lourakis/levmar/ .

Если просто наименьших квадратов, то http://code.google.com/p/ceres-solver/ Внутрь сильно не смотрел, но судя по описанию ЛМ — это частный случай их метода.

Еще http://www.pointclouds.org но он плюсовый.

ebantrop
()
Ответ на: комментарий от ebantrop

Жаль, что последнюю ссылку я раньше не встречал, мб CGAL заменила бы.

aptyp ★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

У меня не очень сложные функции, полином третьей степени, степенная функция общего вида, экспонента.
Косяк с тем, что я нашёл - неустойчивость относительно начального приближения.

aptyp ★★★★
() автор топика
Ответ на: комментарий от maggotroot

У меня нелинейная задача и есть.

aptyp ★★★★
() автор топика
Ответ на: комментарий от aptyp

неустойчивость относительно начального приближения

Ну так если у тебя функция черт-те какая, ясен пень, метод может вместо глобального минимума найти ближайший к нулевому приближению локальный.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от maggotroot

Методом наименьших квадратов можно минимизировать нелинейную функцию, но сам-то алгоритм линейный. И с помощью процедур из лапака задача легко решается.

yvv ★★☆
()
Ответ на: комментарий от MKuznetsov

Ясен пень, но ЧМ это не формочки клепать же.

aptyp ★★★★
() автор топика
Ответ на: комментарий от aptyp

А у тебя никогда она и не будет нулевой. Особенно когда шум есть. И вот из-за этого шума возникают «косячки». А еще — из-за погрешности округления.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Да, не заметил, что у ОПа полином 3ей степени еще. А так бы была выпукла.

maggotroot
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.