25#ifndef _nmrLSEISolver_h
26#define _nmrLSEISolver_h
39 CISSTNETLIB_INTEGER
ME;
40 CISSTNETLIB_INTEGER
MA;
41 CISSTNETLIB_INTEGER
MG;
42 CISSTNETLIB_INTEGER
MDW;
43 CISSTNETLIB_INTEGER
N;
81 nmrLSEISolver(CISSTNETLIB_INTEGER me, CISSTNETLIB_INTEGER ma, CISSTNETLIB_INTEGER mg, CISSTNETLIB_INTEGER n) {
106 inline void Allocate(CISSTNETLIB_INTEGER me, CISSTNETLIB_INTEGER ma, CISSTNETLIB_INTEGER mg, CISSTNETLIB_INTEGER n) {
114 CISSTNETLIB_INTEGER K = std::max(
MA +
MG,
N);
118 Index(0, 0) =
static_cast<CISSTNETLIB_INTEGER
>(
Work.rows());
119 Index(1, 0) =
static_cast<CISSTNETLIB_INTEGER
>(
Index.rows());
138 {
Allocate(E.rows(), A.rows(), G.rows(), A.cols()); }
170 if(
MA !=
static_cast<CISSTNETLIB_INTEGER
>(A.rows()) ||
171 N !=
static_cast<CISSTNETLIB_INTEGER
>(A.cols()) ||
172 MA !=
static_cast<CISSTNETLIB_INTEGER
>(b.rows()) ||
173 1 !=
static_cast<CISSTNETLIB_INTEGER
>(b.cols()) ){
174 std::string msg(
"nmrLSEISolver::Solve: Objectives dimensions." );
175 cmnThrow( std::runtime_error( msg ) );
179 (
ME !=
static_cast<CISSTNETLIB_INTEGER
>(E.rows()) ||
180 N !=
static_cast<CISSTNETLIB_INTEGER
>(E.cols()) ||
181 ME !=
static_cast<CISSTNETLIB_INTEGER
>(f.rows()) ||
182 1 !=
static_cast<CISSTNETLIB_INTEGER
>(f.cols()) ) ){
183 std::string msg(
"nmrLSEISolver::Solve: Equalities dimensions." );
184 cmnThrow( std::runtime_error( msg ) );
188 (
MG !=
static_cast<CISSTNETLIB_INTEGER
>(G.rows()) ||
189 N !=
static_cast<CISSTNETLIB_INTEGER
>(G.cols()) ||
190 MG !=
static_cast<CISSTNETLIB_INTEGER
>(h.rows()) ||
191 1 !=
static_cast<CISSTNETLIB_INTEGER
>(h.cols()) ) ){
192 std::string msg(
"nmrLSEISolver::Solve: Inequalities dimensions." );
193 cmnThrow( std::runtime_error( msg ) );
197 if ( ( !A.IsFortran() ) ||
198 ( !b.IsFortran() ) ||
199 ( !E.empty() && !E.IsFortran() ) ||
200 ( !f.empty() && !f.IsFortran() ) ||
201 ( !G.empty() && !G.IsFortran() ) ||
202 ( !h.empty() && !h.IsFortran() ) ){
203 std::string msg(
"nmrLSEISolver::Solve: Incompatible matrices." );
204 cmnThrow( std::runtime_error( msg ) );
207 if( (
MDW !=
static_cast<CISSTNETLIB_INTEGER
>(
W.rows() ) ) ||
208 (
N+1 !=
static_cast<CISSTNETLIB_INTEGER
>(
W.cols() ))) {
209 std::string msg(
"nmrLSEISolver::Solve: workspace not allocated." );
210 cmnThrow( std::runtime_error( msg ) );
216 if( !E.empty() ){
ERef.Assign(E); }
217 if( !f.empty() ){
fRef.Assign(f); }
218 if( !G.empty() ){
GRef.Assign(G); }
219 if( !h.empty() ){
hRef.Assign(h); }
221#if defined(CISSTNETLIB_VERSION_MAJOR)
222#if (CISSTNETLIB_VERSION_MAJOR >= 3)
223 cisstNetlib_lsei_(
W.Pointer(), &
MDW, &
ME, &
MA, &
MG, &
N,
239 if( (
MDW !=
static_cast<CISSTNETLIB_INTEGER
>(
W.rows()) ) ||
240 (
N+1 !=
static_cast<CISSTNETLIB_INTEGER
>(
W.cols())) ) {
241 std::string msg(
"nmrLSEISolver::Solve: workspace not allocated." );
245#if defined(CISSTNETLIB_VERSION_MAJOR)
246#if (CISSTNETLIB_VERSION_MAJOR >= 3)
247 cisstNetlib_lsei_(
W.Pointer(), &
MDW, &
ME, &
MA, &
MG, &
N,
nmrLSEISolver(CISSTNETLIB_INTEGER me, CISSTNETLIB_INTEGER ma, CISSTNETLIB_INTEGER mg, CISSTNETLIB_INTEGER n)
Definition nmrLSEISolver.h:81
vctDynamicMatrix< CISSTNETLIB_DOUBLE >::Submatrix::Type ERef
Definition nmrLSEISolver.h:50
CISSTNETLIB_INTEGER MA
Definition nmrLSEISolver.h:40
vctDynamicMatrix< CISSTNETLIB_INTEGER > Index
Definition nmrLSEISolver.h:57
CISSTNETLIB_INTEGER ME
Definition nmrLSEISolver.h:39
void Allocate(vctDynamicMatrix< CISSTNETLIB_DOUBLE > &E, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &G)
Definition nmrLSEISolver.h:135
CISSTNETLIB_INTEGER Mode
Definition nmrLSEISolver.h:44
vctDynamicMatrix< CISSTNETLIB_DOUBLE >::Submatrix::Type hRef
Definition nmrLSEISolver.h:55
vctDynamicMatrix< CISSTNETLIB_DOUBLE >::Submatrix::Type bRef
Definition nmrLSEISolver.h:54
CISSTNETLIB_DOUBLE GetRNormE(void) const
Definition nmrLSEISolver.h:267
vctDynamicMatrix< CISSTNETLIB_DOUBLE > Options
Definition nmrLSEISolver.h:47
nmrLSEISolver(void)
Definition nmrLSEISolver.h:65
void Allocate(CISSTNETLIB_INTEGER me, CISSTNETLIB_INTEGER ma, CISSTNETLIB_INTEGER mg, CISSTNETLIB_INTEGER n)
Definition nmrLSEISolver.h:106
void Solve(vctDynamicMatrix< CISSTNETLIB_DOUBLE > &E, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &f, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &b, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &G, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &h) CISST_THROW(std
Definition nmrLSEISolver.h:161
CISSTNETLIB_INTEGER N
Definition nmrLSEISolver.h:43
CISSTNETLIB_DOUBLE GetRNormL(void) const
Definition nmrLSEISolver.h:272
CISSTNETLIB_DOUBLE RNormE
Definition nmrLSEISolver.h:45
vctDynamicMatrix< CISSTNETLIB_DOUBLE > Work
Definition nmrLSEISolver.h:56
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetX(void) const
Definition nmrLSEISolver.h:261
nmrLSEISolver(vctDynamicMatrix< CISSTNETLIB_DOUBLE > &E, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &G)
Definition nmrLSEISolver.h:91
CISSTNETLIB_INTEGER MG
Definition nmrLSEISolver.h:41
vctDynamicMatrix< CISSTNETLIB_DOUBLE > W
Definition nmrLSEISolver.h:49
CISSTNETLIB_INTEGER MDW
Definition nmrLSEISolver.h:42
vctDynamicMatrix< CISSTNETLIB_DOUBLE > X
Definition nmrLSEISolver.h:48
vctDynamicMatrix< CISSTNETLIB_DOUBLE >::Submatrix::Type fRef
Definition nmrLSEISolver.h:53
vctDynamicMatrix< CISSTNETLIB_DOUBLE >::Submatrix::Type GRef
Definition nmrLSEISolver.h:52
CISSTNETLIB_DOUBLE RNormL
Definition nmrLSEISolver.h:46
vctDynamicMatrix< CISSTNETLIB_DOUBLE >::Submatrix::Type ARef
Definition nmrLSEISolver.h:51
void Solve(vctDynamicMatrix< CISSTNETLIB_DOUBLE > &W) CISST_THROW(std
Definition nmrLSEISolver.h:236
Definition vctForwardDeclarations.h:157
#define CISST_THROW(exceptionParameter)
Somewhat portable compilation warning message. This works with very recent versions of gcc (4....
Definition cmnPortability.h:559
void cmnThrow(const _exceptionType &except, cmnLogLevel lod=CMN_LOG_LEVEL_INIT_ERROR)
Definition cmnThrow.h:76
Declaration of vctDynamicMatrix.
const bool VCT_COL_MAJOR
Definition vctForwardDeclarations.h:44