[lb, idx, ridx, mv] = cpiv_bard (v, m[, incl])

 v: column vector; m: matrix; incl (optional): index. length (v)
 must equal rows (m). Finds column vectors w and l with w == v + m *
 l, w >= 0, l >= 0, l.' * w == 0. Chooses idx, w, and l so that
 l(~idx) == 0, l(idx) == -inv (m(idx, idx)) * v(idx), w(idx) roughly
 == 0, and w(~idx) == v(~idx) + m(idx, ~idx).' * l(idx). idx indexes
 at least everything indexed by incl, but l(incl) may be < 0. lb:
 l(idx) (column vector); idx: logical index, defined above; ridx:
 ~idx & w roughly == 0; mv: [m, v] after performing a Gauss-Jordan
 'sweep' (with gjp.m) on each diagonal element indexed by idx.
 Except the handling of incl (which enables handling of equality
 constraints in the calling code), this is called solving the
 'complementary pivot problem' (Cottle, R. W. and Dantzig, G. B.,
 'Complementary pivot theory of mathematical programming', Linear
 Algebra and Appl. 1, 102--125. References for the current
 algorithm: Bard, Y.: Nonlinear Parameter Estimation, p. 147--149,
 Academic Press, New York and London 1974; Bard, Y., 'An eclectic
 approach to nonlinear programming', Proc. ANU Sem. Optimization,
 Canberra, Austral. Nat. Univ.).

Package: optim