Solve nonnegative linear least-squares problem
Solve nonnegative least-squares curve fitting problems of the form
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(___)
finds the minimum for x = lsqnonneg(problem)problem, where problem is
a structure. Create the problem argument by exporting
a problem from Optimization app, as described in Exporting Your Work.
For problems where d has length
over 20, lsqlin might be faster
than lsqnonneg. When d has
length under 20, lsqnonneg is generally more efficient.
To convert between the solvers when C has
more rows than columns (meaning the system is overdetermined),
[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(C,d)
is equivalent to
[m,n] = size(C); [x,resnorm,residual,exitflag,output,lambda_lsqlin] = ... lsqlin(C,d,-eye(n,n),zeros(n,1));
The only difference is that the corresponding Lagrange multipliers
have opposite signs: lambda = -lambda_lsqlin.ineqlin.
lsqnonneg uses the algorithm described in [1]. The algorithm starts with a set
of possible basis vectors and computes the associated dual vector lambda.
It then selects the basis vector corresponding to the maximum value
in lambda to swap it out of the basis in exchange
for another possible candidate. This continues until lambda ≤ 0.
[1] Lawson, C. L. and R. J. Hanson. Solving Least-Squares Problems. Upper Saddle River, NJ: Prentice Hall. 1974. Chapter 23, p. 161.