Visual Servoing Platform  version 3.3.0 under development (2020-02-17)
vpMatrix Class Reference

#include <visp3/core/vpMatrix.h>

+ Inheritance diagram for vpMatrix:

Public Types

enum  vpDetMethod { LU_DECOMPOSITION }
 

Public Member Functions

 vpMatrix ()
 
 vpMatrix (unsigned int r, unsigned int c)
 
 vpMatrix (unsigned int r, unsigned int c, double val)
 
 vpMatrix (const vpMatrix &M, unsigned int r, unsigned int c, unsigned int nrows, unsigned int ncols)
 
 vpMatrix (const vpArray2D< double > &A)
 
 vpMatrix (const vpMatrix &A)
 
 vpMatrix (vpMatrix &&A)
 
 vpMatrix (const std::initializer_list< double > &list)
 
 vpMatrix (unsigned int nrows, unsigned int ncols, const std::initializer_list< double > &list)
 
 vpMatrix (const std::initializer_list< std::initializer_list< double > > &lists)
 
virtual ~vpMatrix ()
 
void clear ()
 
bool operator== (const vpArray2D< float > &A) const
 
Setting a diagonal matrix
void diag (const double &val=1.0)
 
void diag (const vpColVector &A)
 
void eye ()
 
void eye (unsigned int n)
 
void eye (unsigned int m, unsigned int n)
 
Assignment operators
vpMatrixoperator<< (double *)
 
vpMatrixoperator<< (double val)
 
vpMatrixoperator, (double val)
 
vpMatrixoperator= (const vpArray2D< double > &A)
 
vpMatrixoperator= (const vpMatrix &A)
 
vpMatrixoperator= (vpMatrix &&A)
 
vpMatrixoperator= (const std::initializer_list< double > &list)
 
vpMatrixoperator= (const std::initializer_list< std::initializer_list< double > > &lists)
 
vpMatrixoperator= (double x)
 
Stacking
void stack (const vpMatrix &A)
 
void stack (const vpRowVector &r)
 
void stack (const vpColVector &c)
 
void stackColumns (vpColVector &out)
 
vpColVector stackColumns ()
 
void stackRows (vpRowVector &out)
 
vpRowVector stackRows ()
 
Matrix insertion
void insert (const vpMatrix &A, unsigned int r, unsigned int c)
 
Columns, rows, sub-matrices extraction
vpMatrix extract (unsigned int r, unsigned int c, unsigned int nrows, unsigned int ncols) const
 
vpColVector getCol (unsigned int j) const
 
vpColVector getCol (unsigned int j, unsigned int i_begin, unsigned int size) const
 
vpRowVector getRow (unsigned int i) const
 
vpRowVector getRow (unsigned int i, unsigned int j_begin, unsigned int size) const
 
vpColVector getDiag () const
 
void init (const vpMatrix &M, unsigned int r, unsigned int c, unsigned int nrows, unsigned int ncols)
 
Matrix operations
double det (vpDetMethod method=LU_DECOMPOSITION) const
 
double detByLU () const
 
double detByLUEigen3 () const
 
double detByLUGsl () const
 
double detByLULapack () const
 
double detByLUOpenCV () const
 
vpMatrix expm () const
 
vpMatrixoperator+= (const vpMatrix &B)
 
vpMatrixoperator-= (const vpMatrix &B)
 
vpMatrix operator* (const vpMatrix &B) const
 
vpMatrix operator* (const vpRotationMatrix &R) const
 
vpMatrix operator* (const vpVelocityTwistMatrix &V) const
 
vpMatrix operator* (const vpForceTwistMatrix &V) const
 
vpTranslationVector operator* (const vpTranslationVector &tv) const
 
vpColVector operator* (const vpColVector &v) const
 
vpMatrix operator+ (const vpMatrix &B) const
 
vpMatrix operator- (const vpMatrix &B) const
 
vpMatrix operator- () const
 
vpMatrixoperator+= (double x)
 
vpMatrixoperator-= (double x)
 
vpMatrixoperator*= (double x)
 
vpMatrixoperator/= (double x)
 
vpMatrix operator* (double x) const
 
vpMatrix operator/ (double x) const
 
double sum () const
 
double sumSquare () const
 
Hadamard product
vpMatrix hadamard (const vpMatrix &m) const
 
Kronecker product
void kron (const vpMatrix &m1, vpMatrix &out) const
 
vpMatrix kron (const vpMatrix &m1) const
 
Transpose
vpMatrix t () const
 
vpMatrix transpose () const
 
void transpose (vpMatrix &At) const
 
vpMatrix AAt () const
 
void AAt (vpMatrix &B) const
 
vpMatrix AtA () const
 
void AtA (vpMatrix &B) const
 
Matrix inversion
vpMatrix inverseByLU () const
 
vpMatrix inverseByLUEigen3 () const
 
vpMatrix inverseByLUGsl () const
 
vpMatrix inverseByLULapack () const
 
vpMatrix inverseByLUOpenCV () const
 
vpMatrix inverseByCholesky () const
 
vpMatrix inverseByCholeskyLapack () const
 
vpMatrix inverseByCholeskyOpenCV () const
 
vpMatrix inverseByQR () const
 
vpMatrix inverseByQRLapack () const
 
vpMatrix inverseTriangular (bool upper=true) const
 
vpMatrix pseudoInverse (double svThreshold=1e-6) const
 
unsigned int pseudoInverse (vpMatrix &Ap, double svThreshold=1e-6) const
 
unsigned int pseudoInverse (vpMatrix &Ap, vpColVector &sv, double svThreshold=1e-6) const
 
unsigned int pseudoInverse (vpMatrix &Ap, vpColVector &sv, double svThreshold, vpMatrix &imA, vpMatrix &imAt) const
 
unsigned int pseudoInverse (vpMatrix &Ap, vpColVector &sv, double svThreshold, vpMatrix &imA, vpMatrix &imAt, vpMatrix &kerAt) const
 
vpMatrix pseudoInverseLapack (double svThreshold=1e-6) const
 
unsigned int pseudoInverseLapack (vpMatrix &Ap, double svThreshold=1e-6) const
 
unsigned int pseudoInverseLapack (vpMatrix &Ap, vpColVector &sv, double svThreshold=1e-6) const
 
unsigned int pseudoInverseLapack (vpMatrix &Ap, vpColVector &sv, double svThreshold, vpMatrix &imA, vpMatrix &imAt, vpMatrix &kerAt) const
 
vpMatrix pseudoInverseEigen3 (double svThreshold=1e-6) const
 
unsigned int pseudoInverseEigen3 (vpMatrix &Ap, double svThreshold=1e-6) const
 
unsigned int pseudoInverseEigen3 (vpMatrix &Ap, vpColVector &sv, double svThreshold=1e-6) const
 
unsigned int pseudoInverseEigen3 (vpMatrix &Ap, vpColVector &sv, double svThreshold, vpMatrix &imA, vpMatrix &imAt, vpMatrix &kerAt) const
 
vpMatrix pseudoInverseOpenCV (double svThreshold=1e-6) const
 
unsigned int pseudoInverseOpenCV (vpMatrix &Ap, double svThreshold=1e-6) const
 
unsigned int pseudoInverseOpenCV (vpMatrix &Ap, vpColVector &sv, double svThreshold=1e-6) const
 
unsigned int pseudoInverseOpenCV (vpMatrix &Ap, vpColVector &sv, double svThreshold, vpMatrix &imA, vpMatrix &imAt, vpMatrix &kerAt) const
 
vpMatrix pseudoInverseGsl (double svThreshold=1e-6) const
 
unsigned int pseudoInverseGsl (vpMatrix &Ap, double svThreshold=1e-6) const
 
unsigned int pseudoInverseGsl (vpMatrix &Ap, vpColVector &sv, double svThreshold=1e-6) const
 
unsigned int pseudoInverseGsl (vpMatrix &Ap, vpColVector &sv, double svThreshold, vpMatrix &imA, vpMatrix &imAt, vpMatrix &kerAt) const
 
SVD decomposition
double cond (double svThreshold=1e-6) const
 
unsigned int kernel (vpMatrix &kerAt, double svThreshold=1e-6) const
 
void solveBySVD (const vpColVector &B, vpColVector &x) const
 
vpColVector solveBySVD (const vpColVector &B) const
 
void svd (vpColVector &w, vpMatrix &V)
 
void svdEigen3 (vpColVector &w, vpMatrix &V)
 
void svdGsl (vpColVector &w, vpMatrix &V)
 
void svdLapack (vpColVector &w, vpMatrix &V)
 
void svdOpenCV (vpColVector &w, vpMatrix &V)
 
QR decomposition
unsigned int qr (vpMatrix &Q, vpMatrix &R, bool full=false, bool squareR=false, double tol=1e-6) const
 
unsigned int qrPivot (vpMatrix &Q, vpMatrix &R, vpMatrix &P, bool full=false, bool squareR=false, double tol=1e-6) const
 
void solveByQR (const vpColVector &b, vpColVector &x) const
 
vpColVector solveByQR (const vpColVector &b) const
 
Eigen values
vpColVector eigenValues () const
 
void eigenValues (vpColVector &evalue, vpMatrix &evector) const
 
Norms
double euclideanNorm () const
 
double frobeniusNorm () const
 
double inducedL2Norm () const
 
double infinityNorm () const
 
Printing
std::ostream & cppPrint (std::ostream &os, const std::string &matrixName="A", bool octet=false) const
 
std::ostream & csvPrint (std::ostream &os) const
 
std::ostream & maplePrint (std::ostream &os) const
 
std::ostream & matlabPrint (std::ostream &os) const
 
int print (std::ostream &s, unsigned int length, const std::string &intro="") const
 
void printSize () const
 
Inherited functionalities from vpArray2D
unsigned int getCols () const
 
double getMaxValue () const
 
double getMinValue () const
 
unsigned int getRows () const
 
unsigned int size () const
 
void resize (unsigned int nrows, unsigned int ncols, bool flagNullify=true, bool recopy_=true)
 
void reshape (unsigned int nrows, unsigned int ncols)
 
bool operator== (const vpArray2D< double > &A) const
 
bool operator!= (const vpArray2D< double > &A) const
 
double * operator[] (unsigned int i)
 
double * operator[] (unsigned int i) const
 
vpArray2D< double > hadamard (const vpArray2D< double > &m) const
 

Static Public Member Functions

Setting a diagonal matrix with Static Public Member Functions
static void createDiagonalMatrix (const vpColVector &A, vpMatrix &DA)
 
Matrix insertion with Static Public Member Functions
static vpMatrix insert (const vpMatrix &A, const vpMatrix &B, unsigned int r, unsigned int c)
 
static void insert (const vpMatrix &A, const vpMatrix &B, vpMatrix &C, unsigned int r, unsigned int c)
 
Stacking with Static Public Member Functions
static vpMatrix juxtaposeMatrices (const vpMatrix &A, const vpMatrix &B)
 
static void juxtaposeMatrices (const vpMatrix &A, const vpMatrix &B, vpMatrix &C)
 
static vpMatrix stack (const vpMatrix &A, const vpMatrix &B)
 
static vpMatrix stack (const vpMatrix &A, const vpRowVector &r)
 
static vpMatrix stack (const vpMatrix &A, const vpColVector &c)
 
static void stack (const vpMatrix &A, const vpMatrix &B, vpMatrix &C)
 
static void stack (const vpMatrix &A, const vpRowVector &r, vpMatrix &C)
 
static void stack (const vpMatrix &A, const vpColVector &c, vpMatrix &C)
 
Matrix operations with Static Public Member Functions
static void add2Matrices (const vpMatrix &A, const vpMatrix &B, vpMatrix &C)
 
static void add2Matrices (const vpColVector &A, const vpColVector &B, vpColVector &C)
 
static void add2WeightedMatrices (const vpMatrix &A, const double &wA, const vpMatrix &B, const double &wB, vpMatrix &C)
 
static void computeHLM (const vpMatrix &H, const double &alpha, vpMatrix &HLM)
 
static void mult2Matrices (const vpMatrix &A, const vpMatrix &B, vpMatrix &C)
 
static void mult2Matrices (const vpMatrix &A, const vpMatrix &B, vpRotationMatrix &C)
 
static void mult2Matrices (const vpMatrix &A, const vpMatrix &B, vpHomogeneousMatrix &C)
 
static void mult2Matrices (const vpMatrix &A, const vpColVector &B, vpColVector &C)
 
static void multMatrixVector (const vpMatrix &A, const vpColVector &v, vpColVector &w)
 
static void negateMatrix (const vpMatrix &A, vpMatrix &C)
 
static void sub2Matrices (const vpMatrix &A, const vpMatrix &B, vpMatrix &C)
 
static void sub2Matrices (const vpColVector &A, const vpColVector &B, vpColVector &C)
 
Kronecker product with Static Public Member Functions
static void kron (const vpMatrix &m1, const vpMatrix &m2, vpMatrix &out)
 
static vpMatrix kron (const vpMatrix &m1, const vpMatrix &m2)
 
2D Convolution with Static Public Member Functions
static vpMatrix conv2 (const vpMatrix &M, const vpMatrix &kernel, const std::string &mode="full")
 
static void conv2 (const vpMatrix &M, const vpMatrix &kernel, vpMatrix &res, const std::string &mode="full")
 
Covariance computation with Static Public Member Functions
static vpMatrix computeCovarianceMatrix (const vpMatrix &A, const vpColVector &x, const vpColVector &b)
 
static vpMatrix computeCovarianceMatrix (const vpMatrix &A, const vpColVector &x, const vpColVector &b, const vpMatrix &w)
 
static vpMatrix computeCovarianceMatrixVVS (const vpHomogeneousMatrix &cMo, const vpColVector &deltaS, const vpMatrix &Ls, const vpMatrix &W)
 
static vpMatrix computeCovarianceMatrixVVS (const vpHomogeneousMatrix &cMo, const vpColVector &deltaS, const vpMatrix &Ls)
 
Matrix I/O with Static Public Member Functions
static bool loadMatrix (const std::string &filename, vpArray2D< double > &M, bool binary=false, char *header=NULL)
 
static bool loadMatrixYAML (const std::string &filename, vpArray2D< double > &M, char *header=NULL)
 
static bool saveMatrix (const std::string &filename, const vpArray2D< double > &M, bool binary=false, const char *header="")
 
static bool saveMatrixYAML (const std::string &filename, const vpArray2D< double > &M, const char *header="")
 
Inherited I/O from vpArray2D with Static Public Member Functions
static bool load (const std::string &filename, vpArray2D< double > &A, bool binary=false, char *header=NULL)
 
static bool loadYAML (const std::string &filename, vpArray2D< double > &A, char *header=NULL)
 
static bool save (const std::string &filename, const vpArray2D< double > &A, bool binary=false, const char *header="")
 
static bool saveYAML (const std::string &filename, const vpArray2D< double > &A, const char *header="")
 

Public Attributes

double * data
 

Protected Attributes

unsigned int rowNum
 
unsigned int colNum
 
double ** rowPtrs
 
unsigned int dsize
 

Related Functions

(Note that these are not member functions.)

vpMatrix operator* (const double &x, const vpMatrix &B)
 
enum  vpGEMMmethod
 
void vpGEMM (const vpArray2D< double > &A, const vpArray2D< double > &B, const double &alpha, const vpArray2D< double > &C, const double &beta, vpArray2D< double > &D, const unsigned int &ops=0)
 

Deprecated functions

vp_deprecated void init ()
 
vp_deprecated void stackMatrices (const vpMatrix &A)
 
vp_deprecated void setIdentity (const double &val=1.0)
 
vp_deprecated vpRowVector row (unsigned int i)
 
vp_deprecated vpColVector column (unsigned int j)
 
static vp_deprecated vpMatrix stackMatrices (const vpMatrix &A, const vpMatrix &B)
 
static vp_deprecated void stackMatrices (const vpMatrix &A, const vpMatrix &B, vpMatrix &C)
 
static vp_deprecated vpMatrix stackMatrices (const vpMatrix &A, const vpRowVector &B)
 
static vp_deprecated void stackMatrices (const vpMatrix &A, const vpRowVector &B, vpMatrix &C)
 
static vp_deprecated vpMatrix stackMatrices (const vpColVector &A, const vpColVector &B)
 
static vp_deprecated void stackMatrices (const vpColVector &A, const vpColVector &B, vpColVector &C)
 

Detailed Description

Implementation of a matrix and operations on matrices.

This class needs one of the following third-party to compute matrix inverse, pseudo-inverse, singular value decomposition, determinant:

  • If Lapack is installed and detected by ViSP, this 3rd party is used by vpMatrix. Installation instructions are provided here https://visp.inria.fr/3rd_lapack;
  • else if Eigen3 is installed and detected by ViSP, this 3rd party is used by vpMatrix. Installation instructions are provided here https://visp.inria.fr/3rd_eigen;
  • else if OpenCV is installed and detected by ViSP, this 3rd party is used, Installation instructions are provided here https://visp.inria.fr/3rd_opencv;
  • else if GSL is installed and detected by ViSP, we use this other 3rd party. Installation instructions are provided here https://visp.inria.fr/3rd_gsl.
  • If none of these previous 3rd parties is installed, we use by default a Lapack built-in version.

vpMatrix class provides a data structure for the matrices as well as a set of operations on these matrices.

The vpMatrix class is derived from vpArray2D<double>.

The code below shows how to create a 2-by-3 matrix of doubles, set the element values and access them:

#include <visp3/code/vpMatrix.h
int main()
{
vpMatrix M(2, 3);
M[0][0] = -1; M[0][1] = -2; M[0][2] = -3;
M[1][0] = 4; M[1][1] = 5.5; M[1][2] = 6.0f;
std::cout << "M:" << std::endl;
for (unsigned int i = 0; i < M.getRows(); i++) {
for (unsigned int j = 0; j < M.getCols(); j++) {
std::cout << M[i][j] << " ";
}
std::cout << std::endl;
}
}

Once build, this previous code produces the following output:

M:
-1 -2 -3
4 5.5 6

If ViSP is build with c++11 enabled, you can do the same using:

#include <visp3/code/vpMatrix.h
int main()
{
#if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
vpMatrix M( {-1, -2, -3}, {4, 5.5, 6.0f} );
std::cout << "M:\n" << M << std::endl;
#endif
}

You can also create and initialize a matrix this way:

#include <visp3/code/vpMatrix.h
int main()
{
#if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
vpMatrix M(2, 3, {-1, -2, -3, 4, 5.5, 6.0f} );
#endif
}

The Matrix could also be initialized using operator=(const std::initializer_list< std::initializer_list< double > > &)

