LINUX.ORG.RU

[lapack] Метод наименьших квадратов


0

2

В lapack есть функции для решения задач вида ||B - Ax|| -> min методом наименьших квадратов. А мне сейчас нужно решить задачу вида ||B - Ax||^2 + ||C - Dx||^2 -> min. Не могу понять как можно одно к другому преобразовать и что вообще теперь делать. Может стоит посмотреть как написана dgels() и написать по аналогии свою функцию?

В принципе сейчас решение задачи запрограммировано и работает. На листочке были выписаны производные и коэффициенты матрицы, а потом просто в цикле заполняется нужная матрица и решается обычная система лин. уравнений. Но меня не устраивает произовдительность получившегося решения. Я вроде всё что мог оптимизировал, но заполнение матрицы происходит долго. При размерности задачи около 500 оно ещё приемлемо работает, но при 1000 уже совсем медленно получается.

★★★

Ну, если я правильно понял, то это будет

|| B~C - A~Dx || -> min

где B~C - склеивание матрицы по вертикали (просто записать однк над другой)

ЗЫ но перепроверь, я сейчас сонный очень

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

Спасибо огромное. То что надо. Попробую написать побыстрее и тогда сообщу результаты.

GArik ★★★
() автор топика

анонимус извиняется за неграмотность, но ||B - Ax|| это определитель B - Ax или что?

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

>>Ну, если я правильно понял, то это будет

|| B~C - A~Dx || -> min

Все точно, только это верно лишь для нормы Фробениуса. Также это эквивалентно || (B - Ax)~(C - Dx) || -> min

Думаю что у автора B - просто вектор, тогда упомянутая норма просто переходит в длину этого вектора.

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

Может, подскажете заодно, как аппроксимировать окружность? Использую gsl_multifit_fdfsolver_lmder (из библиотеки GSL). Гауссианы вписывает на ура, а вот с окружностью некорректная задача получается, не считает ничего...

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

Увы, я тут не в теме, можно лишь догадываться, что проблемы с бесконечной производной по краям => можно попытаться немного опустить окружность.

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

>Все точно, только это верно лишь для нормы Фробениуса.

Эм... ну да, это я упустил

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

Думаю что у автора B - просто вектор.

Да, так и есть :) Там должно быть вот так.

норма просто переходит в длину этого вектора

Нет, тут сумма квадратов.

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

>> норма просто переходит в длину этого вектора

Нет, тут сумма квадратов.

Норма Фробениуса матрицы для матрицы-вектора есть длина этого вектора, независимо ни от чего. Тот факт, что из-за мотононности функии sqrt задача оптимизации f(x) переходит в задачу оптимизации выражения sqrt(f(x)), которое для конкретной нормы выражается через норму слепленной матрицы - никак не протворечит первому утверждению.

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

Понял, да. Я чего-то торможу )

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