Минимизация наименьших квадратов в пределах порога в MATLAB

Пакет cvx для MATLAB может решить (казалось бы, невинную) проблему оптимизации ниже, но он довольно медленный для больших полных матриц, с которыми я работаю. Я надеюсь, что это потому, что использование cvx является излишним, и что проблема на самом деле имеет аналитическое решение, или что умное использование некоторых встроенных функций MATLAB может быстрее выполнить эту работу.

Справочная информация: Хорошо известно, что оба x1=A\b а также x2=pinv(A)*b решить проблему наименьших квадратов:

minimize norm(A*x-b)

с той разницей, что norm(x2)<=norm(x1), По факту, x2 является минимально-нормальным решением проблемы, поэтому norm(x2)<=norm(x) для всех возможных решений x,

определяющий D=norm(A*x2-b), (эквивалентно D=norm(A*x1-b)), затем x2 решает проблему

minimize norm(x)
subject to
norm(A*x-b) == D

Проблема: я хотел бы найти решение для:

minimize norm(x)
subject to
norm(A*x-b) <= D+threshold

На словах мне не нужно norm(A*x-b) быть как можно меньше, просто в пределах определенной терпимости. Я хочу минимально-нормальное решение x что получает A*x в D+threshold из b,

Мне не удалось найти аналитическое решение проблемы (например, использовать псевдообратную в классической задаче наименьших квадратов) в Интернете или вручную. Я искал такие вещи, как "наименьшие квадраты с нелинейным ограничением" и "наименьшие квадраты с порогом".

Любая идея будет принята с благодарностью, но я полагаю, что мой реальный вопрос: каков самый быстрый способ решения этой "пороговой" задачи наименьших квадратов в MATLAB?

1 ответ

Решение

Интересный вопрос. Я не знаю ответа на ваш точный вопрос, но рабочее решение представлено ниже.

резюмировать

определять res(x) := norm(Ax - b), Как вы заявляете, x2 сводит к минимуму res(x), В переопределенном случае (как правило, A иметь больше рядов, чем col), x2 это уникальный минимум. В недоопределенном случае к нему присоединяется бесконечно много других *. Тем не менее, среди всех этих x2 это уникальный, который сводит к минимуму norm(x),

Подвести итоги, x2 минимизирует (1) res(x) и (2) norm(x)и это происходит в порядке приоритета. На самом деле это характеризует (полностью определяет) x2,

Предельная характеристика

Но, еще одна характеристика x2 является

x2 := limit_{e-->0} x_e

где

x_e := argmin_{x} J(x;e)

где

J(x;e) := res(x) + e * norm(x)

Можно показать, что

x_e = (A A' + e I)^{-1} A' b      (eqn a)

Следует понимать, что эта характеристика x2 довольно волшебно. Ограничения существуют, даже если (A A')^{-1} не. И предел как-то сохраняет приоритет (2) сверху.

Используя e>0

Конечно, для конечного (но маленького) e, x_e не будет минимизировать res(x)(вместо этого он минимизирует J(x;e)). В вашей терминологии разница - это порог. Я переименую его в

gap := res(x_e) - min_{x} res(x).

Уменьшение стоимости e гарантированно уменьшить значение gap, Достижение определенного gap поэтому значение (т. е. пороговое значение) легко достичь путем настройки e.**

Этот тип модификации (добавление norm(x) к res(x) проблема минимизации) известна как регуляризация в статистике и обычно считается хорошей идеей для стабильности (численно и в отношении значений параметров).


*: Обратите внимание, что x1 а также x2 отличаются только в недоопределенном случае

**: Это даже не требует каких-либо тяжелых вычислений, потому что обратное в (eqn a) легко вычисляется для любого (положительного) значения e если SVD для A уже был вычислен.

Другие вопросы по тегам