int main()
{
#if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
M = { {-1, -2, -3}, {4, 5.5, 6.0f} };
#endif
}
See also
vpArray2D, vpRowVector, vpColVector, vpHomogeneousMatrix, vpRotationMatrix, vpVelocityTwistMatrix, vpForceTwistMatrix, vpHomography
Examples:
manServo4PointsDisplay.cpp, manSimu4Dots.cpp, manSimu4Points.cpp, mbot-apriltag-2D-half-vs.cpp, mbot-apriltag-ibvs.cpp, mbot-apriltag-pbvs.cpp, photometricVisualServoing.cpp, quadprog.cpp, quadprog_eq.cpp, servoAfma4Point2DArtVelocity.cpp, servoAfma4Point2DCamVelocityKalman.cpp, servoAfma6FourPoints2DArtVelocity.cpp, servoAfma6Point2DArtVelocity.cpp, servoAfma6Points2DCamVelocityEyeToHand.cpp, servoBebop2.cpp, servoBiclopsPoint2DArtVelocity.cpp, servoFlirPtuIBVS.cpp, servoMomentImage.cpp, servoPioneerPanSegment3D.cpp, servoPioneerPoint2DDepth.cpp, servoPioneerPoint2DDepthWithoutVpServo.cpp, servoPtu46Point2DArtVelocity.cpp, servoSimu3D_cMcd_CamVelocityWithoutVpServo.cpp, servoSimu4Points.cpp, servoSimuCylinder.cpp, servoSimuFourPoints2DCamVelocity.cpp, servoSimuFourPoints2DCamVelocityDisplay.cpp, servoSimuFourPoints2DPolarCamVelocityDisplay.cpp, servoSimuPoint2DCamVelocity2.cpp, servoSimuPoint2DCamVelocity3.cpp, servoSimuPoint2DhalfCamVelocity2.cpp, servoSimuSphere.cpp, servoViper650FourPoints2DArtVelocityLs_cur.cpp, servoViper850FourPoints2DArtVelocityLs_cur.cpp, servoViper850FourPoints2DArtVelocityLs_des.cpp, servoViper850Point2DArtVelocity-jointAvoidance-basic.cpp, servoViper850Point2DArtVelocity-jointAvoidance-gpa.cpp, servoViper850Point2DArtVelocity-jointAvoidance-large.cpp, servoViper850Point2DArtVelocity.cpp, servoViper850Point2DCamVelocityKalman.cpp, simulateFourPoints2DCartesianCamVelocity.cpp, simulateFourPoints2DPolarCamVelocity.cpp, testColVector.cpp, testEigenConversion.cpp, testFeature.cpp, testFrankaCartVelocity-2.cpp, testFrankaGetPose.cpp, testImageFilter.cpp, testImageWarp.cpp, testMatrix.cpp, testMatrixConditionNumber.cpp, testMatrixConvolution.cpp, testMatrixDeterminant.cpp, testMatrixException.cpp, testMatrixInitialization.cpp, testMatrixInverse.cpp, testMatrixPseudoInverse.cpp, testPoseFeatures.cpp, testRobotViper650-frames.cpp, testRobotViper850-frames.cpp, testRowVector.cpp, testSvd.cpp, testTranslationVector.cpp, tutorial-flir-ptu-ibvs.cpp, tutorial-image-filter.cpp, tutorial-matlab.cpp, tutorial-simu-pioneer-continuous-gain-adaptive.cpp, tutorial-simu-pioneer-continuous-gain-constant.cpp, tutorial-simu-pioneer-pan.cpp, and tutorial-simu-pioneer.cpp.

Definition at line 164 of file vpMatrix.h.

Member Enumeration Documentation

◆ vpDetMethod

Method used to compute the determinant of a square matrix.

See also
det()
Enumerator
LU_DECOMPOSITION 

LU decomposition method.

Definition at line 171 of file vpMatrix.h.

Constructor & Destructor Documentation

◆ vpMatrix() [1/10]

vpMatrix::vpMatrix ( )
inline

Basic constructor of a matrix of double. Number of columns and rows are zero.

Definition at line 180 of file vpMatrix.h.

◆ vpMatrix() [2/10]

vpMatrix::vpMatrix ( unsigned int  r,
unsigned int  c 
)
inline

Constructor that initialize a matrix of double with 0.

Parameters
r: Matrix number of rows.
c: Matrix number of columns.

Definition at line 188 of file vpMatrix.h.

◆ vpMatrix() [3/10]

vpMatrix::vpMatrix ( unsigned int  r,
unsigned int  c,
double  val 
)
inline

Constructor that initialize a matrix of double with val.

Parameters
r: Matrix number of rows.
c: Matrix number of columns.
val: Each element of the matrix is set to val.

Definition at line 197 of file vpMatrix.h.

◆ vpMatrix() [4/10]

vpMatrix::vpMatrix ( const vpMatrix M,
unsigned int  r,
unsigned int  c,
unsigned int  nrows,
unsigned int  ncols 
)

Construct a matrix as a sub-matrix of the input matrix M.

See also
init(const vpMatrix &M, unsigned int r, unsigned int c, unsigned int nrows, unsigned int ncols)

Definition at line 232 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpException::dimensionError, init(), and vpArray2D< Type >::rowNum.

◆ vpMatrix() [5/10]

vpMatrix::vpMatrix ( const vpArray2D< double > &  A)
inline

Create a matrix from a 2D array that could be one of the following container that inherit from vpArray2D such as vpMatrix, vpRotationMatrix, vpHomogeneousMatrix, vpPoseVector, vpColVector, vpRowVector...

The following example shows how to create a matrix from an homogeneous matrix:

Definition at line 212 of file vpMatrix.h.

◆ vpMatrix() [6/10]

vpMatrix::vpMatrix ( const vpMatrix A)
inline

Definition at line 214 of file vpMatrix.h.

◆ vpMatrix() [7/10]

◆ vpMatrix() [8/10]

vpMatrix::vpMatrix ( const std::initializer_list< double > &  list)
explicit

Construct a matrix from a list of double values.

Parameters
list: List of double.

The following code shows how to use this constructor to initialize a 2-by-3 matrix using reshape() function:

#include <visp3/core/vpMatrix.h>
int main()
{
#if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
vpMatrix M( {-1, -2, -3, 4, 5.5, 6.0f} );
M.reshape(2, 3);
std::cout << "M:\n" << M << std::endl;
#endif
}

It produces the following output:

M:
-1 -2 -3
4 5.5 6

Definition at line 287 of file vpMatrix.cpp.

◆ vpMatrix() [9/10]

vpMatrix::vpMatrix ( unsigned int  nrows,
unsigned int  ncols,
const std::initializer_list< double > &  list 
)
explicit

Construct a matrix from a list of double values.

Parameters
ncols,nrows: Matrix size.
list: List of double.

The following code shows how to use this constructor to initialize a 2-by-3 matrix:

#include <visp3/core/vpMatrix.h>
int main()
{
#if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
vpMatrix M(2, 3, {-1, -2, -3, 4, 5.5, 6});
std::cout << "M:\n" << M << std::endl;
#endif
}

It produces the following output:

M:
-1 -2 -3
4 5.5 6

Definition at line 314 of file vpMatrix.cpp.

◆ vpMatrix() [10/10]

vpMatrix::vpMatrix ( const std::initializer_list< std::initializer_list< double > > &  lists)
explicit

Construct a matrix from a list of double values.

Parameters
lists: List of double. The following code shows how to use this constructor to initialize a 2-by-3 matrix function:
#include <visp3/core/vpMatrix.h>
int main()
{
#if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
vpMatrix M( { {-1, -2, -3}, {4, 5.5, 6} } );
std::cout << "M:\n" << M << std::endl;
#endif
}
It produces the following output:
M:
-1 -2 -3
4 5.5 6

Definition at line 339 of file vpMatrix.cpp.

◆ ~vpMatrix()

virtual vpMatrix::~vpMatrix ( )
inlinevirtual

Destructor (Memory de-allocation)

Definition at line 224 of file vpMatrix.h.

Member Function Documentation

◆ AAt() [1/2]

vpMatrix vpMatrix::AAt ( ) const

Computes the $AA^T$ operation $B = A*A^T$

Returns
$A*A^T$
See also
AAt(vpMatrix &) const

Definition at line 595 of file vpMatrix.cpp.

◆ AAt() [2/2]

void vpMatrix::AAt ( vpMatrix B) const

Compute the AAt operation such as $B = A*A^T$.

The result is placed in the parameter B and not returned.

A new matrix won't be allocated for every use of the function. This results in a speed gain if used many times with the same result matrix size.

See also
AAt()

Definition at line 615 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpArray2D< double >::colNum, vpArray2D< Type >::resize(), vpArray2D< double >::rowNum, vpArray2D< Type >::rowNum, and vpArray2D< double >::rowPtrs.

◆ add2Matrices() [1/2]

void vpMatrix::add2Matrices ( const vpMatrix A,
const vpMatrix B,
vpMatrix C 
)
static

Operation C = A + B.

The result is placed in the third parameter C and not returned. A new matrix won't be allocated for every use of the function (speed gain if used many times with the same result matrix size).

See also
operator+()

Definition at line 1374 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< Type >::resize(), vpArray2D< Type >::rowNum, and vpArray2D< Type >::rowPtrs.

Referenced by operator+().

◆ add2Matrices() [2/2]

void vpMatrix::add2Matrices ( const vpColVector A,
const vpColVector B,
vpColVector C 
)
static
Warning
This function is provided for compat with previous releases. You should rather use the functionalities provided in vpColVector class.

Operation C = A + B.

The result is placed in the third parameter C and not returned. A new vector won't be allocated for every use of the function (speed gain if used many times with the same result matrix size).

See also
vpColVector::operator+()

Definition at line 1407 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpColVector::resize(), vpArray2D< Type >::rowNum, and vpArray2D< Type >::rowPtrs.

◆ add2WeightedMatrices()

void vpMatrix::add2WeightedMatrices ( const vpMatrix A,
const double &  wA,
const vpMatrix B,
const double &  wB,
vpMatrix C 
)
static

Operation C = A*wA + B*wB

The result is placed in the third parameter C and not returned. A new matrix won't be allocated for every use of the function (Speed gain if used many times with the same result matrix size).

See also
operator+()

Definition at line 1345 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< Type >::resize(), vpArray2D< Type >::rowNum, and vpArray2D< Type >::rowPtrs.

◆ AtA() [1/2]

◆ AtA() [2/2]

void vpMatrix::AtA ( vpMatrix B) const

Compute the AtA operation such as $B = A^T*A$.

The result is placed in the parameter B and not returned.

A new matrix won't be allocated for every use of the function. This results in a speed gain if used many times with the same result matrix size.

See also
AtA()

Definition at line 649 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< Type >::colNum, vpArray2D< double >::data, vpArray2D< Type >::data, vpArray2D< Type >::resize(), vpArray2D< double >::rowNum, and vpArray2D< Type >::rowNum.

◆ clear()

void vpMatrix::clear ( )
inline

Removes all elements from the matrix (which are destroyed), leaving the container with a size of 0.

Definition at line 230 of file vpMatrix.h.

References vpArray2D< Type >::hadamard(), operator*(), vpArray2D< Type >::operator<<, and vpArray2D< Type >::operator=().

Referenced by vpPose::init().

◆ column()

vpColVector vpMatrix::column ( unsigned int  j)
Deprecated:
This method is deprecated. You should rather use getCol(). More precisely, the following code:
unsigned int column_index = ...;
... = L.column(column_index);

should be replaced with:

... = L.getCol(column_index - 1);
Warning
Notice column(1) is the 0-th column. This function returns the j-th columns of the matrix.
Parameters
j: Index of the column to extract noting that column index start at 1 to get the first column.

Definition at line 5732 of file vpMatrix.cpp.

References vpArray2D< double >::getRows().

◆ computeCovarianceMatrix() [1/2]

vpMatrix vpMatrix::computeCovarianceMatrix ( const vpMatrix A,
const vpColVector x,
const vpColVector b 
)
static

Compute the covariance matrix of the parameters x from a least squares minimisation defined as: Ax = b

Parameters
A: Matrix A from Ax = b.
x: Vector x from Ax = b corresponding to the parameters to estimate.
b: Vector b from Ax = b.

Definition at line 59 of file vpMatrix_covariance.cpp.

References vpException::divideByZeroError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), pseudoInverse(), and t().

Referenced by computeCovarianceMatrixVVS(), vpPoseFeatures::computePose(), and vpPose::poseVirtualVSrobust().

◆ computeCovarianceMatrix() [2/2]

vpMatrix vpMatrix::computeCovarianceMatrix ( const vpMatrix A,
const vpColVector x,
const vpColVector b,
const vpMatrix W 
)
static

Compute the covariance matrix of the parameters x from a least squares minimisation defined as: WAx = Wb

Parameters
A: Matrix A from WAx = Wb.
x: Vector x from WAx = Wb corresponding to the parameters to estimate.
b: Vector b from WAx = Wb.
W: Diagonal weigths matrix from WAx = Wb.

Definition at line 91 of file vpMatrix_covariance.cpp.

References vpException::divideByZeroError, vpArray2D< Type >::getCols(), and t().

◆ computeCovarianceMatrixVVS() [1/2]

vpMatrix vpMatrix::computeCovarianceMatrixVVS ( const vpHomogeneousMatrix cMo,
const vpColVector deltaS,
const vpMatrix Ls,
const vpMatrix W 
)
static

Compute the covariance matrix of an image-based virtual visual servoing. This assumes the optimization has been done via v = (W * Ls).pseudoInverse() W * DeltaS.

Parameters
cMo: Pose matrix that has been computed with the v.
deltaS: Error vector used in v = (W * Ls).pseudoInverse() * W * DeltaS.
Ls: interaction matrix used in v = (W * Ls).pseudoInverse() * W * DeltaS.
W: Weight matrix used in v = (W * Ls).pseudoInverse() * W * DeltaS.

Definition at line 149 of file vpMatrix_covariance.cpp.

References computeCovarianceMatrix(), vpHomogeneousMatrix::extract(), eye(), vpArray2D< Type >::getRows(), pseudoInverse(), vpMath::sinc(), vpTranslationVector::skew(), vpColVector::skew(), vpMath::sqr(), and vpColVector::sumSquare().

Referenced by computeCovarianceMatrixVVS(), vpMbTracker::computeCovarianceMatrixVVS(), and vpPose::poseVirtualVS().

◆ computeCovarianceMatrixVVS() [2/2]

vpMatrix vpMatrix::computeCovarianceMatrixVVS ( const vpHomogeneousMatrix cMo,
const vpColVector deltaS,
const vpMatrix Ls 
)
static

Compute the covariance matrix of an image-based virtual visual servoing. This assumes the optimization has been done via v = Ls.pseudoInverse() * DeltaS.

Parameters
cMo: Pose matrix that has been computed with the v.
deltaS: Error vector used in v = Ls.pseudoInverse() * DeltaS
Ls: interaction matrix used in v = Ls.pseudoInverse() * DeltaS

Definition at line 124 of file vpMatrix_covariance.cpp.

References computeCovarianceMatrix(), and computeCovarianceMatrixVVS().

◆ computeHLM()

◆ cond()

double vpMatrix::cond ( double  svThreshold = 1e-6) const
Returns
The condition number, the ratio of the largest singular value of the matrix to the smallest.
Parameters
svThresholdThreshold used to test the singular values. If a singular value is lower than this threshold we consider that the matrix is not full rank.
Examples:
testMatrixConditionNumber.cpp.

Definition at line 5392 of file vpMatrix.cpp.

References vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), insert(), vpArray2D< Type >::resize(), vpColVector::resize(), and svd().

Referenced by vpTemplateTrackerMIForwardCompositional::trackNoPyr(), vpTemplateTrackerMIForwardAdditional::trackNoPyr(), vpTemplateTrackerMIESM::trackNoPyr(), and vpTemplateTrackerMIInverseCompositional::trackNoPyr().

◆ conv2() [1/2]

vpMatrix vpMatrix::conv2 ( const vpMatrix M,
const vpMatrix kernel,
const std::string &  mode = "full" 
)
static

Perform a 2D convolution similar to Matlab conv2 function: $ M \star kernel $.

Parameters
M: First matrix.
kernel: Second matrix.
mode: Convolution mode: "full" (default), "same", "valid".
vpMatrix-conv2-mode.jpg
Convolution mode: full, same, valid (image credit: Theano doc).
Note
This is a very basic implementation that does not use FFT.
Examples:
testMatrixConvolution.cpp.

Definition at line 5594 of file vpMatrix.cpp.

Referenced by vpImageFilter::getSobelKernelY().

◆ conv2() [2/2]

void vpMatrix::conv2 ( const vpMatrix M,
const vpMatrix kernel,
vpMatrix res,
const std::string &  mode = "full" 
)
static

Perform a 2D convolution similar to Matlab conv2 function: $ M \star kernel $.

Parameters
M: First matrix.
kernel: Second matrix.
res: Result.
mode: Convolution mode: "full" (default), "same", "valid".
vpMatrix-conv2-mode.jpg
Convolution mode: full, same, valid (image credit: Theano doc).
Note
This is a very basic implementation that does not use FFT.

Definition at line 5613 of file vpMatrix.cpp.

References vpArray2D< Type >::data, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), insert(), and vpArray2D< Type >::resize().

◆ cppPrint()

std::ostream & vpMatrix::cppPrint ( std::ostream &  os,
const std::string &  matrixName = "A",
bool  octet = false 
) const

Print to be used as part of a C++ code later.

Parameters
os: the stream to be printed in.
matrixName: name of the matrix, "A" by default.
octet: if false, print using double, if true, print byte per byte each bytes of the double array.

The following code shows how to use this function:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix M(2,3);
int cpt = 0;
for (unsigned int i=0; i<M.getRows(); i++)
for (unsigned int j=0; j<M.getCols(); j++)
M[i][j] = cpt++;
M.cppPrint(std::cout, "M");
}

It produces the following output that could be copy/paste in a C++ code:

vpMatrix M (2, 3);
M[0][0] = 0;
M[0][1] = 1;
M[0][2] = 2;
M[1][0] = 3;
M[1][1] = 4;
M[1][2] = 5;

Definition at line 4776 of file vpMatrix.cpp.

References vpArray2D< double >::getCols(), and vpArray2D< double >::getRows().

Referenced by vpColVector::clear().

◆ createDiagonalMatrix()

void vpMatrix::createDiagonalMatrix ( const vpColVector A,
vpMatrix DA 
)
static

Create a diagonal matrix with the element of a vector $ DA_{ii} = A_i $.

Parameters
A: Vector which element will be put in the diagonal.
DA: Diagonal matrix DA[i][i] = A[i]
See also
diag()

Definition at line 970 of file vpMatrix.cpp.

References vpArray2D< Type >::getRows(), and vpArray2D< Type >::resize().

◆ csvPrint()

std::ostream & vpMatrix::csvPrint ( std::ostream &  os) const

Print/save a matrix in csv format.

The following code

#include <visp3/core/vpMatrix.h>
int main()
{
std::ofstream ofs("log.csv", std::ofstream::out);
vpMatrix M(2,3);
int cpt = 0;
for (unsigned int i=0; i<M.getRows(); i++)
for (unsigned int j=0; j<M.getCols(); j++)
M[i][j] = cpt++;
M.csvPrint(ofs);
ofs.close();
}

produces log.csv file that contains:

0, 1, 2
3, 4, 5

Definition at line 4727 of file vpMatrix.cpp.

References vpArray2D< double >::getCols(), and vpArray2D< double >::getRows().

Referenced by vpColVector::clear().

◆ det()

double vpMatrix::det ( vpDetMethod  method = LU_DECOMPOSITION) const

Compute the determinant of a n-by-n matrix.

Parameters
method: Method used to compute the determinant. Default LU decomposition method is faster than the method based on Gaussian elimination.
Returns
Determinant of the matrix.
#include <iostream>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,3);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.;
A[1][0] = 1/3.; A[1][1] = 1/4.; A[1][2] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/7.; A[2][2] = 1/8.;
std::cout << "Initial matrix: \n" << A << std::endl;
// Compute the determinant
std:: cout << "Determinant by default method : " << A.det() << std::endl;
std:: cout << "Determinant by LU decomposition : " << A.detByLU() << std::endl;
std:: cout << "Determinant by LU decomposition (Lapack): " << A.detByLULapack() << std::endl;
std:: cout << "Determinant by LU decomposition (OpenCV): " << A.detByLUOpenCV() << std::endl;
std:: cout << "Determinant by LU decomposition (GSL) : " << A.detByLUGsl() << std::endl;
}
Examples:
testMatrixInverse.cpp.

