28#ifndef _nmrSVDSolver_h
29#define _nmrSVDSolver_h
93 CISSTNETLIB_INTEGER
M;
94 CISSTNETLIB_INTEGER
N;
95 CISSTNETLIB_INTEGER
Lda;
96 CISSTNETLIB_INTEGER
Ldu;
128 CISSTNETLIB_INTEGER n,
144 template <
class _matrixOwnerType>
146 CISSTNETLIB_DOUBLE> &A)
169 CISSTNETLIB_INTEGER n,
171 const CISSTNETLIB_INTEGER one = 1;
180 Lda = std::max(one,
M);
183 Lwork = std::max(3 * std::min(
M,
N) + std::max(
M,
N),
201 template <
class _matrixOwnerType>
204 CISSTNETLIB_DOUBLE>& A)
205 {
Allocate(A.rows(), A.cols(), A.IsRowMajor()); }
215 {
Allocate(_rows, _cols, _storageOrder); }
230 template <
class _matrixOwnerType>
233 CISSTNETLIB_DOUBLE> &A)
234 throw (std::runtime_error){
240 cmnThrow(std::runtime_error(
"nmrSVDSolver Solve: Storage order used for Allocate was different"));
248 if (A.IsColMajor()) {
249 if ((
M !=
static_cast<CISSTNETLIB_INTEGER
>(A.rows())) ||
250 (
N !=
static_cast<CISSTNETLIB_INTEGER
>(A.cols()))) {
251 cmnThrow(std::runtime_error(
"nmrSVDSolver Solve: Size used for Allocate was different"));
254 else if (A.IsRowMajor()) {
255 if ((
M !=
static_cast<CISSTNETLIB_INTEGER
>(A.cols())) ||
256 (
N !=
static_cast<CISSTNETLIB_INTEGER
>(A.rows()))) {
257 cmnThrow(std::runtime_error(
"nmrSVDSolver Solve: Size used for Allocate was different"));
262 if (! A.IsCompact()) {
263 cmnThrow(std::runtime_error(
"nmrSVDSolver Solve: Requires a compact matrix"));
267 A.Pointer(), &
Lda,
S.Pointer(),
299#ifdef CISST_COMPILER_IS_MSVC
Definition nmrSVDSolver.h:87
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetVt(void) const
Definition nmrSVDSolver.h:294
vctDynamicMatrix< CISSTNETLIB_DOUBLE > Vt
Definition nmrSVDSolver.h:103
nmrSVDSolver(void)
Definition nmrSVDSolver.h:113
nmrSVDSolver(const vctDynamicMatrixBase< _matrixOwnerType, CISSTNETLIB_DOUBLE > &A)
Definition nmrSVDSolver.h:145
void Allocate(const vctDynamicMatrixBase< _matrixOwnerType, CISSTNETLIB_DOUBLE > &A)
Definition nmrSVDSolver.h:203
CISSTNETLIB_INTEGER Info
Definition nmrSVDSolver.h:105
CISSTNETLIB_INTEGER Lda
Definition nmrSVDSolver.h:95
CISSTNETLIB_INTEGER Ldvt
Definition nmrSVDSolver.h:97
nmrSVDSolver(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n, bool storageOrder)
Definition nmrSVDSolver.h:127
void Allocate(const vctFixedSizeMatrix< CISSTNETLIB_DOUBLE, _rows, _cols, _storageOrder > &A)
Definition nmrSVDSolver.h:211
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetS(void) const
Definition nmrSVDSolver.h:288
void Solve(vctDynamicMatrixBase< _matrixOwnerType, CISSTNETLIB_DOUBLE > &A)
Definition nmrSVDSolver.h:232
bool StorageOrder
Definition nmrSVDSolver.h:106
CISSTNETLIB_INTEGER Lwork
Definition nmrSVDSolver.h:98
nmrSVDSolver(const vctFixedSizeMatrix< CISSTNETLIB_DOUBLE, _rows, _cols, _storageOrder > &A)
Definition nmrSVDSolver.h:152
char Jobu
Definition nmrSVDSolver.h:99
CISSTNETLIB_INTEGER Ldu
Definition nmrSVDSolver.h:96
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetU(void) const
Definition nmrSVDSolver.h:291
char Jobvt
Definition nmrSVDSolver.h:100
vctDynamicMatrix< CISSTNETLIB_DOUBLE > S
Definition nmrSVDSolver.h:101
vctDynamicMatrix< CISSTNETLIB_DOUBLE > U
Definition nmrSVDSolver.h:102
void Solve(vctFixedSizeMatrix< CISSTNETLIB_DOUBLE, _rows, _cols, _storageOrder > &A)
Definition nmrSVDSolver.h:278
CISSTNETLIB_INTEGER N
Definition nmrSVDSolver.h:94
CISSTNETLIB_INTEGER M
Definition nmrSVDSolver.h:93
void Allocate(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n, bool storageOrder)
Definition nmrSVDSolver.h:168
vctDynamicMatrix< CISSTNETLIB_DOUBLE > Work
Definition nmrSVDSolver.h:104
Definition vctDynamicMatrixBase.h:43
Definition vctForwardDeclarations.h:157
Dynamic matrix referencing existing memory.
Definition vctDynamicMatrixRef.h:75
Implementation of a fixed-size matrix using template metaprogramming.
Definition vctFixedSizeMatrix.h:54
#define CISST_DEPRECATED
Definition cmnPortability.h:314
void cmnThrow(const _exceptionType &except, cmnLogLevel lod=CMN_LOG_LEVEL_INIT_ERROR)
Definition cmnThrow.h:76
size_t size_type
Definition vctContainerTraits.h:35
Declaration of vctDynamicMatrix.
const bool VCT_COL_MAJOR
Definition vctForwardDeclarations.h:44