|
| | nmrLSISolver (void) |
| | nmrLSISolver (CISSTNETLIB_INTEGER ma, CISSTNETLIB_INTEGER na, CISSTNETLIB_INTEGER mg) |
| | nmrLSISolver (vctDynamicMatrix< CISSTNETLIB_DOUBLE > &C, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &d, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &b) |
| void | Allocate (CISSTNETLIB_INTEGER ma, CISSTNETLIB_INTEGER na, CISSTNETLIB_INTEGER mg) |
| void | Allocate (vctDynamicMatrix< CISSTNETLIB_DOUBLE > &C, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &d, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &b) |
| CISST_EXPORT void | Solve (vctDynamicMatrix< CISSTNETLIB_DOUBLE > &C, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &d, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &b) throw (std::runtime_error) |
| const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & | GetX (void) const |
Algorithm LSI: Least Squares with Inequality Constraints.
This code is a re-written version of algorithm from Charles L. Lawson and Richard J. Hanson, "Solving Least Squares Problems", Prentice-Hall, 1974. Section 5: Chapter 23.
Given a \(Ma \times Na\) matrix C, a \(Ma \times 1\) vector d, a \(Mg \times Na\) A and a \(Mg \times 1\) vector b, compute a \(Na \times 1\) vector X, that solves the least squares problem:
\( \mbox{min} \; 1 / 2 \| CX - d \| \; \mbox{subject to} \; AX \geq B\)
The data members of this class are:
- Ma, Na: Dimension of input matrix C
- Mg, Na: Dimension of input matrix A
- VSiUtb: \( \mbox{max}(Ma, Na) \times 1 \) contains \( VS^{-1}U^{T}d \)
- GTilde: \( Mg \times Na \) contains \( \tilde{G} \). See L&H book for definition of \( \tilde{G} \).
- HTilde: \( Mg \times 1 \) contains \( \tilde{H} \). See L&H book for definition of \( \tilde{H} \).
- Z: \( Na \times 1 \) contains solution of the internal LDP problem
- X: \( Na \times 1 \), on exit contains the solution.
- Si: \( Na \times Ma \) contains the pseudo inverse of singular values.
- VSi: \( Na \times Na \) contains \( VS^{-1} \)
- Note
- The input matrices of this class must use a column major storage order. To do so, use VCT_COL_MAJOR whenever you declare a matrix. They must also be compact (see vctDynamicMatrix::IsFortran()).
-
This code relies on the ERC CISST cnetlib library. Since cnetlib is optional, make sure that CISST_HAS_CNETLIB has been turned ON during the configuration with CMake.