Definition at line 5246 of file vpMatrix.cpp.

References detByLU(), and LU_DECOMPOSITION.

Referenced by vpTriangle::buildFrom(), vpHomography::computeDisplacement(), detByLUGsl(), detByLULapack(), detByLUOpenCV(), and vpTemplateTrackerTriangle::init().

◆ detByLU()

double vpMatrix::detByLU ( ) const

Compute the determinant of a square matrix using the LU decomposition.

This function calls the first following function that is available:

If none of these previous 3rd parties is installed, we use by default detByLULapack() with a Lapack built-in version.

Returns
The determinant of the matrix if the matrix is square.
#include <iostream>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,3);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.;
A[1][0] = 1/3.; A[1][1] = 1/4.; A[1][2] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/7.; A[2][2] = 1/8.;
std::cout << "Initial matrix: \n" << A << std::endl;
// Compute the determinant
std:: cout << "Determinant by default method : " << A.det() << std::endl;
std:: cout << "Determinant by LU decomposition : " << A.detByLU() << std::endl;
}
See also
detByLULapack(), detByLUEigen3(), detByLUOpenCV(), detByLUGsl()

Definition at line 184 of file vpMatrix_lu.cpp.

References vpArray2D< double >::colNum, detByLUEigen3(), detByLUGsl(), detByLULapack(), detByLUOpenCV(), vpException::fatalError, and vpArray2D< double >::rowNum.

Referenced by det().

◆ detByLUEigen3()

double vpMatrix::detByLUEigen3 ( ) const

Compute the determinant of a square matrix using the LU decomposition with Eigen3 3rd party.

Returns
The determinant of the matrix if the matrix is square.
#include <iostream>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,3);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.;
A[1][0] = 1/3.; A[1][1] = 1/4.; A[1][2] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/7.; A[2][2] = 1/8.;
std::cout << "Initial matrix: \n" << A << std::endl;
// Compute the determinant
std:: cout << "Determinant by LU decomposition (Eigen3): " << A.detByLUEigen3() << std::endl;
}
See also
detByLU(), detByLUOpenCV(), detByLULapack()

Definition at line 628 of file vpMatrix_lu.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::data, vpException::fatalError, vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), and vpArray2D< double >::rowNum.

Referenced by detByLU().

◆ detByLUGsl()

double vpMatrix::detByLUGsl ( ) const

Compute the determinant of a square matrix using the LU decomposition with GSL 3rd party.

Returns
The determinant of the matrix if the matrix is square.
#include <iostream>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,3);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.;
A[1][0] = 1/3.; A[1][1] = 1/4.; A[1][2] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/7.; A[2][2] = 1/8.;
std::cout << "Initial matrix: \n" << A << std::endl;
// Compute the determinant
std:: cout << "Determinant by LU decomposition (GSL): " << A.detByLUGsl() << std::endl;
}
See also
detByLU(), detByLUEigen3(), detByLUOpenCV(), detByLULapack()

Definition at line 305 of file vpMatrix_lu.cpp.

References vpArray2D< double >::colNum, det(), vpException::fatalError, and vpArray2D< double >::rowNum.

Referenced by detByLU().

◆ detByLULapack()

double vpMatrix::detByLULapack ( ) const

Compute the determinant of a square matrix using the LU decomposition with GSL 3rd party.

Returns
The determinant of the matrix if the matrix is square.
#include <iostream>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,3);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.;
A[1][0] = 1/3.; A[1][1] = 1/4.; A[1][2] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/7.; A[2][2] = 1/8.;
std::cout << "Initial matrix: \n" << A << std::endl;
// Compute the determinant
std:: cout << "Determinant by LU decomposition (Lapack): " << A.detByLULapack() << std::endl;
}
See also
detByLU(), detByLUEigen3(), detByLUGsl(), detByLUOpenCV()

Definition at line 425 of file vpMatrix_lu.cpp.

References vpArray2D< double >::colNum, vpArray2D< Type >::data, det(), vpException::fatalError, and vpArray2D< double >::rowNum.

Referenced by detByLU().

◆ detByLUOpenCV()

double vpMatrix::detByLUOpenCV ( ) const

Compute the determinant of a n-by-n matrix using the LU decomposition with OpenCV 3rd party.

Returns
Determinant of the matrix.
#include <iostream>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,3);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.;
A[1][0] = 1/3.; A[1][1] = 1/4.; A[1][2] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/7.; A[2][2] = 1/8.;
std::cout << "Initial matrix: \n" << A << std::endl;
// Compute the determinant
std:: cout << "Determinant by LU decomposition (OpenCV): " << A.detByLUOpenCV() << std::endl;
}
See also
detByLU(), detByLUEigen3(), detByLUGsl(), detByLULapack()

Definition at line 537 of file vpMatrix_lu.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::data, det(), vpException::fatalError, and vpArray2D< double >::rowNum.

Referenced by detByLU().

◆ diag() [1/2]

void vpMatrix::diag ( const double &  val = 1.0)

Set the matrix as a diagonal matrix where each element on the diagonal is set to val. Elements that are not on the diagonal are set to 0.

Parameters
val: Value to set.
See also
eye()
#include <iostream>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3, 4);
A.diag(2);
std::cout << "A:\n" << A << std::endl;
}

Matrix A is now equal to:

2 0 0 0
0 2 0 0
0 0 2 0
Examples:
testSvd.cpp.

Definition at line 951 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, and vpArray2D< double >::rowNum.

Referenced by vpMbTracker::computeCovarianceMatrixVVS(), vpQuadProg::fromCanonicalCost(), and getDiag().

◆ diag() [2/2]

void vpMatrix::diag ( const vpColVector A)

Create a diagonal matrix with the element of a vector.

Parameters
A: Vector which element will be put in the diagonal.
See also
createDiagonalMatrix()
#include <iostream>
#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
v[0] = 1;
v[1] = 2;
v[2] = 3;
A.diag(v);
std::cout << "A:\n" << A << std::endl;
}

Matrix A is now equal to:

1 0 0
0 2 0
0 0 3

Definition at line 911 of file vpMatrix.cpp.

References vpArray2D< Type >::getRows(), and vpArray2D< double >::resize().

◆ eigenValues() [1/2]

vpColVector vpMatrix::eigenValues ( ) const

Compute the eigenvalues of a n-by-n real symmetric matrix.

Returns
The eigenvalues of a n-by-n real symmetric matrix.
Warning
This method is only available if the Gnu Scientific Library (GSL) is detected as a third party library.
Exceptions
vpException::dimensionErrorIf the matrix is not square.
vpException::fatalErrorIf the matrix is not symmetric.
vpException::functionNotImplementedErrorIf the GSL library is not detected.

Here an example:

#include <iostream>
#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,3); // A is a symmetric matrix
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.;
A[1][0] = 1/2.; A[1][1] = 1/3.; A[1][2] = 1/4.;
A[2][0] = 1/3.; A[2][1] = 1/4.; A[2][2] = 1/5.;
std::cout << "Initial symmetric matrix: \n" << A << std::endl;
// Compute the eigen values
vpColVector evalue; // Eigenvalues
evalue = A.eigenValues();
std::cout << "Eigen values: \n" << evalue << std::endl;
}
See also
eigenValues(vpColVector &, vpMatrix &)

Definition at line 4963 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpException::dimensionError, vpException::fatalError, vpException::functionNotImplementedError, vpArray2D< double >::rowNum, and t().

Referenced by vpQuadProg::fromCanonicalCost().

◆ eigenValues() [2/2]

void vpMatrix::eigenValues ( vpColVector evalue,
vpMatrix evector 
) const

Compute the eigenvalues of a n-by-n real symmetric matrix.

Returns
The eigenvalues of a n-by-n real symmetric matrix.
Warning
This method is only available if the Gnu Scientific Library (GSL) is detected as a third party library.
Parameters
evalue: Eigenvalues of the matrix.
evector: Eigenvector of the matrix.
Exceptions
vpException::dimensionErrorIf the matrix is not square.
vpException::fatalErrorIf the matrix is not symmetric.
vpException::functionNotImplementedErrorIf the GSL library is not detected.

Here an example:

#include <iostream>
#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(4,4); // A is a symmetric matrix
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.; A[0][3] = 1/4.;
A[1][0] = 1/2.; A[1][1] = 1/3.; A[1][2] = 1/4.; A[1][3] = 1/5.;
A[2][0] = 1/3.; A[2][1] = 1/4.; A[2][2] = 1/5.; A[2][3] = 1/6.;
A[3][0] = 1/4.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
std::cout << "Initial symmetric matrix: \n" << A << std::endl;
vpColVector d; // Eigenvalues
vpMatrix V; // Eigenvectors
// Compute the eigenvalues and eigenvectors
A.eigenValues(d, V);
std::cout << "Eigen values: \n" << d << std::endl;
std::cout << "Eigen vectors: \n" << V << std::endl;
D.diag(d); // Eigenvalues are on the diagonal
std::cout << "D: " << D << std::endl;
// Verification: A * V = V * D
std::cout << "AV-VD = 0 ? \n" << (A*V) - (V*D) << std::endl;
}
See also
eigenValues()

Definition at line 5074 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpException::dimensionError, vpException::fatalError, vpException::functionNotImplementedError, vpArray2D< Type >::resize(), vpArray2D< double >::rowNum, and t().

◆ euclideanNorm()

vp_deprecated double vpMatrix::euclideanNorm ( ) const
Deprecated:
This function is deprecated. You should rather use frobeniusNorm().

Compute and return the Euclidean norm (also called Frobenius norm) $||A|| = \sqrt{ \sum{A_{ij}^2}}$.

Returns
The Euclidean norm (also called Frobenius norm) if the matrix is initialized, 0 otherwise.
See also
frobeniusNorm(), infinityNorm(), inducedL2Norm()

Definition at line 5475 of file vpMatrix.cpp.

References frobeniusNorm().

Referenced by vpColVector::deg2rad().

◆ expm()

◆ extract()

vpMatrix vpMatrix::extract ( unsigned int  r,
unsigned int  c,
unsigned int  nrows,
unsigned int  ncols 
) const

Extract a sub matrix from a matrix M.

Parameters
r: row index in matrix M.
c: column index in matrix M.
nrows: Number of rows of the matrix that should be extracted.
ncols: Number of columns of the matrix that should be extracted.

The following code shows how to use this function:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix M(4,5);
int val = 0;
for(size_t i=0; i<M.getRows(); i++) {
for(size_t j=0; j<M.getCols(); j++) {
M[i][j] = val++;
}
}
M.print (std::cout, 4, "M ");
vpMatrix N = M.extract(0, 1, 2, 3);
N.print (std::cout, 4, "N ");
}

It produces the following output:

M [4,5]=
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
N [2,3]=
1 2 3
6 7 8
See also
init(const vpMatrix &, unsigned int, unsigned int, unsigned int, unsigned int)

Definition at line 450 of file vpMatrix.cpp.

References vpException::dimensionError, vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), and vpArray2D< Type >::resize().

Referenced by vpLinProg::colReduction(), vpLinProg::rowReduction(), solveByQR(), and vpVelocityTwistMatrix::~vpVelocityTwistMatrix().

◆ eye() [1/3]

◆ eye() [2/3]

void vpMatrix::eye ( unsigned int  n)

Set an n-by-n matrix to identity with ones on the diagonal and zeros else where.

Definition at line 475 of file vpMatrix.cpp.

References eye().

◆ eye() [3/3]

void vpMatrix::eye ( unsigned int  m,
unsigned int  n 
)

Set an m-by-n matrix to identity with ones on the diagonal and zeros else where.

Definition at line 481 of file vpMatrix.cpp.

References eye(), and vpArray2D< double >::resize().

◆ frobeniusNorm()

double vpMatrix::frobeniusNorm ( ) const

Compute and return the Frobenius norm (also called Euclidean norm) $||A|| = \sqrt{ \sum{A_{ij}^2}}$.

Returns
The Frobenius norm (also called Euclidean norm) if the matrix is initialized, 0 otherwise.
See also
infinityNorm(), inducedL2Norm()
Examples:
testMatrixInverse.cpp, testMatrixPseudoInverse.cpp, and testSvd.cpp.

Definition at line 5487 of file vpMatrix.cpp.

References vpArray2D< double >::data, and vpArray2D< double >::dsize.

Referenced by euclideanNorm(), and vpColVector::extract().

◆ getCol() [1/2]

vpColVector vpMatrix::getCol ( unsigned int  j) const

Extract a column vector from a matrix.

Warning
All the indexes start from 0 in this function.
Parameters
j: Index of the column to extract. If j=0, the first column is extracted.
Returns
The extracted column vector.

The following example shows how to use this function:

#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(4,4);
for(unsigned int i=0; i < A.getRows(); i++)
for(unsigned int j=0; j < A.getCols(); j++)
A[i][j] = i*A.getCols()+j;
A.print(std::cout, 4);
vpColVector cv = A.getCol(1);
std::cout << "Column vector: \n" << cv << std::endl;
}

It produces the following output:

[4,4]=
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
column vector:
1
5
9
13
Examples:
testMatrix.cpp.

Definition at line 4096 of file vpMatrix.cpp.

References vpArray2D< double >::rowNum.

Referenced by vpLinProg::colReduction(), vpHomography::DLT(), vpMbtFaceDepthNormal::estimatePlaneEquationSVD(), kernel(), vpPose::poseFromRectangle(), vpServo::secondaryTaskJointLimitAvoidance(), and vpLinProg::simplex().

◆ getCol() [2/2]

vpColVector vpMatrix::getCol ( unsigned int  j,
unsigned int  i_begin,
unsigned int  column_size 
) const

Extract a column vector from a matrix.

Warning
All the indexes start from 0 in this function.
Parameters
j: Index of the column to extract. If col=0, the first column is extracted.
i_begin: Index of the row that gives the location of the first element of the column vector to extract.
column_size: Size of the column vector to extract.
Returns
The extracted column vector.

The following example shows how to use this function:

#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(4,4);
for(unsigned int i=0; i < A.getRows(); i++)
for(unsigned int j=0; j < A.getCols(); j++)
A[i][j] = i*A.getCols()+j;
A.print(std::cout, 4);
vpColVector cv = A.getCol(1, 1, 3);
std::cout << "Column vector: \n" << cv << std::endl;
}

It produces the following output:

[4,4]=
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
column vector:
5
9
13

Definition at line 4047 of file vpMatrix.cpp.

References vpException::dimensionError, vpArray2D< double >::getCols(), and vpArray2D< double >::getRows().

◆ getCols()

◆ getDiag()

vpColVector vpMatrix::getDiag ( ) const

Extract a diagonal vector from a matrix.

Returns
The diagonal of the matrix.
Warning
An empty vector is returned if the matrix is empty.

The following example shows how to use this function:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,4);
for(unsigned int i=0; i < A.getRows(); i++)
for(unsigned int j=0; j < A.getCols(); j++)
A[i][j] = i*A.getCols()+j;
A.print(std::cout, 4);
std::cout << "Diag vector: \n" << diag.t() << std::endl;
}

It produces the following output:

[3,4]=
0 1 2 3
4 5 6 7
8 9 10 11
Diag vector:
0 5 10
Examples:
testMatrix.cpp.

Definition at line 4228 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, diag(), vpColVector::resize(), and vpArray2D< double >::rowNum.

◆ getMaxValue()

double vpArray2D< double >::getMaxValue ( ) const
inherited

Return the array max value.

Examples:
servoMomentImage.cpp, and testArray2D.cpp.

Definition at line 913 of file vpArray2D.h.

References vpArray2D< Type >::data.

◆ getMinValue()

double vpArray2D< double >::getMinValue ( ) const
inherited

Return the array min value.

Examples:
servoMomentImage.cpp, and testArray2D.cpp.

Definition at line 896 of file vpArray2D.h.

References vpArray2D< Type >::data.

◆ getRow() [1/2]

vpRowVector vpMatrix::getRow ( unsigned int  i) const

Extract a row vector from a matrix.

Warning
All the indexes start from 0 in this function.
Parameters
i: Index of the row to extract. If i=0, the first row is extracted.
Returns
The extracted row vector.

The following example shows how to use this function:

#include <visp3/core/vpMatrix.h>
#include <visp3/core/vpRowVector.h>
int main()
{
vpMatrix A(4,4);
for(unsigned int i=0; i < A.getRows(); i++)
for(unsigned int j=0; j < A.getCols(); j++)
A[i][j] = i*A.getCols()+j;
A.print(std::cout, 4);
vpRowVector rv = A.getRow(1);
std::cout << "Row vector: \n" << rv << std::endl;
}

It produces the following output:

[4,4]=
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Row vector:
4 5 6 7
Examples:
testMatrix.cpp.

Definition at line 4136 of file vpMatrix.cpp.

References vpArray2D< double >::colNum.

Referenced by vpLinProg::allClose(), vpLinProg::allLesser(), vpLinProg::solveLP(), and vpQuadProg::solveQPi().

◆ getRow() [2/2]

vpRowVector vpMatrix::getRow ( unsigned int  i,
unsigned int  j_begin,
unsigned int  row_size 
) const

Extract a row vector from a matrix.

Warning
All the indexes start from 0 in this function.
Parameters
i: Index of the row to extract. If i=0, the first row is extracted.
j_begin: Index of the column that gives the location of the first element of the row vector to extract.
row_size: Size of the row vector to extract.
Returns
The extracted row vector.

The following example shows how to use this function:

#include <visp3/core/vpMatrix.h>
#include <visp3/core/vpRowVector.h>
int main()
{
vpMatrix A(4,4);
for(unsigned int i=0; i < A.getRows(); i++)
for(unsigned int j=0; j < A.getCols(); j++)
A[i][j] = i*A.getCols()+j;
A.print(std::cout, 4);
vpRowVector rv = A.getRow(1, 1, 3);
std::cout << "Row vector: \n" << rv << std::endl;
}

It produces the following output:

[4,4]=
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Row vector:
5 6 7

Definition at line 4180 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::data, vpArray2D< Type >::data, vpException::dimensionError, and vpArray2D< double >::rowNum.

◆ getRows()

unsigned int vpArray2D< double >::getRows ( ) const
inlineinherited

◆ hadamard() [1/2]

vpMatrix vpMatrix::hadamard ( const vpMatrix m) const

Compute the Hadamard product (element wise matrix multiplication).

Parameters
m: Second matrix;
Returns
m1.hadamard(m2) The Hadamard product : $ m1 \circ m2 = (m1 \circ m2)_{i,j} = (m1)_{i,j} (m2)_{i,j} $
Examples:
testMatrix.cpp.

Definition at line 1789 of file vpMatrix.cpp.

References vpCPUFeatures::checkSSE2(), vpArray2D< double >::colNum, vpArray2D< double >::data, vpArray2D< Type >::data, vpException::dimensionError, vpArray2D< double >::dsize, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< Type >::resize(), and vpArray2D< double >::rowNum.

◆ hadamard() [2/2]

vpArray2D< double > vpArray2D< double >::hadamard ( const vpArray2D< double > &  m) const
inherited

Compute the Hadamard product (element wise matrix multiplication).

Parameters
m: Second matrix;
Returns
m1.hadamard(m2) The Hadamard product : $ m1 \circ m2 = (m1 \circ m2)_{i,j} = (m1)_{i,j} (m2)_{i,j} $
Examples:
testArray2D.cpp.

Definition at line 933 of file vpArray2D.h.

