lsqnonneg
Solve nonnegative linear least-squares problem
Syntax
Description
Solve nonnegative least-squares curve fitting problems of the form
Note
lsqnonneg
applies only to the solver-based approach. For a discussion
of the two optimization approaches, see First Choose Problem-Based or Solver-Based Approach.
Examples
Input Arguments
Output Arguments
Tips
For problems where
d
has length over 20,lsqlin
might be faster thanlsqnonneg
. Whend
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
.
Algorithms
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
.
Alternative Functionality
App
The Optimize Live Editor task provides a visual interface for lsqnonneg
.
References
[1] Lawson, C. L. and R. J. Hanson. Solving Least-Squares Problems. Upper Saddle River, NJ: Prentice Hall. 1974. Chapter 23, p. 161.
Extended Capabilities
Version History
Introduced before R2006a