28#ifndef _nmrPInverseSolver_h
29#define _nmrPInverseSolver_h
81 CISSTNETLIB_INTEGER
M;
82 CISSTNETLIB_INTEGER
N;
85 CISSTNETLIB_DOUBLE
EPS;
92#ifdef CISST_COMPILER_IS_MSVC
94#pragma warning (disable: 4996)
99#ifdef CISST_COMPILER_IS_MSVC
153 inline void Allocate(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n,
bool storageOrder) {
160 S.SetSize(
MinMN, 1, storageOrder);
161 U.SetSize(
M,
M, storageOrder);
162 V.SetSize(
N,
N, storageOrder);
168 }
while (
EPS + 1.0 != 1.0);
179 Allocate(A.rows(), A.cols(), A.IsRowMajor());
195 template <
class _matrixOwnerType>
197 throw (std::runtime_error) {
203 CISSTNETLIB_DOUBLE eps =
EPS *
svd.
GetS().at(0, 0);
205 CISSTNETLIB_DOUBLE singularValue;
206 for (
int irank = 0; irank <
MinMN; irank++) {
207 if ((singularValue =
S(irank, 0)) > eps) {
208 for (
int j = 0; j <
M; j++) {
209 for (
int i = 0; i <
N; i++) {
211 +
V(i, irank)*
U(j, irank)/singularValue;
237#ifdef CISST_COMPILER_IS_MSVC
Definition nmrPInverseSolver.h:75
void Allocate(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n, bool storageOrder)
Definition nmrPInverseSolver.h:153
bool StorageOrder
Definition nmrPInverseSolver.h:90
vctDynamicMatrix< CISSTNETLIB_DOUBLE > U
Definition nmrPInverseSolver.h:87
CISSTNETLIB_INTEGER MinMN
Definition nmrPInverseSolver.h:84
nmrPInverseSolver(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n, bool storageOrder=VCT_COL_MAJOR)
Definition nmrPInverseSolver.h:128
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetU(void) const
Definition nmrPInverseSolver.h:223
vctDynamicMatrix< CISSTNETLIB_DOUBLE > S
Definition nmrPInverseSolver.h:86
CISSTNETLIB_INTEGER N
Definition nmrPInverseSolver.h:82
CISSTNETLIB_INTEGER M
Definition nmrPInverseSolver.h:81
CISSTNETLIB_DOUBLE EPS
Definition nmrPInverseSolver.h:85
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetV(void) const
Definition nmrPInverseSolver.h:227
nmrPInverseSolver(void)
Definition nmrPInverseSolver.h:109
void Solve(vctDynamicMatrixBase< _matrixOwnerType, CISSTNETLIB_DOUBLE > &A)
Definition nmrPInverseSolver.h:196
CISSTNETLIB_INTEGER MaxMN
Definition nmrPInverseSolver.h:83
void Allocate(const vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A)
Definition nmrPInverseSolver.h:178
nmrSVDSolver svd
Definition nmrPInverseSolver.h:97
nmrPInverseSolver(const vctDynamicMatrix< CISSTNETLIB_DOUBLE > &A)
Definition nmrPInverseSolver.h:139
vctDynamicMatrix< CISSTNETLIB_DOUBLE > PInverseA
Definition nmrPInverseSolver.h:89
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetPInverse(void) const
Definition nmrPInverseSolver.h:231
vctDynamicMatrix< CISSTNETLIB_DOUBLE > V
Definition nmrPInverseSolver.h:88
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetS(void) const
Definition nmrPInverseSolver.h:219
Definition nmrSVDSolver.h:87
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetVt(void) const
Definition nmrSVDSolver.h:294
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetS(void) const
Definition nmrSVDSolver.h:288
void Solve(vctDynamicMatrixBase< _matrixOwnerType, CISSTNETLIB_DOUBLE > &A)
Definition nmrSVDSolver.h:232
const vctDynamicMatrix< CISSTNETLIB_DOUBLE > & GetU(void) const
Definition nmrSVDSolver.h:291
void Allocate(CISSTNETLIB_INTEGER m, CISSTNETLIB_INTEGER n, bool storageOrder)
Definition nmrSVDSolver.h:168
Definition vctDynamicMatrixBase.h:43
Definition vctForwardDeclarations.h:157
#define CISST_DEPRECATED
Definition cmnPortability.h:314
Declaration of nmrSVDSolver.
Declaration of vctDynamicMatrix.
const bool VCT_COL_MAJOR
Definition vctForwardDeclarations.h:44