References vpArray2D< Type >::colNum, vpArray2D< Type >::data, vpException::dimensionError, vpArray2D< Type >::dsize, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), and vpArray2D< Type >::resize().

◆ inducedL2Norm()

double vpMatrix::inducedL2Norm ( ) const

Compute and return the induced L2 norm $||A|| = \Sigma_{max}(A)$ which is equal to the maximum singular value of the matrix.

Returns
The induced L2 norm if the matrix is initialized, 0 otherwise.
See also
infinityNorm(), frobeniusNorm()
Examples:
testMatrixConditionNumber.cpp.

Definition at line 5506 of file vpMatrix.cpp.

References vpArray2D< double >::dsize, vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), vpArray2D< Type >::size(), and svd().

◆ infinityNorm()

double vpMatrix::infinityNorm ( ) const

Compute and return the infinity norm $ {||A||}_{\infty} = max\left(\sum_{j=0}^{n}{\mid A_{ij} \mid}\right) $ with $i \in \{0, ..., m\}$ where $(m,n)$ is the matrix size.

Returns
The infinity norm if the matrix is initialized, 0 otherwise.
See also
frobeniusNorm(), inducedL2Norm()

Definition at line 5547 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

Referenced by vpLinProg::colReduction(), vpColVector::extract(), and vpLinProg::rowReduction().

◆ init() [1/2]

void vpMatrix::init ( const vpMatrix M,
unsigned int  r,
unsigned int  c,
unsigned int  nrows,
unsigned int  ncols 
)

Initialize the matrix from a part of an input matrix M.

Parameters
M: Input matrix used for initialization.
r: row index in matrix M.
c: column index in matrix M.
nrows: Number of rows of the matrix that should be initialized.
ncols: Number of columns of the matrix that should be initialized.

The sub-matrix starting from M[r][c] element and ending on M[r+nrows-1][c+ncols-1] element is used to initialize the matrix.

The following code shows how to use this function:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix M(4,5);
int val = 0;
for(size_t i=0; i<M.getRows(); i++) {
for(size_t j=0; j<M.getCols(); j++) {
M[i][j] = val++;
}
}
M.print (std::cout, 4, "M ");
N.init(M, 0, 1, 2, 3);
N.print (std::cout, 4, "N ");
}

It produces the following output:

M [4,5]=
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
N [2,3]=
1 2 3
6 7 8
See also
extract()
Examples:
testMatrix.cpp.

Definition at line 389 of file vpMatrix.cpp.

References vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< double >::resize(), and vpArray2D< double >::rowPtrs.

◆ init() [2/2]

vp_deprecated void vpMatrix::init ( )
inline
Deprecated:
Only provided for compatibilty with ViSP previous releases. This function does nothing.

Definition at line 760 of file vpMatrix.h.

Referenced by vpColVector::extract(), vpMatrix(), and vpSubMatrix::vpSubMatrix().

◆ insert() [1/3]

◆ insert() [2/3]

vpMatrix vpMatrix::insert ( const vpMatrix A,
const vpMatrix B,
unsigned int  r,
unsigned int  c 
)
static

Insert matrix B in matrix A at the given position.

Parameters
A: Main matrix.
B: Matrix to insert.
r: Index of the row where to add the matrix.
c: Index of the column where to add the matrix.
Returns
Matrix with B insert in A.
Warning
Throw exception if the sizes of the matrices do not allow the insertion.

Definition at line 4399 of file vpMatrix.cpp.

References insert().

◆ insert() [3/3]

void insert ( const vpMatrix A,
const vpMatrix B,
vpMatrix C,
unsigned int  r,
unsigned int  c 
)
static

Insert matrix B in matrix A at the given position.

Parameters
A: Main matrix.
B: Matrix to insert.
C: Result matrix.
r: Index of the row where to insert matrix B.
c: Index of the column where to insert matrix B.
Warning
Throw exception if the sizes of the matrices do not allow the insertion.

Definition at line 4421 of file vpMatrix.cpp.

References vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), and vpArray2D< Type >::resize().

◆ inverseByCholesky()

vpMatrix vpMatrix::inverseByCholesky ( ) const

Compute the inverse of a n-by-n matrix using the Cholesky decomposition. The matrix must be real symmetric positive defined.

This function calls the first following function that is available:

If none of these 3rd parties is installed we use a Lapack built-in version.

Returns
The inverse matrix.

Here an example:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(4,4);
// Symmetric matrix
A[0][0] = 1/1.; A[0][1] = 1/5.; A[0][2] = 1/6.; A[0][3] = 1/7.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.; A[1][3] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/3.; A[2][2] = 1/2.; A[2][3] = 1/6.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
// Compute the inverse
vpMatrix A_1; // A^-1
A_1 = A.inverseByCholesky();
std::cout << "Inverse by Cholesky: \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
pseudoInverse()

Definition at line 109 of file vpMatrix_cholesky.cpp.

References vpException::fatalError, inverseByCholeskyLapack(), and inverseByCholeskyOpenCV().

◆ inverseByCholeskyLapack()

vpMatrix vpMatrix::inverseByCholeskyLapack ( ) const

Compute the inverse of a n-by-n matrix using the Cholesky decomposition with Lapack 3rd party. The matrix must be real symmetric positive defined.

Returns
The inverse matrix.

Here an example:

#include <visp3/core/vpMatrix.h>
int main()
{
unsigned int n = 4;
vpMatrix A(n, n);
I.eye(4);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.; A[0][3] = 1/4.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.; A[1][3] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/2.; A[2][3] = 1/6.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
// Make matrix symmetric positive
A = 0.5*(A+A.t());
A = A + n*I;
// Compute the inverse
std::cout << "Inverse by Cholesky (Lapack): \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
inverseByCholesky(), inverseByCholeskyOpenCV()

Definition at line 159 of file vpMatrix_cholesky.cpp.

References vpException::badValue, vpArray2D< double >::colNum, vpArray2D< Type >::data, vpException::fatalError, vpArray2D< Type >::getCols(), vpArray2D< double >::getRows(), vpArray2D< Type >::getRows(), vpMatrixException::matrixError, and vpArray2D< double >::rowNum.

Referenced by inverseByCholesky().

◆ inverseByCholeskyOpenCV()

vpMatrix vpMatrix::inverseByCholeskyOpenCV ( ) const

Compute the inverse of a n-by-n matrix using the Cholesky decomposition with OpenCV 3rd party. The matrix must be real symmetric positive defined.

Returns
The inverse matrix.

Here an example:

#include <visp3/core/vpMatrix.h>
int main()
{
unsigned int n = 4;
vpMatrix A(n, n);
I.eye(4);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.; A[0][3] = 1/4.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.; A[1][3] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/2.; A[2][3] = 1/6.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
// Make matrix symmetric positive
A = 0.5*(A+A.t());
A = A + n*I;
// Compute the inverse
std::cout << "Inverse by Cholesky (OpenCV): \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
inverseByCholesky(), inverseByCholeskyLapack()

Definition at line 228 of file vpMatrix_cholesky.cpp.

References vpArray2D< double >::colNum, vpArray2D< Type >::data, vpArray2D< double >::data, vpException::fatalError, and vpArray2D< double >::rowNum.

Referenced by inverseByCholesky().

◆ inverseByLU()

vpMatrix vpMatrix::inverseByLU ( ) const

Compute the inverse of a n-by-n matrix using the LU decomposition.

This function calls the first following function that is available:

If none of these previous 3rd parties is installed, we use by default inverseByLULapack() with a Lapack built-in version.

Returns
The inverse matrix.

Here an example:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(4,4);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.; A[0][3] = 1/4.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.; A[1][3] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/2.; A[2][3] = 1/6.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
// Compute the inverse
vpMatrix A_1 = A.inverseByLU();
std::cout << "Inverse by LU ";
#if defined(VISP_HAVE_LAPACK)
std::cout << "(using Lapack)";
#elif defined(VISP_HAVE_EIGEN3)
std::cout << "(using Eigen3)";
#elif (VISP_HAVE_OPENCV_VERSION >= 0x020101)
std::cout << "(using OpenCV)";
#elif defined (VISP_HAVE_GSL)
std::cout << "(using GSL)";
#endif
std::cout << ": \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
inverseByLULapack(), inverseByLUEigen3(), inverseByLUOpenCV(), inverseByLUGsl(), pseudoInverse()
Examples:
photometricVisualServoing.cpp, and testMatrixConditionNumber.cpp.

Definition at line 134 of file vpMatrix_lu.cpp.

References vpException::fatalError, inverseByLUEigen3(), inverseByLUGsl(), inverseByLULapack(), and inverseByLUOpenCV().

Referenced by vpTriangle::buildFrom(), expm(), vpKalmanFilter::filtering(), vpTemplateTrackerWarpHomographySL3::findWarp(), vpTemplateTrackerWarpAffine::getParamInverse(), vpTemplateTrackerTriangle::init(), vpTemplateTrackerSSDInverseCompositional::initCompInverse(), vpTemplateTrackerZNCCForwardAdditional::initHessienDesired(), vpTemplateTrackerMIForwardCompositional::initHessienDesired(), vpTemplateTrackerZNCCInverseCompositional::initHessienDesired(), vpTemplateTrackerMIForwardAdditional::initHessienDesired(), vpTemplateTrackerMIESM::initHessienDesired(), vpTemplateTrackerMIInverseCompositional::initHessienDesired(), vpTemplateTracker::setHDes(), vpTemplateTrackerSSDForwardCompositional::trackNoPyr(), vpTemplateTrackerMIForwardCompositional::trackNoPyr(), vpTemplateTrackerSSDForwardAdditional::trackNoPyr(), vpTemplateTrackerMIForwardAdditional::trackNoPyr(), vpTemplateTrackerMIESM::trackNoPyr(), vpTemplateTrackerMIInverseCompositional::trackNoPyr(), vpTemplateTrackerWarp::warp(), and vpImageTools::warpImage().

◆ inverseByLUEigen3()

vpMatrix vpMatrix::inverseByLUEigen3 ( ) const

Compute the inverse of a n-by-n matrix using the LU decomposition with Eigen3 3rd party.

Returns
The inverse matrix.

Here an example:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(4,4);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.; A[0][3] = 1/4.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.; A[1][3] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/2.; A[2][3] = 1/6.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
// Compute the inverse
vpMatrix A_1; // A^-1
A_1 = A.inverseByLUEigen3();
std::cout << "Inverse by LU (Eigen3): \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
inverseByLU(), inverseByLULapack(), inverseByLUOpenCV(), inverseByLUGsl()

Definition at line 586 of file vpMatrix_lu.cpp.

References vpArray2D< double >::colNum, vpArray2D< Type >::data, vpArray2D< double >::data, vpException::fatalError, vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), and vpArray2D< double >::rowNum.

Referenced by inverseByLU().

◆ inverseByLUGsl()

vpMatrix vpMatrix::inverseByLUGsl ( ) const

Compute the inverse of a n-by-n matrix using the LU decomposition with GSL 3rd party.

Returns
The inverse matrix.

Here an example:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(4,4);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.; A[0][3] = 1/4.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.; A[1][3] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/2.; A[2][3] = 1/6.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
// Compute the inverse
vpMatrix A_1; // A^-1
A_1 = A.inverseByLUGsl();
std::cout << "Inverse by LU (GSL): \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
inverseByLU(), inverseByLUEigen3(), inverseByLULapack(), inverseByLUOpenCV()

Definition at line 241 of file vpMatrix_lu.cpp.

References vpArray2D< double >::colNum, vpArray2D< Type >::data, vpException::fatalError, and vpArray2D< double >::rowNum.

Referenced by inverseByLU().

◆ inverseByLULapack()

vpMatrix vpMatrix::inverseByLULapack ( ) const

Compute the inverse of a n-by-n matrix using the LU decomposition with Lapack 3rd party.

Returns
The inverse matrix.

Here an example:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(4,4);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.; A[0][3] = 1/4.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.; A[1][3] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/2.; A[2][3] = 1/6.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
// Compute the inverse
vpMatrix A_1; // A^-1
A_1 = A.inverseByLULapack();
std::cout << "Inverse by LU (Lapack): \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
inverseByLU(), inverseByLUEigen3(), inverseByLUGsl(), inverseByLUOpenCV()

Definition at line 370 of file vpMatrix_lu.cpp.

References vpArray2D< double >::colNum, vpArray2D< Type >::data, vpException::fatalError, and vpArray2D< double >::rowNum.

Referenced by inverseByLU().

◆ inverseByLUOpenCV()

vpMatrix vpMatrix::inverseByLUOpenCV ( ) const

Compute the inverse of a n-by-n matrix using the LU decomposition with OpenCV 3rd party.

Returns
The inverse matrix.

Here an example:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(4,4);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.; A[0][3] = 1/4.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.; A[1][3] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/2.; A[2][3] = 1/6.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
// Compute the inverse
vpMatrix A_1; // A^-1
A_1 = A.inverseByLUOpenCV();
std::cout << "Inverse by LU (OpenCV): \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
inverseByLU(), inverseByLUEigen3(), inverseByLUGsl(), inverseByLULapack()

Definition at line 496 of file vpMatrix_lu.cpp.

References vpArray2D< double >::colNum, vpArray2D< Type >::data, vpArray2D< double >::data, vpException::fatalError, and vpArray2D< double >::rowNum.

Referenced by inverseByLU().

◆ inverseByQR()

vpMatrix vpMatrix::inverseByQR ( ) const

Compute the inverse of a n-by-n matrix using the QR decomposition. Only available if Lapack 3rd party is installed. If Lapack is not installed we use a Lapack built-in version.

Returns
The inverse matrix.

Here an example:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(4,4);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.; A[0][3] = 1/4.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.; A[1][3] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/2.; A[2][3] = 1/6.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
// Compute the inverse
vpMatrix A_1 = A.inverseByQR();
std::cout << "Inverse by QR: \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
inverseByLU(), inverseByCholesky()

Definition at line 285 of file vpMatrix_qr.cpp.

References vpException::fatalError, and inverseByQRLapack().

Referenced by vpLinProg::simplex().

◆ inverseByQRLapack()

vpMatrix vpMatrix::inverseByQRLapack ( ) const

Compute the inverse of a n-by-n matrix using the QR decomposition with Lapack 3rd party.

Returns
The inverse matrix.

Here an example:

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(4,4);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.; A[0][3] = 1/4.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.; A[1][3] = 1/5.;
A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/2.; A[2][3] = 1/6.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.; A[3][3] = 1/7.;
// Compute the inverse
std::cout << "Inverse by QR: \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
inverseByQR()

Definition at line 124 of file vpMatrix_qr.cpp.

References vpException::badValue, vpArray2D< double >::colNum, vpArray2D< Type >::data, vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), vpArray2D< Type >::getRows(), vpMatrixException::matrixError, and vpArray2D< double >::rowNum.

Referenced by inverseByQR().

◆ inverseTriangular()

vpMatrix vpMatrix::inverseTriangular ( bool  upper = true) const

Compute the inverse of a full-rank n-by-n triangular matrix. Only available if Lapack 3rd party is installed. If Lapack is not installed we use a Lapack built-in version.

Parameters
upper: if it is an upper triangular matrix

The function does not check if the matrix is actually upper or lower triangular.

Returns
The inverse matrix

Definition at line 725 of file vpMatrix_qr.cpp.

References vpException::badValue, vpArray2D< double >::colNum, vpArray2D< Type >::data, vpException::dimensionError, vpException::fatalError, vpMatrixException::rankDeficient, and vpArray2D< double >::rowNum.

Referenced by vpLinProg::colReduction(), vpLinProg::rowReduction(), and solveByQR().

◆ juxtaposeMatrices() [1/2]

vpMatrix vpMatrix::juxtaposeMatrices ( const vpMatrix A,
const vpMatrix B 
)
static

Juxtapose to matrices C = [ A B ].

$ C = \left( \begin{array}{cc} A & B \end{array}\right) $

Parameters
A: Left matrix.
B: Right matrix.
Returns
Juxtaposed matrix C = [ A B ]
Warning
A and B must have the same number of rows.
Examples:
testMatrix.cpp.

Definition at line 4452 of file vpMatrix.cpp.

Referenced by vpLinProg::colReduction().

◆ juxtaposeMatrices() [2/2]

void juxtaposeMatrices ( const vpMatrix A,
const vpMatrix B,
vpMatrix C 
)
static

Juxtapose to matrices C = [ A B ].

$ C = \left( \begin{array}{cc} A & B \end{array}\right) $

Parameters
A: Left matrix.
B: Right matrix.
C: Juxtaposed matrix C = [ A B ]
Warning
A and B must have the same number of rows.

Definition at line 4473 of file vpMatrix.cpp.

References vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), insert(), and vpArray2D< Type >::resize().

◆ kernel()

unsigned int vpMatrix::kernel ( vpMatrix kerAt,
double  svThreshold = 1e-6 
) const

Function to compute the null space (the kernel) of a m-by-n matrix $\bf A$.

The null space of a matrix $\bf A$ is defined as $\mbox{Ker}({\bf A}) = { {\bf X} : {\bf A}*{\bf X} = {\bf 0}}$.

Parameters
kerAtThe matrix that contains the null space (kernel) of $\bf A$ defined by the matrix ${\bf X}^T$. If matrix $\bf A$ is full rank, the dimension of kerAt is (0, n), otherwise the dimension is (n-r, n). This matrix is thus the transpose of $\mbox{Ker}({\bf A})$.
svThresholdThreshold used to test the singular values. If a singular value is lower than this threshold we consider that the matrix is not full rank.
Returns
The rank r of the matrix.
Examples:
servoViper850Point2DArtVelocity-jointAvoidance-basic.cpp, and testMatrixConditionNumber.cpp.

Definition at line 5160 of file vpMatrix.cpp.

References getCol(), vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), vpArray2D< Type >::getRows(), insert(), vpArray2D< Type >::resize(), vpColVector::resize(), vpColVector::sumSquare(), and svd().

◆ kron() [1/4]

void vpMatrix::kron ( const vpMatrix m,
vpMatrix out 
) const

Compute Kronecker product matrix.

Parameters
m: vpMatrix.
out: If m1.kron(m2) out contains the kronecker product's result : $ m1 \otimes m2 $.

Definition at line 1852 of file vpMatrix.cpp.

Referenced by kron().

◆ kron() [2/4]

vpMatrix vpMatrix::kron ( const vpMatrix m) const

Compute Kronecker product matrix.

Parameters
m: vpMatrix;
Returns
m1.kron(m2) The kronecker product : $ m1 \otimes m2 $

Definition at line 1891 of file vpMatrix.cpp.

References kron().

◆ kron() [3/4]

void vpMatrix::kron ( const vpMatrix m1,
const vpMatrix m2,
vpMatrix out 
)
static

Compute Kronecker product matrix.

Parameters
m1: vpMatrix;
m2: vpMatrix;
out: The kronecker product : $ m1 \otimes m2 $

Definition at line 1822 of file vpMatrix.cpp.

References vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), and vpArray2D< Type >::resize().

◆ kron() [4/4]

vpMatrix vpMatrix::kron ( const vpMatrix m1,
const vpMatrix m2 
)
static

Compute Kronecker product matrix.

Parameters
m1: vpMatrix;
m2: vpMatrix;
Returns
The kronecker product : $ m1 \otimes m2 $

Definition at line 1860 of file vpMatrix.cpp.

References vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), and vpArray2D< Type >::resize().

◆ load()

static bool vpArray2D< double >::load ( const std::string &  filename,
vpArray2D< double > &  A,
bool  binary = false,
char *  header = NULL 
)
inlinestaticinherited

Load a matrix from a file.

