Решает неотрицательную линейную задачу методом наименьших квадратов
Решает неотрицательную задачу аппроксимации методом наименьших квадратов вида
lsqnonneg
применяется только к основанному на решателе подходу. Для обсуждения двух подходов оптимизации смотрите, Сначала Выбирают Problem-Based or Solver-Based Approach.
x = lsqnonneg(C,d)
x = lsqnonneg(C,d,options)
x = lsqnonneg(problem)
[x,resnorm,residual]
= lsqnonneg(___)
[x,resnorm,residual,exitflag,output]
= lsqnonneg(___)
[x,resnorm,residual,exitflag,output,lambda]
= lsqnonneg(___)
находит минимум для 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.