Решает неотрицательную линейную задачу методом наименьших квадратов
Решает неотрицательную задачу аппроксимации методом наименьших квадратов вида
lsqnonneg
применяется только к основанному на решателе подходу. Для обсуждения двух подходов оптимизации смотрите, Сначала Выбирают Problem-Based or Solver-Based Approach.
находит минимум для x
= lsqnonneg(problem
)problem
, где problem
структура. Создайте problem
аргумент путем экспорта проблемы из приложения Оптимизации, как описано в Экспорте работы.
Для проблем, где d
имеет длину более чем 20, lsqlin
может быть быстрее, чем lsqnonneg
. Когда d
имеет длину под 20, lsqnonneg
обычно более эффективно.
Преобразовывать между решателями когда C
имеет больше строк, чем столбцы (значение, что система сверхопределяется),
[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(C,d)
эквивалентно
[m,n] = size(C); [x,resnorm,residual,exitflag,output,lambda_lsqlin] = ... lsqlin(C,d,-eye(n,n),zeros(n,1));
Единственная разница - то, что соответствующие множители Лагранжа имеют противоположные знаки: lambda = -lambda_lsqlin.ineqlin
.
lsqnonneg
использует алгоритм, описанный в [1]. Алгоритм запускается с набора возможных базисных векторов и вычисляет связанный двойной векторный lambda
. Это затем выбирает базисный вектор, соответствующий максимальному значению в lambda
заменять его в базисе на другой возможный кандидат. Это продолжается до lambda ≤ 0
.
[1] Лоусон, C. L. и Р. Дж. Хэнсон. Решение задач наименьших квадратов. Верхний Сэддл-Ривер, NJ: Prentice Hall. 1974. Глава 23, p. 161.