Parameters
filename: Absolute file name.
A: Array to be loaded
binary: If true the matrix is loaded from a binary file, else from a text file.
header: Header of the file is loaded in this parameter.
Returns
Returns true if success.
See also
save()

Definition at line 541 of file vpArray2D.h.

References vpException::badValue, and vpArray2D< Type >::resize().

◆ loadMatrix()

static bool vpMatrix::loadMatrix ( const std::string &  filename,
vpArray2D< double > &  M,
bool  binary = false,
char *  header = NULL 
)
inlinestatic

Load a matrix from a file. This function overloads vpArray2D::load().

Parameters
filename: absolute file name.
M: matrix to be loaded.
binary:If true the matrix is loaded from a binary file, else from a text file.
header: Header of the file is loaded in this parameter
Returns
Returns true if no problem appends.
Examples:
testMatrix.cpp.

Definition at line 692 of file vpMatrix.h.

References vpArray2D< Type >::load().

Referenced by vpDot2::defineDots().

◆ loadMatrixYAML()

static bool vpMatrix::loadMatrixYAML ( const std::string &  filename,
vpArray2D< double > &  M,
char *  header = NULL 
)
inlinestatic

Load a matrix from a YAML-formatted file. This function overloads vpArray2D::loadYAML().

Parameters
filename: absolute file name.
M: matrix to be loaded from the file.
header: Header of the file is loaded in this parameter.
Returns
Returns true if no problem appends.
Examples:
testMatrix.cpp.

Definition at line 708 of file vpMatrix.h.

References vpArray2D< Type >::loadYAML().

◆ loadYAML()

static bool vpArray2D< double >::loadYAML ( const std::string &  filename,
vpArray2D< double > &  A,
char *  header = NULL 
)
inlinestaticinherited

Load an array from a YAML-formatted file.

Parameters
filename: absolute file name.
A: array to be loaded from the file.
header: header of the file is loaded in this parameter.
Returns
Returns true on success.
See also
saveYAML()
Examples:
servoFlirPtuIBVS.cpp, servoFrankaIBVS.cpp, servoFrankaPBVS.cpp, tutorial-flir-ptu-ibvs.cpp, and tutorial-hand-eye-calibration.cpp.

Definition at line 653 of file vpArray2D.h.

References vpArray2D< Type >::resize().

◆ maplePrint()

std::ostream & vpMatrix::maplePrint ( std::ostream &  os) const

Print using Maple syntax, to copy/paste in Maple later.

The following code

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix M(2,3);
int cpt = 0;
for (unsigned int i=0; i<M.getRows(); i++)
for (unsigned int j=0; j<M.getCols(); j++)
M[i][j] = cpt++;
std::cout << "M = "; M.maplePrint(std::cout);
}

produces this output:

M = ([
[0, 1, 2, ],
[3, 4, 5, ],
])

that could be copy/paste in Maple.

Definition at line 4686 of file vpMatrix.cpp.

References vpArray2D< double >::getCols(), and vpArray2D< double >::getRows().

Referenced by vpColVector::extract().

◆ matlabPrint()

std::ostream & vpMatrix::matlabPrint ( std::ostream &  os) const

Print using Matlab syntax, to copy/paste in Matlab later.

The following code

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix M(2,3);
int cpt = 0;
for (unsigned int i=0; i<M.getRows(); i++)
for (unsigned int j=0; j<M.getCols(); j++)
M[i][j] = cpt++;
std::cout << "M = "; M.matlabPrint(std::cout);
}

produces this output:

M = [ 0, 1, 2, ;
3, 4, 5, ]

that could be copy/paste in Matlab:

>> M = [ 0, 1, 2, ;
3, 4, 5, ]
M =
0 1 2
3 4 5
>>

Definition at line 4642 of file vpMatrix.cpp.

References vpArray2D< double >::getCols(), and vpArray2D< double >::getRows().

Referenced by vpColVector::extract().

◆ mult2Matrices() [1/4]

void vpMatrix::mult2Matrices ( const vpMatrix A,
const vpMatrix B,
vpMatrix C 
)
static

Operation C = A * B.

The result is placed in the third parameter C and not returned. A new matrix won't be allocated for every use of the function (speed gain if used many times with the same result matrix size).

See also
operator*()

Definition at line 1064 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpArray2D< Type >::data, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< Type >::resize(), vpArray2D< Type >::rowNum, and vpArray2D< Type >::rowPtrs.

Referenced by operator*().

◆ mult2Matrices() [2/4]

void vpMatrix::mult2Matrices ( const vpMatrix A,
const vpMatrix B,
vpRotationMatrix C 
)
static
Warning
This function is provided for compat with previous releases. You should rather use the functionalities provided in vpRotationMatrix class.

Operation C = A * B.

The result is placed in the third parameter C and not returned. A new matrix won't be allocated for every use of the function (speed gain if used many times with the same result matrix size).

Exceptions
vpException::dimensionErrorIf matrices are not 3-by-3 dimension.

Definition at line 1113 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< Type >::rowNum, and vpArray2D< Type >::rowPtrs.

◆ mult2Matrices() [3/4]

void vpMatrix::mult2Matrices ( const vpMatrix A,
const vpMatrix B,
vpHomogeneousMatrix C 
)
static
Warning
This function is provided for compat with previous releases. You should rather use the functionalities provided in vpHomogeneousMatrix class.

Operation C = A * B.

The result is placed in the third parameter C and not returned. A new matrix won't be allocated for every use of the function (speed gain if used many times with the same result matrix size).

Exceptions
vpException::dimensionErrorIf matrices are not 4-by-4 dimension.

Definition at line 1152 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< Type >::rowNum, and vpArray2D< Type >::rowPtrs.

◆ mult2Matrices() [4/4]

void vpMatrix::mult2Matrices ( const vpMatrix A,
const vpColVector B,
vpColVector C 
)
static
Warning
This function is provided for compat with previous releases. You should rather use multMatrixVector() that is more explicit.

Operation C = A * B.

The result is placed in the third parameter C and not returned. A new matrix won't be allocated for every use of the function (speed gain if used many times with the same result matrix size).

See also
multMatrixVector()

Definition at line 1190 of file vpMatrix.cpp.

References multMatrixVector().

◆ multMatrixVector()

void vpMatrix::multMatrixVector ( const vpMatrix A,
const vpColVector v,
vpColVector w 
)
static

Operation w = A * v (v and w are vectors).

A new matrix won't be allocated for every use of the function (Speed gain if used many times with the same result matrix size).

See also
operator*(const vpColVector &v) const

Definition at line 1023 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpArray2D< Type >::data, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpColVector::resize(), vpArray2D< Type >::rowNum, and vpArray2D< Type >::rowPtrs.

Referenced by mult2Matrices(), and operator*().

◆ negateMatrix()

void vpMatrix::negateMatrix ( const vpMatrix A,
vpMatrix C 
)
static

Operation C = -A.

The result is placed in the second parameter C and not returned. A new matrix won't be allocated for every use of the function (Speed gain if used many times with the same result matrix size).

See also
operator-(void)

Definition at line 1562 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpArray2D< Type >::resize(), vpArray2D< Type >::rowNum, and vpArray2D< Type >::rowPtrs.

Referenced by operator-().

◆ operator!=()

bool vpArray2D< double >::operator!= ( const vpArray2D< double > &  A) const
inherited

Not equal to comparison operator of a 2D array.

Definition at line 994 of file vpArray2D.h.

◆ operator*() [1/7]

vpMatrix vpMatrix::operator* ( const vpMatrix B) const

Operation C = A * B (A is unchanged).

See also
mult2Matrices() to avoid matrix allocation for each use.

Definition at line 1199 of file vpMatrix.cpp.

References mult2Matrices().

Referenced by vpColVector::operator[](), vpColVector::stackMatrices(), and vpVelocityTwistMatrix::~vpVelocityTwistMatrix().

◆ operator*() [2/7]

vpMatrix vpMatrix::operator* ( const vpRotationMatrix R) const

Operator that allow to multiply a matrix by a rotation matrix. The matrix should be of dimension m-by-3.

Definition at line 1212 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< Type >::resize(), vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

◆ operator*() [3/7]

◆ operator*() [4/7]

vpMatrix vpMatrix::operator* ( const vpForceTwistMatrix V) const

Operator that allow to multiply a matrix by a force/torque twist matrix. The matrix should be of dimension m-by-6.

Definition at line 1310 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< Type >::resize(), vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

◆ operator*() [5/7]

vpTranslationVector vpMatrix::operator* ( const vpTranslationVector tv) const

Operator that allows to multiply a matrix by a translation vector. The matrix should be of dimension (3x3)

Definition at line 983 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

◆ operator*() [6/7]

vpColVector vpMatrix::operator* ( const vpColVector v) const

Operation w = A * v (matrix A is unchanged, v and w are column vectors).

See also
multMatrixVector() to avoid matrix allocation for each use.

Definition at line 1008 of file vpMatrix.cpp.

References multMatrixVector().

◆ operator*() [7/7]

vpMatrix vpMatrix::operator* ( double  x) const

Operator that allows to multiply all the elements of a matrix by a scalar.

Definition at line 1634 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< Type >::resize(), vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

◆ operator*=()

vpMatrix & vpMatrix::operator*= ( double  x)

Multiply all the element of the matrix by x : Aij = Aij * x.

Operator that allows to multiply all the elements of a matrix by a scalar.

Definition at line 1697 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

Referenced by vpColVector::operator[]().

◆ operator+()

vpMatrix vpMatrix::operator+ ( const vpMatrix B) const

Operation C = A + B (A is unchanged).

See also
add2Matrices() to avoid matrix allocation for each use.

Definition at line 1432 of file vpMatrix.cpp.

References add2Matrices().

Referenced by vpColVector::operator[]().

◆ operator+=() [1/2]

◆ operator+=() [2/2]

vpMatrix & vpMatrix::operator+= ( double  x)

Add x to all the element of the matrix : Aij = Aij + x.

Definition at line 1674 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

◆ operator,()

vpMatrix & vpMatrix::operator, ( double  val)

◆ operator-() [1/2]

vpMatrix vpMatrix::operator- ( const vpMatrix B) const

Operation C = A - B (A is unchanged).

See also
sub2Matrices() to avoid matrix allocation for each use.

Definition at line 1512 of file vpMatrix.cpp.

References sub2Matrices().

◆ operator-() [2/2]

vpMatrix vpMatrix::operator- ( void  ) const

Operation C = -A (A is unchanged).

See also
negateMatrix() to avoid matrix allocation for each use.

Definition at line 1580 of file vpMatrix.cpp.

References negateMatrix().

Referenced by vpColVector::operator[]().

◆ operator-=() [1/2]

◆ operator-=() [2/2]

vpMatrix & vpMatrix::operator-= ( double  x)

Substract x to all the element of the matrix : Aij = Aij - x.

Definition at line 1684 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

◆ operator/()

vpMatrix vpMatrix::operator/ ( double  x) const

◆ operator/=()

vpMatrix & vpMatrix::operator/= ( double  x)

Divide all the element of the matrix by x : Aij = Aij / x.

Definition at line 1711 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpException::divideByZeroError, vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

Referenced by vpColVector::operator[]().

◆ operator<<() [1/2]

vpMatrix & vpMatrix::operator<< ( double *  x)

Assigment from an array of double. This method has to be used carefully since the array allocated behind x pointer should have the same dimension than the matrix.

Definition at line 852 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

◆ operator<<() [2/2]

vpMatrix & vpMatrix::operator<< ( double  val)

Definition at line 862 of file vpMatrix.cpp.

References vpArray2D< double >::resize(), and vpArray2D< double >::rowPtrs.

◆ operator=() [1/6]

vpMatrix & vpMatrix::operator= ( const vpArray2D< double > &  A)

Copy operator that allows to convert on of the following container that inherit from vpArray2D such as vpMatrix, vpRotationMatrix, vpHomogeneousMatrix, vpPoseVector, vpColVector, vpRowVector... into a vpMatrix.

Parameters
A: 2D array to be copied.

The following example shows how to create a matrix from an homogeneous matrix:

Definition at line 718 of file vpMatrix.cpp.

References vpArray2D< double >::data, vpArray2D< Type >::data, vpArray2D< double >::dsize, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), and vpArray2D< double >::resize().

◆ operator=() [2/6]

◆ operator=() [3/6]

◆ operator=() [4/6]

vpMatrix & vpMatrix::operator= ( const std::initializer_list< double > &  list)

Set matrix elements from a list of values.

Parameters
list: List of double. Matrix size (number of columns multiplied by number of columns) should match the number of elements.
Returns
The modified Matrix. The following example shows how to set each element of a 2-by-3 matrix.
#include <visp3/core/vpMatrix.h>
int main()
{
M = { -1, -2, -3, -4, -5, -6 };
M.reshape(2, 3);
std::cout << "M:\n" << M << std::endl;
}
It produces the following printings:
M:
-1 -2 -3
-4 -5 -6
See also
operator<<()

Definition at line 787 of file vpMatrix.cpp.

References vpArray2D< double >::data, vpArray2D< double >::dsize, and vpArray2D< double >::resize().

◆ operator=() [5/6]

vpMatrix & vpMatrix::operator= ( const std::initializer_list< std::initializer_list< double > > &  lists)

Set matrix elements from a list of values.

Parameters
lists: List of double.
Returns
The modified Matrix. The following example shows how to set each element of a 2-by-3 matrix.
#include <visp3/core/vpMatrix.h>
int main()
{
M = { {-1, -2, -3}, {-4, -5, -6} };
std::cout << "M:\n" << M << std::endl;
}
It produces the following printings:
M:
-1 -2 -3
-4 -5 -6
See also
operator<<()

Definition at line 821 of file vpMatrix.cpp.

References vpArray2D< double >::resize(), vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

◆ operator=() [6/6]

vpMatrix & vpMatrix::operator= ( double  x)

Set all the element of the matrix A to x.

Definition at line 841 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::data, and vpArray2D< double >::rowNum.

◆ operator==() [1/2]

bool vpArray2D< double >::operator== ( const vpArray2D< double > &  A) const
inherited

Equal to comparison operator of a 2D array.

Definition at line 949 of file vpArray2D.h.

References vpArray2D< Type >::colNum, vpArray2D< Type >::data, vpArray2D< Type >::operator==(), vpArray2D< Type >::rowNum, and vpArray2D< Type >::size().

◆ operator==() [2/2]

bool vpArray2D< float >::operator== ( const vpArray2D< float > &  A) const
inlineinherited

◆ operator[]() [1/2]

double * vpArray2D< double >::operator[] ( unsigned int  i)
inlineinherited

Set element $A_{ij} = x$ using A[i][j] = x.

Definition at line 485 of file vpArray2D.h.

◆ operator[]() [2/2]

double * vpArray2D< double >::operator[] ( unsigned int  i) const
inlineinherited

Get element $x = A_{ij}$ using x = A[i][j].

Definition at line 487 of file vpArray2D.h.

◆ print()

int vpMatrix::print ( std::ostream &  s,
unsigned int  length,
const std::string &  intro = "" 
) const

Pretty print a matrix. The data are tabulated. The common widths before and after the decimal point are set with respect to the parameter maxlen.

Parameters
sStream used for the printing.
lengthThe suggested width of each matrix element. The actual width grows in order to accomodate the whole integral part, and shrinks if the whole extent is not needed for all the numbers.
introThe introduction which is printed before the matrix. Can be set to zero (or omitted), in which case the introduction is not printed.
Returns
Returns the common total width for all matrix elements
See also
std::ostream &operator<<(std::ostream &s, const vpArray2D<Type> &A)
Examples:
testMatrix.cpp, and testMatrixConditionNumber.cpp.

Definition at line 4519 of file vpMatrix.cpp.

References vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), and vpMath::maximum().

Referenced by vpServo::computeControlLaw(), vpColVector::operator[](), and vpVelocityTwistMatrix::~vpVelocityTwistMatrix().

◆ printSize()

void vpMatrix::printSize ( ) const
inline

Definition at line 576 of file vpMatrix.h.

References vpArray2D< Type >::getCols(), and vpArray2D< Type >::getRows().

◆ pseudoInverse() [1/5]

vpMatrix vpMatrix::pseudoInverse ( double  svThreshold = 1e-6) const

Compute and return the Moore-Penros pseudo inverse $A^+$ of a m-by-n matrix $\bf A$.

Note
By default, this function uses Lapack 3rd party. It is also possible to use a specific 3rd party suffixing this function name with one of the following 3rd party names (Lapack, Eigen3, OpenCV or Gsl).
Warning
To inverse a square n-by-n matrix, you have to use rather one of the following functions inverseByLU(), inverseByQR(), inverseByCholesky() that are kwown as faster.
Parameters
svThreshold: Threshold used to test the singular values. If a singular value is lower than this threshold we consider that the matrix is not full rank.
Returns
The Moore-Penros pseudo inverse $ A^+ $.

Here an example to compute the pseudo-inverse of a 2-by-3 matrix.

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(2, 3);
A[0][0] = 2; A[0][1] = 3; A[0][2] = 5;
A[1][0] = -4; A[1][1] = 2; A[1][2] = 3;
A.print(std::cout, 10, "A: ");
A_p.print(std::cout, 10, "A^+ (pseudo-inverse): ");
}

Once build, the previous example produces the following output:

A: [2,3]=
2 3 5
-4 2 3
A^+ (pseudo-inverse): [3,2]=
0.117899 -0.190782
0.065380 0.039657
0.113612 0.052518
Examples:
testFrankaCartVelocity-2.cpp, testMatrixConditionNumber.cpp, testRobotViper650-frames.cpp, and testRobotViper850-frames.cpp.

Definition at line 2206 of file vpMatrix.cpp.

References vpException::fatalError, vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), insert(), pseudoInverseEigen3(), pseudoInverseGsl(), pseudoInverseLapack(), pseudoInverseOpenCV(), vpArray2D< Type >::resize(), vpColVector::resize(), vpArray2D< Type >::size(), svdEigen3(), svdGsl(), svdLapack(), svdOpenCV(), and t().

Referenced by vpSimulatorAfma6::computeArticularVelocity(), vpSimulatorViper850::computeArticularVelocity(), vpServo::computeControlLaw(), computeCovarianceMatrix(), computeCovarianceMatrixVVS(), vpPoseFeatures::computePose(), vpMbEdgeMultiTracker::computeVVSFirstPhasePoseEstimation(), vpMbEdgeTracker::computeVVSFirstPhasePoseEstimation(), vpMbTracker::computeVVSPoseEstimation(), vpQuadProg::fromCanonicalCost(), vpNurbs::globalCurveApprox(), vpNurbs::globalCurveInterp(), vpMeEllipse::initTracking(), vpHomography::inverse(), vpMeLine::leastSquare(), vpRotationMatrix::mean(), vpHomogeneousMatrix::mean(), vpPose::poseDementhonNonPlan(), vpPose::poseDementhonPlan(), vpPose::poseFromRectangle(), vpPose::poseVirtualVS(), vpMeEllipse::printParameters(), pseudoInverse(), vpHomography::robust(), solveBySVD(), and vpQuadProg::solveQPi().

◆ pseudoInverse() [2/5]

unsigned int vpMatrix::pseudoInverse ( vpMatrix Ap,
double  svThreshold = 1e-6 
) const

Compute the Moore-Penros pseudo inverse $A^+$ of a m-by-n matrix $\bf A$ and return the rank r of the matrix.

