cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
nmrLSISolver.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5 
6  Author(s): Ankur Kapoor
7  Created on: 2004-10-30
8 
9  (C) Copyright 2004-2013 Johns Hopkins University (JHU), All Rights
10  Reserved.
11 
12 --- begin cisst license - do not edit ---
13 
14 This software is provided "as is" under an open source license, with
15 no warranty. The complete license can be found in license.txt and
16 http://www.cisst.org/cisst/license.txt.
17 
18 --- end cisst license ---
19 */
20 
21 
27 #ifndef _nmrLSISolver_h
28 #define _nmrLSISolver_h
29 
35 
36 
72 class nmrLSISolver {
73  /* Uses lawson and hanson's SVD, which gives U^{T}B and V,
74  along with singular values */
75 protected:
76  CISSTNETLIB_INTEGER Ma;
77  CISSTNETLIB_INTEGER Na;
78  CISSTNETLIB_INTEGER Mg;
80  vctDynamicMatrix<CISSTNETLIB_DOUBLE> GTilde; /* \tilde{G} = G*V*S^{-1} */
81  vctDynamicMatrix<CISSTNETLIB_DOUBLE> HTilde; /* \tilde{H} = h-G*V*S^{-1}*U^{T}*b */
84  vctDynamicMatrix<CISSTNETLIB_DOUBLE> Si; /* Dim(n, n) matrix of singular values inverse*/
85  vctDynamicMatrix<CISSTNETLIB_DOUBLE> VSi; /* matrix of V*S^{-1} */
88 
89 public:
94  nmrLSISolver(void):
95  Ma(0),
96  Na(0),
97  Mg(0)
98  {
99  Allocate(Ma, Na, Mg);
100  }
101 
102 
112  nmrLSISolver(CISSTNETLIB_INTEGER ma, CISSTNETLIB_INTEGER na, CISSTNETLIB_INTEGER mg) {
113  Allocate(ma, na, mg);
114  }
115 
116 
124  Allocate(C, d, A, b);
125  }
126 
127 
136  inline void Allocate(CISSTNETLIB_INTEGER ma, CISSTNETLIB_INTEGER na, CISSTNETLIB_INTEGER mg) {
137  Ma = ma;
138  Na = na;
139  Mg = mg;
140  VSiUtb.SetSize(std::max(Ma, Na), 1, VCT_COL_MAJOR);
143  Z.SetSize(Na, 1, VCT_COL_MAJOR);
144  X.SetSize(Na, 1, VCT_COL_MAJOR);
147  SVDRS.Allocate(Ma, Na);
148  LDP.Allocate(Mg, Na);
149  }
150 
151 
158  Allocate(C.rows(), C.cols(), A.rows());
159  }
160 
161 
177 
179  inline const vctDynamicMatrix<CISSTNETLIB_DOUBLE> &GetX(void) const {
180  return X;
181  }
182 };
183 
184 
185 #endif // _nmrLSISolver_h
186 
vctDynamicMatrix< CISSTNETLIB_DOUBLE > X
Definition: nmrLSISolver.h:83
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
Declaration of vctDynamicMatrix.
Definition: nmrLSISolver.h:72
vctDynamicMatrix< CISSTNETLIB_DOUBLE > Si
Definition: nmrLSISolver.h:84
vctDynamicMatrix< CISSTNETLIB_DOUBLE > HTilde
Definition: nmrLSISolver.h:81
nmrLSISolver(CISSTNETLIB_INTEGER ma, CISSTNETLIB_INTEGER na, CISSTNETLIB_INTEGER mg)
Definition: nmrLSISolver.h:112
nmrLSISolver(void)
Definition: nmrLSISolver.h:94
vctDynamicMatrix< CISSTNETLIB_DOUBLE > Z
Definition: nmrLSISolver.h:82
vctDynamicMatrix< CISSTNETLIB_DOUBLE > VSiUtb
Definition: nmrLSISolver.h:79
nmrLSISolver(vctDynamicMatrix< CISSTNETLIB_DOUBLE > &C, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &d, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &b)
Definition: nmrLSISolver.h:122
Definition: nmrLDPSolver.h:74
CISSTNETLIB_INTEGER Ma
Definition: nmrLSISolver.h:76
CISSTNETLIB_INTEGER Mg
Definition: nmrLSISolver.h:78
nmrLDPSolver LDP
Definition: nmrLSISolver.h:87
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetX(void) const
Definition: nmrLSISolver.h:179
Declaration of nmrSVDRSSolver.
vctDynamicMatrix< CISSTNETLIB_DOUBLE > GTilde
Definition: nmrLSISolver.h:80
size_type rows() const
Definition: vctDynamicConstMatrixBase.h:238
nmrSVDRSSolver SVDRS
Definition: nmrLSISolver.h:86
size_type cols() const
Definition: vctDynamicConstMatrixBase.h:243
CISSTNETLIB_INTEGER Na
Definition: nmrLSISolver.h:77
vctDynamicMatrix< CISSTNETLIB_DOUBLE > VSi
Definition: nmrLSISolver.h:85
void SetSize(size_type rows, size_type cols, bool storageOrder)
Definition: vctDynamicMatrix.h:364
Definition: nmrSVDRSSolver.h:118
void Allocate(CISSTNETLIB_INTEGER ma, CISSTNETLIB_INTEGER na, CISSTNETLIB_INTEGER mg)
Definition: nmrLSISolver.h:136
void Allocate(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n, CISSTNETLIB_INTEGER nb=1)
Definition: nmrSVDRSSolver.h:173
void Allocate(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n)
Definition: nmrLDPSolver.h:132
void Allocate(vctDynamicMatrix< CISSTNETLIB_DOUBLE > &C, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &d, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &b)
Definition: nmrLSISolver.h:156
const bool VCT_COL_MAJOR
Definition: vctForwardDeclarations.h:46
Declaration of nmrLDPSolver.
CISST_EXPORT void Solve(vctDynamicMatrix< CISSTNETLIB_DOUBLE > &C, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &d, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A, vctDynamicMatrix< CISSTNETLIB_DOUBLE > &b)
Rules of exporting.