Note
By default, this function uses Lapack 3rd party. It is also possible to use a specific 3rd party suffixing this function name with one of the following 3rd party names (Lapack, Eigen3, OpenCV or Gsl).
Warning
To inverse a square n-by-n matrix, you have to use rather one of the following functions inverseByLU(), inverseByQR(), inverseByCholesky() that are kwown as faster.
Parameters
Ap: The Moore-Penros pseudo inverse $ A^+ $.
svThreshold: Threshold used to test the singular values. If a singular value is lower than this threshold we consider that the matrix is not full rank.
Returns
The rank r of the matrix.

Here an example to compute the pseudo-inverse of a 2-by-3 matrix.

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(2, 3);
A[0][0] = 2; A[0][1] = 3; A[0][2] = 5;
A[1][0] = -4; A[1][1] = 2; A[1][2] = 3;
A.print(std::cout, 10, "A: ");
vpMatrix A_p;
unsigned int rank = A.pseudoInverse(A_p);
A_p.print(std::cout, 10, "A^+ (pseudo-inverse): ");
std::cout << "Rank: " << rank << std::endl;
}

Once build, the previous example produces the following output:

A: [2,3]=
2 3 5
-4 2 3
A^+ (pseudo-inverse): [3,2]=
0.117899 -0.190782
0.065380 0.039657
0.113612 0.052518
Rank: 2

Definition at line 2137 of file vpMatrix.cpp.

References vpException::fatalError, pseudoInverseEigen3(), pseudoInverseGsl(), pseudoInverseLapack(), and pseudoInverseOpenCV().

◆ pseudoInverse() [3/5]

unsigned int vpMatrix::pseudoInverse ( vpMatrix Ap,
vpColVector sv,
double  svThreshold = 1e-6 
) const

Compute the Moore-Penros pseudo inverse $A^+$ of a m-by-n matrix $\bf A$ along with singular values and return the rank r of the matrix.

Note
By default, this function uses Lapack 3rd party. It is also possible to use a specific 3rd party suffixing this function name with one of the following 3rd party names (Lapack, Eigen3, OpenCV or Gsl).
Warning
To inverse a square n-by-n matrix, you have to use rather one of the following functions inverseByLU(), inverseByQR(), inverseByCholesky() that are kwown as faster.
Parameters
Ap: The Moore-Penros pseudo inverse $ A^+ $.
svVector corresponding to matrix $A$ singular values. The size of this vector is equal to min(m, n).
svThreshold: Threshold used to test the singular values. If a singular value is lower than this threshold we consider that the matrix is not full rank.
Returns
The rank r of the matrix $\bf A$.

Here an example to compute the pseudo-inverse of a 2-by-3 matrix.

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(2, 3);
A[0][0] = 2; A[0][1] = 3; A[0][2] = 5;
A[1][0] = -4; A[1][1] = 2; A[1][2] = 3;
A.print(std::cout, 10, "A: ");
vpMatrix A_p;
unsigned int rank = A.pseudoInverse(A_p, sv);
A_p.print(std::cout, 10, "A^+ (pseudo-inverse): ");
std::cout << "Rank: " << rank << std::endl;
std::cout << "Singular values: " << sv.t() << std::endl;
}

Once build, the previous example produces the following output:

A: [2,3]=
2 3 5
-4 2 3
A^+ (pseudo-inverse): [3,2]=
0.117899 -0.190782
0.065380 0.039657
0.113612 0.052518
Rank: 2
Singular values: 6.874359351 4.443330227

Definition at line 3747 of file vpMatrix.cpp.

References vpException::fatalError, pseudoInverseEigen3(), pseudoInverseGsl(), pseudoInverseLapack(), and pseudoInverseOpenCV().

◆ pseudoInverse() [4/5]

unsigned int vpMatrix::pseudoInverse ( vpMatrix Ap,
vpColVector sv,
double  svThreshold,
vpMatrix imA,
vpMatrix imAt 
) const

Compute the Moore-Penros pseudo inverse $A^+$ of a m-by-n matrix $\bf A$ along with singular values, $\mbox{Im}(A)$ and $\mbox{Im}(A^T)$ and return the rank r of the matrix.

See pseudoInverse(vpMatrix &, vpColVector &, double, vpMatrix &, vpMatrix &, vpMatrix &) const for a complete description of this function.

Warning
To inverse a square n-by-n matrix, you have to use rather one of the following functions inverseByLU(), inverseByQR(), inverseByCholesky() that are kwown as faster.
Parameters
Ap: The Moore-Penros pseudo inverse $ A^+ $.
svVector corresponding to matrix $A$ singular values. The size of this vector is equal to min(m, n).
svThreshold: Threshold used to test the singular values. If a singular value is lower than this threshold we consider that the matrix is not full rank.
imA$\mbox{Im}({\bf A})$ that is a m-by-r matrix.
imAt$\mbox{Im}({\bf A}^T)$ that is n-by-r matrix.
Returns
The rank r of the matrix $\bf A$.

Here an example to compute the pseudo-inverse of a 2-by-3 matrix.

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(2, 3);
A[0][0] = 2; A[0][1] = 3; A[0][2] = 5;
A[1][0] = -4; A[1][1] = 2; A[1][2] = 3;
A.print(std::cout, 10, "A: ");
vpMatrix A_p;
vpMatrix imA, imAt;
unsigned int rank = A.pseudoInverse(A_p, sv, 1e-6, imA, imAt);
A_p.print(std::cout, 10, "A^+ (pseudo-inverse): ");
std::cout << "Rank: " << rank << std::endl;
std::cout << "Singular values: " << sv.t() << std::endl;
imA.print(std::cout, 10, "Im(A): ");
imAt.print(std::cout, 10, "Im(A^T): ");
}

Once build, the previous example produces the following output:

A: [2,3]=
2 3 5
-4 2 3
A^+ (pseudo-inverse): [3,2]=
0.117899 -0.190782
0.065380 0.039657
0.113612 0.052518
Rank: 2
Singular values: 6.874359351 4.443330227
Im(A): [2,2]=
0.81458 -0.58003
0.58003 0.81458
Im(A^T): [3,2]=
-0.100515 -0.994397
0.524244 -0.024967
0.845615 -0.102722

Definition at line 3841 of file vpMatrix.cpp.

References pseudoInverse().

◆ pseudoInverse() [5/5]

unsigned int vpMatrix::pseudoInverse ( vpMatrix Ap,
vpColVector sv,
double  svThreshold,
vpMatrix imA,
vpMatrix imAt,
vpMatrix kerAt 
) const

Compute the Moore-Penros pseudo inverse $A^+$ of a m-by-n matrix $\bf A$ along with singular values, $\mbox{Im}(A)$, $\mbox{Im}(A^T)$ and $\mbox{Ker}(A)$ and return the rank r of the matrix.

Note
By default, this function uses Lapack 3rd party. It is also possible to use a specific 3rd party suffixing this function name with one of the following 3rd party names (Lapack, Eigen3, OpenCV or Gsl).
Warning
To inverse a square n-by-n matrix, you have to use rather inverseByLU(), inverseByCholesky(), or inverseByQR() that are kwown as faster.

Using singular value decomposition, we have:

\[ {\bf A}_{m\times n} = {\bf U}_{m\times m} \; {\bf S}_{m\times n} \; {\bf V^\top}_{n\times n} \]

\[ {\bf A}_{m\times n} = \left[\begin{array}{ccc}\mbox{Im} ({\bf A}) & | & \mbox{Ker} ({\bf A}^\top) \end{array} \right] {\bf S}_{m\times n} \left[ \begin{array}{c} \left[\mbox{Im} ({\bf A}^\top)\right]^\top \\ \\ \hline \\ \left[\mbox{Ker}({\bf A})\right]^\top \end{array}\right] \]

where the diagonal of ${\bf S}_{m\times n}$ corresponds to the matrix $A$ singular values.

This equation could be reformulated in a minimal way:

\[ {\bf A}_{m\times n} = \mbox{Im} ({\bf A}) \; {\bf S}_{r\times n} \left[ \begin{array}{c} \left[\mbox{Im} ({\bf A}^\top)\right]^\top \\ \\ \hline \\ \left[\mbox{Ker}({\bf A})\right]^\top \end{array}\right] \]

where the diagonal of ${\bf S}_{r\times n}$ corresponds to the matrix $A$ first r singular values.

The null space of a matrix $\bf A$ is defined as $\mbox{Ker}({\bf A}) = { {\bf X} : {\bf A}*{\bf X} = {\bf 0}}$.

Parameters
ApThe Moore-Penros pseudo inverse $ {\bf A}^+ $.
svVector corresponding to matrix $A$ singular values. The size of this vector is equal to min(m, n).
svThresholdThreshold used to test the singular values. If a singular value is lower than this threshold we consider that the matrix is not full rank.
imA$\mbox{Im}({\bf A})$ that is a m-by-r matrix.
imAt$\mbox{Im}({\bf A}^T)$ that is n-by-r matrix.
kerAtThe matrix that contains the null space (kernel) of $\bf A$ defined by the matrix ${\bf X}^T$. If matrix $\bf A$ is full rank, the dimension of kerAt is (0, n), otherwise the dimension is (n-r, n). This matrix is thus the transpose of $\mbox{Ker}({\bf A})$.
Returns
The rank r of the matrix $\bf A$.

Here an example to compute the pseudo-inverse of a 2-by-3 matrix.

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(2, 3);
A[0][0] = 2; A[0][1] = 3; A[0][2] = 5;
A[1][0] = -4; A[1][1] = 2; A[1][2] = 3;
A.print(std::cout, 10, "A: ");
vpMatrix A_p, imA, imAt, kerAt;
unsigned int rank = A.pseudoInverse(A_p, sv, 1e-6, imA, imAt, kerAt);
A_p.print(std::cout, 10, "A^+ (pseudo-inverse): ");
std::cout << "Rank: " << rank << std::endl;
std::cout << "Singular values: " << sv.t() << std::endl;
imA.print(std::cout, 10, "Im(A): ");
imAt.print(std::cout, 10, "Im(A^T): ");
if (kerAt.size()) {
kerAt.t().print(std::cout, 10, "Ker(A): ");
}
else {
std::cout << "Ker(A) empty " << std::endl;
}
// Reconstruct matrix A from ImA, ImAt, KerAt
vpMatrix S(rank, A.getCols());
for(unsigned int i = 0; i< rank; i++)
S[i][i] = sv[i];
vpMatrix Vt(A.getCols(), A.getCols());
Vt.insert(imAt.t(), 0, 0);
Vt.insert(kerAt, rank, 0);
(imA * S * Vt).print(std::cout, 10, "Im(A) * S * [Im(A^T) | Ker(A)]^T:");
}

Once build, the previous example produces the following output:

A: [2,3]=
2 3 5
-4 2 3
A^+ (pseudo-inverse): [3,2]=
0.117899 -0.190782
0.065380 0.039657
0.113612 0.052518
Rank: 2
Singular values: 6.874359351 4.443330227
Im(A): [2,2]=
0.81458 -0.58003
0.58003 0.81458
Im(A^T): [3,2]=
-0.100515 -0.994397
0.524244 -0.024967
0.845615 -0.102722
Ker(A): [3,1]=
-0.032738
-0.851202
0.523816
Im(A) * S * [Im(A^T) | Ker(A)]^T:[2,3]=
2 3 5
-4 2 3

Definition at line 3982 of file vpMatrix.cpp.

References vpException::fatalError, pseudoInverseEigen3(), pseudoInverseGsl(), pseudoInverseLapack(), and pseudoInverseOpenCV().

◆ pseudoInverseEigen3() [1/4]

vpMatrix vpMatrix::pseudoInverseEigen3 ( double  svThreshold = 1e-6) const

Referenced by pseudoInverse().

◆ pseudoInverseEigen3() [2/4]

unsigned int vpMatrix::pseudoInverseEigen3 ( vpMatrix Ap,
double  svThreshold = 1e-6 
) const

◆ pseudoInverseEigen3() [3/4]

unsigned int vpMatrix::pseudoInverseEigen3 ( vpMatrix Ap,
vpColVector sv,
double  svThreshold = 1e-6 
) const

◆ pseudoInverseEigen3() [4/4]

unsigned int vpMatrix::pseudoInverseEigen3 ( vpMatrix Ap,
vpColVector sv,
double  svThreshold,
vpMatrix imA,
vpMatrix imAt,
vpMatrix kerAt 
) const

◆ pseudoInverseGsl() [1/4]

vpMatrix vpMatrix::pseudoInverseGsl ( double  svThreshold = 1e-6) const

Referenced by pseudoInverse().

◆ pseudoInverseGsl() [2/4]

unsigned int vpMatrix::pseudoInverseGsl ( vpMatrix Ap,
double  svThreshold = 1e-6 
) const

◆ pseudoInverseGsl() [3/4]

unsigned int vpMatrix::pseudoInverseGsl ( vpMatrix Ap,
vpColVector sv,
double  svThreshold = 1e-6 
) const

◆ pseudoInverseGsl() [4/4]

unsigned int vpMatrix::pseudoInverseGsl ( vpMatrix Ap,
vpColVector sv,
double  svThreshold,
vpMatrix imA,
vpMatrix imAt,
vpMatrix kerAt 
) const

◆ pseudoInverseLapack() [1/4]

vpMatrix vpMatrix::pseudoInverseLapack ( double  svThreshold = 1e-6) const

Referenced by pseudoInverse().

◆ pseudoInverseLapack() [2/4]

unsigned int vpMatrix::pseudoInverseLapack ( vpMatrix Ap,
double  svThreshold = 1e-6 
) const

◆ pseudoInverseLapack() [3/4]

unsigned int vpMatrix::pseudoInverseLapack ( vpMatrix Ap,
vpColVector sv,
double  svThreshold = 1e-6 
) const

◆ pseudoInverseLapack() [4/4]

unsigned int vpMatrix::pseudoInverseLapack ( vpMatrix Ap,
vpColVector sv,
double  svThreshold,
vpMatrix imA,
vpMatrix imAt,
vpMatrix kerAt 
) const

◆ pseudoInverseOpenCV() [1/4]

vpMatrix vpMatrix::pseudoInverseOpenCV ( double  svThreshold = 1e-6) const

Referenced by pseudoInverse().

◆ pseudoInverseOpenCV() [2/4]

unsigned int vpMatrix::pseudoInverseOpenCV ( vpMatrix Ap,
double  svThreshold = 1e-6 
) const

◆ pseudoInverseOpenCV() [3/4]

unsigned int vpMatrix::pseudoInverseOpenCV ( vpMatrix Ap,
vpColVector sv,
double  svThreshold = 1e-6 
) const

◆ pseudoInverseOpenCV() [4/4]

unsigned int vpMatrix::pseudoInverseOpenCV ( vpMatrix Ap,
vpColVector sv,
double  svThreshold,
vpMatrix imA,
vpMatrix imAt,
vpMatrix kerAt 
) const

◆ qr()

unsigned int vpMatrix::qr ( vpMatrix Q,
vpMatrix R,
bool  full = false,
bool  squareR = false,
double  tol = 1e-6 
) const

Compute the QR decomposition of a (m x n) matrix of rank r. Only available if Lapack 3rd party is installed. If Lapack is not installed we use a Lapack built-in version.

Parameters
Q: orthogonal matrix (will be modified).
R: upper-triangular matrix (will be modified).
full: whether or not we want full decomposition.
squareR: will return only the square (min(m,n) x min(m,n)) part of R.
tol: tolerance to test the rank of R.
Returns
The rank r of the matrix.

If full is false (default) then Q is (m x min(n,m)) and R is (min(n,m) x n). We then have this = QR.

If full is true and m > n then Q is (m x m) and R is (n x n). In this case this = Q (R, 0)^T

If squareR is true and n > m then R is (m x m). If r = m then R is invertible.

Here an example:

#include <visp3/core/vpMatrix.h>
double residual(vpMatrix M1, vpMatrix M2)
{
return (M1 - M2).frobeniusNorm();
}
int main()
{
vpMatrix A(4,3);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/3.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.;
A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/2.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/6.;
// Economic QR (Q 4x3, R 3x3)
vpMatrix Q, R;
int r = A.qr(A, R);
std::cout << "QR Residual: "
<< residual(A, Q*R) << std::endl;
// Full QR (Q 4x4, R 3x3)
r = A.qr(Q, R, true);
std::cout << "Full QR Residual: "
<< residual(A, Q.extract(0, 0, 4, 3)*R) << std::endl;
}
See also
qrPivot()

Definition at line 349 of file vpMatrix_qr.cpp.

References vpException::badValue, vpArray2D< double >::colNum, vpArray2D< double >::data, vpException::fatalError, vpArray2D< Type >::resize(), and vpArray2D< double >::rowNum.

Referenced by vpLinProg::colReduction().

◆ qrPivot()

unsigned int vpMatrix::qrPivot ( vpMatrix Q,
vpMatrix R,
vpMatrix P,
bool  full = false,
bool  squareR = false,
double  tol = 1e-6 
) const

Compute the QR pivot decomposition of a (m x n) matrix of rank r. Only available if Lapack 3rd party is installed. If Lapack is not installed we use a Lapack built-in version.

Parameters
Q: orthogonal matrix (will be modified).
R: upper-triangular matrix (will be modified).
P: the (n x n) permutation matrix.
full: whether or not we want full decomposition.
squareR: will return only the (r x r) part of R and the (r x n) part of P.
tol: tolerance to test the rank of R.
Returns
The rank r of the matrix.

If full is false (default) then Q is (m x min(n,m)) and R is (min(n,m) x n). We then have this.P = Q.R.

If full is true and m > n then Q is (m x m) and R is (n x n). In this case this.P = Q (R, 0)^T

If squareR is true then R is (r x r) invertible.

Here an example:

#include <visp3/core/vpMatrix.h>
double residual(vpMatrix M1, vpMatrix M2)
{
return (M1 - M2).frobeniusNorm();
}
int main()
{
vpMatrix A(4,3);
A[0][0] = 1/1.; A[0][1] = 1/2.; A[0][2] = 1/2.;
A[1][0] = 1/5.; A[1][1] = 1/3.; A[1][2] = 1/3.;
A[2][0] = 1/6.; A[2][1] = 1/4.; A[2][2] = 1/4.;
A[3][0] = 1/7.; A[3][1] = 1/5.; A[3][2] = 1/5.;
// A is rank (4x3) but rank 2
// Economic QR (Q 4x3, R 3x3)
vpMatrix Q, R, P;
int r = A.qrPivot(Q, R, P);
std::cout << "A rank: " << r << std::endl;
std::cout << "Residual: " << residual(A*P, Q*R) << std::endl;
// Full QR (Q 4x4, R 3x3)
r = A.qrPivot(Q, R, P, true);
std::cout << "QRPivot Residual: " <<
residual(A*P, Q.extract(0, 0, 4, 3)*R) << std::endl;
// Using permutation matrix: keep only non-null part of R
Q.resize(4, r, false); // Q is 4 x 2
R = R.extract(0, 0, r, 3)*P.t(); // R is 2 x 3
std::cout << "Full QRPivot Residual: " <<
residual(A, Q*R) << std::endl;
}
See also
qrPivot()

Definition at line 549 of file vpMatrix_qr.cpp.

References vpException::badValue, vpArray2D< double >::colNum, vpArray2D< double >::data, vpException::fatalError, vpArray2D< Type >::resize(), and vpArray2D< double >::rowNum.

Referenced by vpLinProg::colReduction(), vpLinProg::rowReduction(), and solveByQR().

◆ reshape()

void vpArray2D< double >::reshape ( unsigned int  nrows,
unsigned int  ncols 
)
inlineinherited

◆ resize()

void vpArray2D< double >::resize ( unsigned int  nrows,
unsigned int  ncols,
bool  flagNullify = true,
bool  recopy_ = true 
)
inlineinherited

Set the size of the array and initialize all the values to zero.

Parameters
nrows: number of rows.
ncols: number of column.
flagNullify: if true, then the array is re-initialized to 0 after resize. If false, the initial values from the common part of the array (common part between old and new version of the array) are kept. Default value is true.
recopy_: if true, will perform an explicit recopy of the old data if needed and if flagNullify is set to false.
Examples:
testArray2D.cpp, testMatrix.cpp, testMatrixConditionNumber.cpp, testMatrixDeterminant.cpp, testMatrixInitialization.cpp, testMatrixInverse.cpp, testMatrixPseudoInverse.cpp, and testSvd.cpp.

Definition at line 305 of file vpArray2D.h.

References vpArray2D< Type >::colNum, vpArray2D< Type >::dsize, vpException::memoryAllocationError, vpArray2D< Type >::rowNum, and vpArray2D< Type >::rowPtrs.

Referenced by diag(), eye(), init(), operator,(), operator<<(), operator=(), stack(), and svdOpenCV().

◆ row()

vpRowVector vpMatrix::row ( unsigned int  i)
Deprecated:
This method is deprecated. You should rather use getRow(). More precisely, the following code:
unsigned int row_index = ...;
... = L.row(row_index);

should be replaced with:

... = L.getRow(row_index - 1);
Warning
Notice row(1) is the 0th row. This function returns the i-th row of the matrix.
Parameters
i: Index of the row to extract noting that row index start at 1 to get the first row.

Definition at line 5706 of file vpMatrix.cpp.

References vpArray2D< double >::getCols().

Referenced by expm().

◆ save()

static bool vpArray2D< double >::save ( const std::string &  filename,
const vpArray2D< double > &  A,
bool  binary = false,
const char *  header = "" 
)
inlinestaticinherited

Save a matrix to a file.

Parameters
filename: Absolute file name.
A: Array to be saved.
binary: If true the matrix is saved in a binary file, else a text file.
header: Optional line that will be saved at the beginning of the file.
Returns
Returns true if success.

Warning : If you save the matrix as in a text file the precision is less than if you save it in a binary file.

See also
load()

Definition at line 738 of file vpArray2D.h.

References vpArray2D< Type >::getCols(), and vpArray2D< Type >::getRows().

◆ saveMatrix()

static bool vpMatrix::saveMatrix ( const std::string &  filename,
const vpArray2D< double > &  M,
bool  binary = false,
const char *  header = "" 
)
inlinestatic

Save a matrix to a file. This function overloads vpArray2D::load().

Parameters
filename: absolute file name.
M: matrix to be saved.
binary: If true the matrix is save in a binary file, else a text file.
header: optional line that will be saved at the beginning of the file.
Returns
Returns true if no problem appends.

Warning : If you save the matrix as in a text file the precision is less than if you save it in a binary file.

Examples:
testMatrix.cpp.

Definition at line 727 of file vpMatrix.h.

References vpArray2D< Type >::save().

Referenced by vpDot2::defineDots().

◆ saveMatrixYAML()

static bool vpMatrix::saveMatrixYAML ( const std::string &  filename,
const vpArray2D< double > &  M,
const char *  header = "" 
)
inlinestatic

Save a matrix in a YAML-formatted file. This function overloads vpArray2D::saveYAML().

Parameters
filename: absolute file name.
M: matrix to be saved in the file.
header: optional lines that will be saved at the beginning of the file. Should be YAML-formatted and will adapt to the indentation if any.
Returns
Returns true if success.
Examples:
testMatrix.cpp.

Definition at line 745 of file vpMatrix.h.

References vpArray2D< Type >::saveYAML().

◆ saveYAML()

static bool vpArray2D< double >::saveYAML ( const std::string &  filename,
const vpArray2D< double > &  A,
const char *  header = "" 
)
inlinestaticinherited

Save an array in a YAML-formatted file.

Parameters
filename: absolute file name.
A: array to be saved in the file.
header: optional lines that will be saved at the beginning of the file. Should be YAML-formatted and will adapt to the indentation if any.
Returns
Returns true if success.

Here is an example of outputs.

vpArray2D::saveYAML("matrix.yml", M, "example: a YAML-formatted header");
vpArray2D::saveYAML("matrixIndent.yml", M, "example:\n - a YAML-formatted
header\n - with inner indentation");

Content of matrix.yml:

example: a YAML-formatted header
rows: 3
cols: 4
- [0, 0, 0, 0]
- [0, 0, 0, 0]
- [0, 0, 0, 0]

Content of matrixIndent.yml:

example:
- a YAML-formatted header
- with inner indentation
rows: 3
cols: 4
- [0, 0, 0, 0]
- [0, 0, 0, 0]
- [0, 0, 0, 0]
See also
loadYAML()
Examples:
tutorial-chessboard-pose.cpp, tutorial-franka-acquire-calib-data.cpp, and tutorial-hand-eye-calibration.cpp.

Definition at line 831 of file vpArray2D.h.

References vpArray2D< Type >::getCols(), and vpArray2D< Type >::getRows().

◆ setIdentity()

void vpMatrix::setIdentity ( const double &  val = 1.0)
Deprecated:
You should rather use diag(const double &)
Deprecated:
You should rather use diag(const double &)

Set the matrix diagonal elements to val. More generally set M[i][i] = val.

Definition at line 5747 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, and vpArray2D< double >::rowNum.

Referenced by vpVelocityTwistMatrix::init(), vpColVector::rows(), and vpServo::secondaryTask().

◆ size()

◆ solveByQR() [1/2]

void vpMatrix::solveByQR ( const vpColVector b,
vpColVector x 
) const

Solve a linear system Ax = b using QR Decomposition.

Non destructive wrt. A and b.

Parameters
b: Vector b
x: Vector x
Warning
If Ax = b does not have a solution, this method does not return the least-square minimizer. Use solveBySVD() to get this vector.

Here an example:

#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,3);
A[0][0] = 4.64;
A[0][1] = 0.288;
A[0][2] = -0.384;
A[1][0] = 0.288;
A[1][1] = 7.3296;
A[1][2] = 2.2272;
A[2][0] = -0.384;
A[2][1] = 2.2272;
A[2][2] = 6.0304;
vpColVector X(3), B(3);
B[0] = 1;
B[1] = 2;
B[2] = 3;
A.solveByQR(B, X);
// Obtained values of X
// X[0] = 0.2468;
// X[1] = 0.120782;
// X[2] = 0.468587;
std::cout << "X:\n" << X << std::endl;
}
See also
qrPivot()

Definition at line 804 of file vpMatrix_qr.cpp.

References vpArray2D< double >::colNum, extract(), inverseTriangular(), qrPivot(), and t().

Referenced by solveByQR(), and vpQuadProg::solveSVDorQR().

◆ solveByQR() [2/2]

vpColVector vpMatrix::solveByQR ( const vpColVector b) const

Solve a linear system Ax = b using QR Decomposition.

Non destructive wrt. A and B.

Parameters
b: Vector b
Returns
Vector x
Warning
If Ax = b does not have a solution, this method does not return the least-square minimizer. Use solveBySVD() to get this vector.

Here an example:

#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,3);
A[0][0] = 4.64;
A[0][1] = 0.288;
A[0][2] = -0.384;
A[1][0] = 0.288;
A[1][1] = 7.3296;
A[1][2] = 2.2272;
A[2][0] = -0.384;
A[2][1] = 2.2272;
A[2][2] = 6.0304;
vpColVector X(3), B(3);
B[0] = 1;
B[1] = 2;
B[2] = 3;
X = A.solveByQR(B);
// Obtained values of X
// X[0] = 0.2468;
// X[1] = 0.120782;
// X[2] = 0.468587;
std::cout << "X:\n" << X << std::endl;
}
See also
qrPivot()

Definition at line 856 of file vpMatrix_qr.cpp.

References vpArray2D< double >::colNum, and solveByQR().

◆ solveBySVD() [1/2]

void vpMatrix::solveBySVD ( const vpColVector b,
vpColVector x 
) const

Solve a linear system $ A X = B $ using Singular Value Decomposition (SVD).

Non destructive wrt. A and B.

Parameters
b: Vector $ B $.
x: Vector $ X $.

Here an example:

#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,3);
A[0][0] = 4.64;
A[0][1] = 0.288;
A[0][2] = -0.384;
A[1][0] = 0.288;
A[1][1] = 7.3296;
A[1][2] = 2.2272;
A[2][0] = -0.384;
A[2][1] = 2.2272;
A[2][2] = 6.0304;
vpColVector X(3), B(3);
B[0] = 1;
B[1] = 2;
B[2] = 3;
A.solveBySVD(B, X);
// Obtained values of X
// X[0] = 0.2468;
// X[1] = 0.120782;
// X[2] = 0.468587;
std::cout << "X:\n" << X << std::endl;
}
See also
solveBySVD(const vpColVector &)
Examples:
quadprog.cpp, and quadprog_eq.cpp.

Definition at line 1943 of file vpMatrix.cpp.

References pseudoInverse().

Referenced by vpQuadProg::solveByProjection(), solveBySVD(), vpQuadProg::solveQPe(), and vpQuadProg::solveSVDorQR().

◆ solveBySVD() [2/2]

vpColVector vpMatrix::solveBySVD ( const vpColVector B) const

Solve a linear system $ A X = B $ using Singular Value Decomposition (SVD).

Non destructive wrt. A and B.

Parameters
B: Vector $ B $.
Returns
Vector $ X $.

Here an example:

#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix A(3,3);
A[0][0] = 4.64;
A[0][1] = 0.288;
A[0][2] = -0.384;
A[1][0] = 0.288;
A[1][1] = 7.3296;
A[1][2] = 2.2272;
A[2][0] = -0.384;
A[2][1] = 2.2272;
A[2][2] = 6.0304;
vpColVector X(3), B(3);
B[0] = 1;
B[1] = 2;
B[2] = 3;
X = A.solveBySVD(B);
// Obtained values of X
// X[0] = 0.2468;
// X[1] = 0.120782;
// X[2] = 0.468587;
std::cout << "X:\n" << X << std::endl;
}
See also
solveBySVD(const vpColVector &, vpColVector &)

Definition at line 1994 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, and solveBySVD().

◆ stack() [1/9]

◆ stack() [2/9]

void vpMatrix::stack ( const vpRowVector r)

Stack row vector r at the end of the current matrix, or copy if the matrix has no dimensions: this = [ this r ]^T.

Here an example for a robot velocity log :

for(unsigned int i = 0;i<100;i++)
{
robot.getVelocity(vpRobot::ARTICULAR_FRAME, v);
Velocities.stack(v.t());
}

Definition at line 4831 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::data, vpArray2D< Type >::data, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< double >::resize(), vpArray2D< double >::rowNum, vpArray2D< double >::size(), and vpArray2D< Type >::size().

◆ stack() [3/9]

void vpMatrix::stack ( const vpColVector c)

Stack column vector c at the right of the current matrix, or copy if the matrix has no dimensions: this = [ this c ].

Here an example for a robot velocity log matrix:

for(unsigned int i = 0; i<100;i++)
{
robot.getVelocity(vpRobot::ARTICULAR_FRAME, v);
log.stack(v);
}

Here the log matrix has size 6 rows by 100 columns.

Definition at line 4871 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< Type >::data, vpArray2D< double >::data, vpException::dimensionError, vpArray2D< Type >::getRows(), vpArray2D< double >::resize(), vpArray2D< double >::rowNum, vpArray2D< double >::rowPtrs, and vpArray2D< Type >::size().

◆ stack() [4/9]

vpMatrix vpMatrix::stack ( const vpMatrix A,
const vpMatrix B 
)
static

Stack matrix B to the end of matrix A and return the resulting matrix [ A B ]^T

Parameters
A: Upper matrix.
B: Lower matrix.
Returns
Stacked matrix [ A B ]^T
Warning
A and B must have the same number of columns.

Definition at line 4254 of file vpMatrix.cpp.

References stack().

◆ stack() [5/9]

vpMatrix vpMatrix::stack ( const vpMatrix A,
const vpRowVector r 
)
static

Stack row vector r to matrix A and return the resulting matrix [ A r ]^T

Parameters
A: Upper matrix.
r: Lower row vector.
Returns
Stacked matrix [ A r ]^T
Warning
A and r must have the same number of columns.

Definition at line 4318 of file vpMatrix.cpp.

References stack().

◆ stack() [6/9]

vpMatrix vpMatrix::stack ( const vpMatrix A,
const vpColVector c 
)
static

Stack column vector c to matrix A and return the resulting matrix [ A c ]

Parameters
A: Left matrix.
c: Right column vector.
Returns
Stacked matrix [ A c ]
Warning
A and c must have the same number of rows.

Definition at line 4357 of file vpMatrix.cpp.

References stack().

◆ stack() [7/9]

void vpMatrix::stack ( const vpMatrix A,
const vpMatrix B,
vpMatrix C 
)
static

Stack matrix B to the end of matrix A and return the resulting matrix in C.

Parameters
A: Upper matrix.
B: Lower matrix.
C: Stacked matrix C = [ A B ]^T
Warning
A and B must have the same number of columns. A and C, B and C must be two different objects.

Definition at line 4274 of file vpMatrix.cpp.

References vpArray2D< Type >::data, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< Type >::resize(), and vpArray2D< Type >::size().

◆ stack() [8/9]

void vpMatrix::stack ( const vpMatrix A,
const vpRowVector r,
vpMatrix C 
)
static

Stack row vector r to the end of matrix A and return the resulting matrix in C.

Parameters
A: Upper matrix.
r: Lower row vector.
C: Stacked matrix C = [ A r ]^T
Warning
A and r must have the same number of columns. A and C must be two different objects.

Definition at line 4337 of file vpMatrix.cpp.

References vpArray2D< Type >::data, and stack().

◆ stack() [9/9]

void vpMatrix::stack ( const vpMatrix A,
const vpColVector c,
vpMatrix C 
)
static

Stack column vector c to the end of matrix A and return the resulting matrix in C.

Parameters
A: Left matrix.
c: Right column vector.
C: Stacked matrix C = [ A c ]
Warning
A and c must have the same number of rows. A and C must be two different objects.

Definition at line 4376 of file vpMatrix.cpp.

References vpArray2D< Type >::data, and stack().

◆ stackColumns() [1/2]

void vpMatrix::stackColumns ( vpColVector out)

◆ stackColumns() [2/2]

vpColVector vpMatrix::stackColumns ( )

Stacks columns of a matrix in a vector.

Returns
a vpColVector.

Definition at line 1754 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, and vpArray2D< double >::rowNum.

◆ stackMatrices() [1/7]

vp_deprecated void vpMatrix::stackMatrices ( const vpMatrix A)
inline
Deprecated:
You should rather use stack(const vpMatrix &A)

Definition at line 765 of file vpMatrix.h.

◆ stackMatrices() [2/7]

static vp_deprecated vpMatrix vpMatrix::stackMatrices ( const vpMatrix A,
const vpMatrix B 
)
inlinestatic
Deprecated:
You should rather use stack(const vpMatrix &A, const vpMatrix &B)

Definition at line 770 of file vpMatrix.h.

◆ stackMatrices() [3/7]

static vp_deprecated void vpMatrix::stackMatrices ( const vpMatrix A,
const vpMatrix B,
vpMatrix C 
)
inlinestatic
Deprecated:
You should rather use stack(const vpMatrix &A, const vpMatrix &B, vpMatrix &C)

Definition at line 775 of file vpMatrix.h.

References operator*().

◆ stackMatrices() [4/7]

vpMatrix vpMatrix::stackMatrices ( const vpMatrix A,
const vpRowVector B 
)
static
Deprecated:
You should rather use stack(const vpMatrix &A, const vpMatrix &B)

Definition at line 5684 of file vpMatrix.cpp.

References stack().

◆ stackMatrices() [5/7]

void vpMatrix::stackMatrices ( const vpMatrix A,
const vpRowVector B,
vpMatrix C 
)
static
Deprecated:
You should rather use stack(const vpMatrix &A, const vpRowVector &B, vpMatrix &C)

Definition at line 5686 of file vpMatrix.cpp.

References stack().

◆ stackMatrices() [6/7]

vpMatrix vpMatrix::stackMatrices ( const vpColVector A,
const vpColVector B 
)
static
Deprecated:
You should rather use vpColVector::stack(const vpColVector &A, const vpColVector &B)

Definition at line 5674 of file vpMatrix.cpp.

References vpColVector::stack().

◆ stackMatrices() [7/7]

void vpMatrix::stackMatrices ( const vpColVector A,
const vpColVector B,
vpColVector C 
)
static
Deprecated:
You should rather use vpColVector::stack(const vpColVector &A, const vpColVector &B, vpColVector &C)

Definition at line 5679 of file vpMatrix.cpp.

References vpColVector::stack().

◆ stackRows() [1/2]

void vpMatrix::stackRows ( vpRowVector out)

◆ stackRows() [2/2]

vpRowVector vpMatrix::stackRows ( )

Stacks rows of a matrix in a vector.

Returns
a vpRowVector.

Definition at line 1776 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, and vpArray2D< double >::rowNum.

◆ sub2Matrices() [1/2]

void vpMatrix::sub2Matrices ( const vpMatrix A,
const vpMatrix B,
vpMatrix C 
)
static

Operation C = A - B.

The result is placed in the third parameter C and not returned. A new matrix won't be allocated for every use of the function (speed gain if used many times with the same result matrix size).

Exceptions
vpException::dimensionErrorIf A and B matrices have not the same size.
See also
operator-()

Definition at line 1487 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< Type >::resize(), vpArray2D< Type >::rowNum, and vpArray2D< Type >::rowPtrs.

Referenced by operator-().

◆ sub2Matrices() [2/2]

void vpMatrix::sub2Matrices ( const vpColVector A,
const vpColVector B,
vpColVector C 
)
static
Warning
This function is provided for compat with previous releases. You should rather use the functionalities provided in vpColVector class.

Operation C = A - B on column vectors.

The result is placed in the third parameter C and not returned. A new vector won't be allocated for every use of the function (speed gain if used many times with the same result matrix size).

Exceptions
vpException::dimensionErrorIf A and B vectors have not the same size.
See also
vpColVector::operator-()

Definition at line 1454 of file vpMatrix.cpp.

References vpArray2D< Type >::colNum, vpException::dimensionError, vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpColVector::resize(), vpArray2D< Type >::rowNum, and vpArray2D< Type >::rowPtrs.

◆ sum()

double vpMatrix::sum ( ) const

Return the sum of all the $a_{ij}$ elements of the matrix.

Returns
Value of $\sum a_{ij}$

Definition at line 1587 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

Referenced by expm(), and vpColVector::resize().

◆ sumSquare()

double vpMatrix::sumSquare ( ) const

Return the sum square of all the $A_{ij}$ elements of the matrix $A(m, n)$.

Returns
The value $\sum A_{ij}^{2}$.

Definition at line 5568 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::rowNum, and vpArray2D< double >::rowPtrs.

Referenced by vpColVector::resize().

◆ svd()

void vpMatrix::svd ( vpColVector w,
vpMatrix V 
)

Matrix singular value decomposition (SVD).

This function calls the first following function that is available:

If none of these previous 3rd parties is installed, we use by default svdLapack() with a Lapack built-in version.

Given matrix $M$, this function computes it singular value decomposition such as

\[ M = U \Sigma V^{\top} \]

Warning
This method is destructive wrt. to the matrix $ M $ to decompose. You should make a COPY of that matrix if needed.
Parameters
w: Vector of singular values: $ \Sigma = diag(w) $.
V: Matrix $ V $.
Returns
Matrix $ U $.
Note
The singular values are ordered in decreasing fashion in w. It means that the highest singular value is in w[0].

Here an example of SVD decomposition of a non square Matrix M.

#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix M(3,2);
M[0][0] = 1; M[0][1] = 6;
M[1][0] = 2; M[1][1] = 8;
M[2][0] = 0.5; M[2][1] = 9;
vpMatrix V, Sigma, U = M;
U.svd(w, V);
// Construct the diagonal matrix from the singular values
Sigma.diag(w);
// Reconstruct the initial matrix using the decomposition
vpMatrix Mrec = U * Sigma * V.t();
// Here, Mrec is obtained equal to the initial value of M
// Mrec[0][0] = 1; Mrec[0][1] = 6;
// Mrec[1][0] = 2; Mrec[1][1] = 8;
// Mrec[2][0] = 0.5; Mrec[2][1] = 9;
std::cout << "Reconstructed M matrix: \n" << Mrec << std::endl;
}
See also
svdLapack(), svdEigen3(), svdOpenCV(), svdGsl()
Examples:
servoMomentImage.cpp.

Definition at line 2066 of file vpMatrix.cpp.

References vpException::fatalError, svdEigen3(), svdGsl(), svdLapack(), and svdOpenCV().

Referenced by vpHomography::computeDisplacement(), cond(), vpHomography::DLT(), vpMbtFaceDepthNormal::estimatePlaneEquationSVD(), inducedL2Norm(), kernel(), and svdEigen3().

◆ svdEigen3()

void vpMatrix::svdEigen3 ( vpColVector w,
vpMatrix V 
)

Singular value decomposition (SVD) using Eigen3 3rd party.

Given matrix $M$, this function computes it singular value decomposition such as

\[ M = U \Sigma V^{\top} \]

Warning
This method is destructive wrt. to the matrix $ M $ to decompose. You should make a COPY of that matrix if needed.
Parameters
w: Vector of singular values: $ \Sigma = diag(w) $.
V: Matrix $ V $.
Returns
Matrix $ U $.
Note
The singular values are ordered in decreasing fashion in w. It means that the highest singular value is in w[0].

Here an example of SVD decomposition of a non square Matrix M.

#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix M(3,2);
M[0][0] = 1;
M[1][0] = 2;
M[2][0] = 0.5;
M[0][1] = 6;
M[1][1] = 8 ;
M[2][1] = 9 ;
vpMatrix Mrec;
vpMatrix Sigma;
M.svdEigen3(w, V);
// Here M is modified and is now equal to U
// Construct the diagonal matrix from the singular values
Sigma.diag(w);
// Reconstruct the initial matrix M using the decomposition
Mrec = M * Sigma * V.t();
// Here, Mrec is obtained equal to the initial value of M
// Mrec[0][0] = 1;
// Mrec[1][0] = 2;
// Mrec[2][0] = 0.5;
// Mrec[0][1] = 6;
// Mrec[1][1] = 8 ;
// Mrec[2][1] = 9 ;
std::cout << "Reconstructed M matrix: \n" << Mrec << std::endl;
}
See also
svd(), svdLapack(), svdOpenCV(), svdGsl()

Definition at line 455 of file vpMatrix_svd.cpp.

References vpArray2D< double >::data, vpArray2D< Type >::data, vpArray2D< double >::getCols(), vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), vpArray2D< double >::getRows(), vpArray2D< Type >::resize(), vpColVector::resize(), vpArray2D< Type >::size(), and svd().

Referenced by pseudoInverse(), and svd().

◆ svdGsl()

void vpMatrix::svdGsl ( vpColVector w,
vpMatrix V 
)

Singular value decomposition (SVD) using GSL 3rd party.

Given matrix $M$, this function computes it singular value decomposition such as

\[ M = U \Sigma V^{\top} \]

Warning
This method is destructive wrt. to the matrix $ M $ to decompose. You should make a COPY of that matrix if needed.
Parameters
w: Vector of singular values: $ \Sigma = diag(w) $.
V: Matrix $ V $.
Returns
Matrix $ U $.
Note
The singular values are ordered in decreasing fashion in w. It means that the highest singular value is in w[0].

Here an example of SVD decomposition of a non square Matrix M.

#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix M(3,2);
M[0][0] = 1;
M[1][0] = 2;
M[2][0] = 0.5;
M[0][1] = 6;
M[1][1] = 8 ;
M[2][1] = 9 ;
vpMatrix Mrec;
vpMatrix Sigma;
M.svdGsl(w, V);
// Here M is modified and is now equal to U
// Construct the diagonal matrix from the singular values
Sigma.diag(w);
// Reconstruct the initial matrix M using the decomposition
Mrec = M * Sigma * V.t();
// Here, Mrec is obtained equal to the initial value of M
// Mrec[0][0] = 1;
// Mrec[1][0] = 2;
// Mrec[2][0] = 0.5;
// Mrec[0][1] = 6;
// Mrec[1][1] = 8 ;
// Mrec[2][1] = 9 ;
std::cout << "Reconstructed M matrix: \n" << Mrec << std::endl;
}
See also
svd(), svdEigen3(), svdOpenCV(), svdLapack()

Definition at line 350 of file vpMatrix_svd.cpp.

References vpArray2D< double >::data, vpArray2D< Type >::data, vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), vpArray2D< Type >::resize(), and vpColVector::resize().

Referenced by pseudoInverse(), and svd().

◆ svdLapack()

void vpMatrix::svdLapack ( vpColVector w,
vpMatrix V 
)

Singular value decomposition (SVD) using Lapack 3rd party.

Given matrix $M$, this function computes it singular value decomposition such as

\[ M = U \Sigma V^{\top} \]

Warning
This method is destructive wrt. to the matrix $ M $ to decompose. You should make a COPY of that matrix if needed.
Parameters
w: Vector of singular values: $ \Sigma = diag(w) $.
V: Matrix $ V $.
Returns
Matrix $ U $.
Note
The singular values are ordered in decreasing fashion in w. It means that the highest singular value is in w[0].

Here an example of SVD decomposition of a non square Matrix M.

#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix M(3,2);
M[0][0] = 1;
M[1][0] = 2;
M[2][0] = 0.5;
M[0][1] = 6;
M[1][1] = 8 ;
M[2][1] = 9 ;
vpMatrix Mrec;
vpMatrix Sigma;
M.svdLapack(w, V);
// Here M is modified and is now equal to U
// Construct the diagonal matrix from the singular values
Sigma.diag(w);
// Reconstruct the initial matrix M using the decomposition
Mrec = M * Sigma * V.t();
// Here, Mrec is obtained equal to the initial value of M
// Mrec[0][0] = 1;
// Mrec[1][0] = 2;
// Mrec[2][0] = 0.5;
// Mrec[0][1] = 6;
// Mrec[1][1] = 8 ;
// Mrec[2][1] = 9 ;
std::cout << "Reconstructed M matrix: \n" << Mrec << std::endl;
}
See also
svd(), svdEigen3(), svdOpenCV(), svdGsl()

Definition at line 241 of file vpMatrix_svd.cpp.

References vpArray2D< Type >::data, vpArray2D< double >::data, vpException::fatalError, vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), vpArray2D< Type >::resize(), vpColVector::resize(), and transpose().

Referenced by pseudoInverse(), and svd().

◆ svdOpenCV()

void vpMatrix::svdOpenCV ( vpColVector w,
vpMatrix V 
)

Singular value decomposition (SVD) using OpenCV 3rd party.

Given matrix $M$, this function computes it singular value decomposition such as

\[ M = U \Sigma V^{\top} \]

Warning
This method is destructive wrt. to the matrix $ M $ to decompose. You should make a COPY of that matrix if needed.
Parameters
w: Vector of singular values: $ \Sigma = diag(w) $.
V: Matrix $ V $.
Returns
Matrix $ U $.
Note
The singular values are ordered in decreasing fashion in w. It means that the highest singular value is in w[0].

Here an example of SVD decomposition of a non square Matrix M.

#include <visp3/core/vpColVector.h>
#include <visp3/core/vpMatrix.h>
int main()
{
vpMatrix M(3,2);
M[0][0] = 1;
M[1][0] = 2;
M[2][0] = 0.5;
M[0][1] = 6;
M[1][1] = 8 ;
M[2][1] = 9 ;
vpMatrix Mrec;
vpMatrix Sigma;
M.svdOpenCV(w, V);
// Here M is modified and is now equal to U
// Construct the diagonal matrix from the singular values
Sigma.diag(w);
// Reconstruct the initial matrix M using the decomposition
Mrec = M * Sigma * V.t();
// Here, Mrec is obtained equal to the initial value of M
// Mrec[0][0] = 1;
// Mrec[1][0] = 2;
// Mrec[2][0] = 0.5;
// Mrec[0][1] = 6;
// Mrec[1][1] = 8 ;
// Mrec[2][1] = 9 ;
std::cout << "Reconstructed M matrix: \n" << Mrec << std::endl;
}
See also
svd(), svdEigen3(), svdLapack(), svdGsl()

Definition at line 154 of file vpMatrix_svd.cpp.

References vpArray2D< double >::data, vpArray2D< Type >::data, vpArray2D< double >::getCols(), vpArray2D< double >::getRows(), vpArray2D< Type >::resize(), vpArray2D< double >::resize(), vpColVector::resize(), and transpose().

Referenced by pseudoInverse(), and svd().

◆ t()

◆ transpose() [1/2]

◆ transpose() [2/2]

void vpMatrix::transpose ( vpMatrix At) const

Compute At the transpose of the matrix.

Parameters
At(output) : Resulting transpose matrix.
See also
t()

Definition at line 529 of file vpMatrix.cpp.

References vpCPUFeatures::checkAVX(), vpArray2D< double >::colNum, vpArray2D< Type >::resize(), and vpArray2D< double >::rowNum.

Friends And Related Function Documentation

◆ operator*()

vpMatrix operator* ( const double &  x,
const vpMatrix B 
)
related

Allow to multiply a scalar by a matrix.

Definition at line 1611 of file vpMatrix.cpp.

References vpArray2D< Type >::getCols(), vpArray2D< Type >::getRows(), and vpArray2D< Type >::resize().

◆ vpGEMM()

void vpGEMM ( const vpArray2D< double > &  A,
const vpArray2D< double > &  B,
const double &  alpha,
const vpArray2D< double > &  C,
const double &  beta,
vpArray2D< double > &  D,
const unsigned int &  ops = 0 
)
related

This function performs generalized matrix multiplication: D = alpha*op(A)*op(B) + beta*op(C), where op(X) is X or X^T. Operation on A, B and C matrices is described by enumeration vpGEMMmethod().

For example, to compute D = alpha*A^T*B^T+beta*C we need to call :

vpGEMM(A, B, alpha, C, beta, D, VP_GEMM_A_T + VP_GEMM_B_T);

If C is not used, vpGEMM must be called using an empty array null. Thus to compute D = alpha*A^T*B, we have to call:

vpGEMM(A, B, alpha, null, 0, D, VP_GEMM_B_T);
Exceptions
vpException::incorrectMatrixSizeErrorif the sizes of the matrices do not allow the operations.
Parameters
A: An array that could be a vpMatrix.
B: An array that could be a vpMatrix.
alpha: A scalar.
C: An array that could be a vpMatrix.
beta: A scalar.
D: The resulting array that could be a vpMatrix.
ops: A scalar describing operation applied on the matrices. Possible values are the one defined in vpGEMMmethod(): VP_GEMM_A_T, VP_GEMM_B_T, VP_GEMM_C_T.

Definition at line 393 of file vpGEMM.h.

References vpException::functionNotImplementedError.

◆ vpGEMMmethod

enum vpGEMMmethod
related

Enumeration of the operations applied on matrices in vpGEMM() function.

Operations are :

  • VP_GEMM_A_T to use the transpose matrix of A instead of the matrix A
  • VP_GEMM_B_T to use the transpose matrix of B instead of the matrix B
  • VP_GEMM_C_T to use the transpose matrix of C instead of the matrix C

Definition at line 57 of file vpGEMM.h.

Member Data Documentation

◆ colNum

unsigned int vpArray2D< double >::colNum
protectedinherited

Number of columns in the array.

Definition at line 137 of file vpArray2D.h.

Referenced by AAt(), AtA(), vpColVector::clear(), detByLU(), detByLUEigen3(), detByLUGsl(), detByLULapack(), detByLUOpenCV(), diag(), eigenValues(), expm(), eye(), getDiag(), getRow(), vpColVector::hadamard(), hadamard(), infinityNorm(), vpSubColVector::init(), vpSubRowVector::init(), vpSubMatrix::init(), vpRowVector::insert(), insert(), inverseByCholeskyLapack(), inverseByCholeskyOpenCV(), inverseByLUEigen3(), inverseByLUGsl(), inverseByLULapack(), inverseByLUOpenCV(), inverseByQRLapack(), inverseTriangular(), vpRotationMatrix::operator*(), vpRowVector::operator*(), operator*(), vpRotationMatrix::operator*=(), vpRowVector::operator*=(), operator*=(), vpRowVector::operator+(), vpRowVector::operator+=(), operator+=(), vpRowVector::operator,(), operator,(), vpRowVector::operator-(), vpRowVector::operator-=(), operator-=(), vpRowVector::operator/(), operator/(), vpRowVector::operator/=(), operator/=(), operator<<(), vpColVector::operator<<(), vpSubRowVector::operator=(), vpSubMatrix::operator=(), vpRowVector::operator=(), vpColVector::operator=(), operator=(), vpRowVector::operator==(), vpColVector::operator==(), qr(), qrPivot(), vpRowVector::reshape(), setIdentity(), solveByQR(), solveBySVD(), stack(), vpRowVector::stack(), stackColumns(), stackRows(), vpRowVector::sum(), sum(), vpRowVector::sumSquare(), sumSquare(), vpRowVector::t(), transpose(), vpColVector::vpColVector(), vpMatrix(), and vpRowVector::vpRowVector().

◆ data

double * vpArray2D< double >::data
inherited

Address of the first element of the data array.

Examples:
testArray2D.cpp, testDisplacement.cpp, testEigenConversion.cpp, testImageFilter.cpp, testMatrix.cpp, testTranslationVector.cpp, and tutorial-matlab.cpp.

Definition at line 145 of file vpArray2D.h.

Referenced by AtA(), vpQuaternionVector::buildFrom(), vpHomogeneousMatrix::buildFrom(), vpThetaUVector::buildFrom(), vpRzyzVector::buildFrom(), vpRxyzVector::buildFrom(), vpRzyxVector::buildFrom(), vpSubColVector::checkParentStatus(), vpSubRowVector::checkParentStatus(), vpSubMatrix::checkParentStatus(), vpColVector::clear(), vpHomogeneousMatrix::convert(), detByLUEigen3(), detByLUOpenCV(), expm(), vpThetaUVector::extract(), frobeniusNorm(), getRow(), vpThetaUVector::getTheta(), vpThetaUVector::getU(), vpColVector::hadamard(), hadamard(), vpSubColVector::init(), vpSubRowVector::init(), vpSubMatrix::init(), vpColVector::insert(), insert(), inverseByCholeskyOpenCV(), inverseByLUEigen3(), inverseByLUOpenCV(), vpTranslationVector::operator*(), vpRowVector::operator*(), vpHomography::operator*(), vpColVector::operator*(), operator*(), vpRotationVector::operator,(), vpTranslationVector::operator,(), vpRotationMatrix::operator,(), vpRowVector::operator,(), vpColVector::operator,(), vpTranslationVector::operator-(), vpRowVector::operator-(), vpColVector::operator-(), vpTranslationVector::operator/(), vpRowVector::operator/(), vpHomography::operator/(), vpColVector::operator/(), vpHomography::operator/=(), vpRotationVector::operator<<(), vpTranslationVector::operator<<(), vpRotationMatrix::operator<<(), vpRowVector::operator<<(), vpColVector::operator<<(), vpSubColVector::operator=(), vpSubRowVector::operator=(), vpQuaternionVector::operator=(), vpTranslationVector::operator=(), vpRotationMatrix::operator=(), vpRxyzVector::operator=(), vpRzyzVector::operator=(), vpRzyxVector::operator=(), vpRowVector::operator=(), vpThetaUVector::operator=(), vpColVector::operator=(), operator=(), vpRowVector::operator==(), vpColVector::operator==(), vpColVector::operator[](), qr(), qrPivot(), vpRowVector::reshape(), vpColVector::reshape(), vpQuaternionVector::set(), stack(), stackRows(), vpColVector::sum(), vpColVector::sumSquare(), svdEigen3(), svdGsl(), svdLapack(), svdOpenCV(), vpRotationVector::t(), vpTranslationVector::t(), vpPoseVector::t(), vpRowVector::t(), vpColVector::t(), vpRotationVector::toStdVector(), vpRowVector::toStdVector(), vpColVector::toStdVector(), vpColVector::vpColVector(), vpMatrix(), vpRowVector::vpRowVector(), vpQuaternionVector::w(), vpQuaternionVector::x(), vpQuaternionVector::y(), vpQuaternionVector::z(), vpSubColVector::~vpSubColVector(), vpSubMatrix::~vpSubMatrix(), and vpSubRowVector::~vpSubRowVector().

◆ dsize

◆ rowNum

unsigned int vpArray2D< double >::rowNum
protectedinherited

Number of rows in the array.

Definition at line 135 of file vpArray2D.h.

Referenced by AAt(), AtA(), vpColVector::clear(), detByLU(), detByLUEigen3(), detByLUGsl(), detByLULapack(), detByLUOpenCV(), diag(), eigenValues(), expm(), vpColVector::extract(), eye(), getCol(), getDiag(), getRow(), vpColVector::hadamard(), hadamard(), vpColVector::infinityNorm(), infinityNorm(), vpSubColVector::init(), vpSubRowVector::init(), vpSubMatrix::init(), insert(), inverseByCholeskyLapack(), inverseByCholeskyOpenCV(), inverseByLUEigen3(), inverseByLUGsl(), inverseByLULapack(), inverseByLUOpenCV(), inverseByQRLapack(), inverseTriangular(), vpTranslationVector::operator*(), vpRotationMatrix::operator*(), vpHomogeneousMatrix::operator*(), vpColVector::operator*(), operator*(), vpTranslationVector::operator*=(), vpRotationMatrix::operator*=(), vpColVector::operator*=(), operator*=(), vpColVector::operator+(), vpColVector::operator+=(), operator+=(), vpColVector::operator,(), vpColVector::operator-(), vpColVector::operator-=(), operator-=(), vpColVector::operator/(), operator/(), vpTranslationVector::operator/=(), vpColVector::operator/=(), operator/=(), operator<<(), vpColVector::operator<<(), vpSubColVector::operator=(), vpSubRowVector::operator=(), vpSubMatrix::operator=(), vpTranslationVector::operator=(), vpRowVector::operator=(), vpColVector::operator=(), operator=(), vpRowVector::operator==(), vpColVector::operator==(), qr(), qrPivot(), vpColVector::reshape(), setIdentity(), stack(), vpColVector::stack(), stackColumns(), stackRows(), vpColVector::sum(), sum(), vpRotationVector::sumSquare(), vpTranslationVector::sumSquare(), vpColVector::sumSquare(), sumSquare(), vpTranslationVector::t(), vpPoseVector::t(), vpColVector::t(), transpose(), vpColVector::vpColVector(), vpMatrix(), and vpRowVector::vpRowVector().

◆ rowPtrs