Visual Servoing Platform  version 3.0.0
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)
 
virtual ~vpMatrix ()
 
void clear ()
 
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= (const vpArray2D< double > &A)
 
vpMatrixoperator= (const double x)
 
Stacking
void stack (const vpMatrix &A)
 
void stack (const vpRowVector &r)
 
void stackColumns (vpColVector &out)
 
vpColVector stackColumns ()
 
void stackRows (vpRowVector &out)
 
vpRowVector stackRows ()
 
Matrix insertion
void insert (const vpMatrix &A, const unsigned int r, const unsigned int c)
 
Columns, rows, sub-matrices extraction
vpRowVector getRow (const unsigned int i) const
 
vpRowVector getRow (const unsigned int i, const unsigned int j_begin, const unsigned int size) const
 
vpColVector getCol (const unsigned int j) const
 
vpColVector getCol (const unsigned int j, const unsigned int i_begin, const unsigned int size) const
 
void init (const vpMatrix &M, unsigned int r, unsigned int c, unsigned int nrows, unsigned int ncols)
 
Matrix operations
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+= (const double x)
 
vpMatrixoperator-= (const double x)
 
vpMatrixoperator*= (const double x)
 
vpMatrixoperator/= (double x)
 
vpMatrix operator* (const double x) const
 
vpMatrix operator/ (const double x) const
 
double sum () const
 
double sumSquare () const
 
double det (vpDetMethod method=LU_DECOMPOSITION) const
 
vpMatrix expm () 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 &C) const
 
vpMatrix AAt () const
 
void AAt (vpMatrix &B) const
 
vpMatrix AtA () const
 
void AtA (vpMatrix &B) const
 
Matrix inversion
vpMatrix inverseByLU () const
 
vpMatrix inverseByCholesky () const
 
vpMatrix inverseByCholeskyLapack () const
 
vpMatrix inverseByQR () const
 
vpMatrix inverseByQRLapack () 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 &kerA) const
 
SVD decomposition
void svd (vpColVector &w, vpMatrix &v)
 
void solveBySVD (const vpColVector &B, vpColVector &x) const
 
vpColVector solveBySVD (const vpColVector &B) const
 
unsigned int kernel (vpMatrix &KerA, double svThreshold=1e-6) const
 
double cond () const
 
Eigen values
vpColVector eigenValues () const
 
void eigenValues (vpColVector &evalue, vpMatrix &evector) const
 
Norms
double euclideanNorm () const
 
double infinityNorm () const
 
Printing
int print (std::ostream &s, unsigned int length, char const *intro=0) const
 
std::ostream & matlabPrint (std::ostream &os) const
 
std::ostream & maplePrint (std::ostream &os) const
 
std::ostream & csvPrint (std::ostream &os) const
 
std::ostream & cppPrint (std::ostream &os, const char *matrixName=NULL, bool octet=false) const
 
void printSize () const
 
Inherited functionalities from vpArray2D
double getMinValue () const
 
double getMaxValue () const
 
unsigned int getRows () const
 
unsigned int getCols () const
 
unsigned int size () const
 
void resize (const unsigned int nrows, const unsigned int ncols, const bool flagNullify=true)
 
double * operator[] (unsigned int i)
 
double * operator[] (unsigned int i) 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, const unsigned int r, const unsigned int c)
 
static void insert (const vpMatrix &A, const vpMatrix &B, vpMatrix &C, const unsigned int r, const 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 void stack (const vpMatrix &A, const vpMatrix &B, vpMatrix &C)
 
static void stack (const vpMatrix &A, const vpRowVector &r, 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)
 
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, const 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, const 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, const 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, const 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
 

Deprecated functions

vp_deprecated void init ()
 
vp_deprecated void stackMatrices (const vpMatrix &A)
 
vp_deprecated void setIdentity (const double &val=1.0)
 
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.

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>.

Warning
Note the matrix in the class (*this) will be noted A in the comment
See also
vpRowVector, vpColVector, vpHomogeneousMatrix, vpRotationMatrix, vpTwistMatrix, vpHomography
Examples:
manServo4PointsDisplay.cpp, manSimu4Dots.cpp, manSimu4Points.cpp, photometricVisualServoing.cpp, servoAfma4Point2DArtVelocity.cpp, servoAfma4Point2DCamVelocityKalman.cpp, servoAfma6FourPoints2DArtVelocity.cpp, servoAfma6Point2DArtVelocity.cpp, servoAfma6Points2DCamVelocityEyeToHand.cpp, servoBiclopsPoint2DArtVelocity.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, servoViper650FourPoints2DArtVelocityInteractionCurrent.cpp, servoViper850FourPoints2DArtVelocityInteractionCurrent.cpp, servoViper850FourPoints2DArtVelocityInteractionDesired.cpp, servoViper850Point2DArtVelocity-jointAvoidance-basic.cpp, servoViper850Point2DArtVelocity-jointAvoidance-gpa.cpp, servoViper850Point2DArtVelocity-jointAvoidance-large.cpp, servoViper850Point2DArtVelocity.cpp, servoViper850Point2DCamVelocityKalman.cpp, simulateFourPoints2DCartesianCamVelocity.cpp, simulateFourPoints2DPolarCamVelocity.cpp, testColVector.cpp, testFeature.cpp, testMatrix.cpp, testMatrixException.cpp, testMatrixInverse.cpp, testPoseFeatures.cpp, testRowVector.cpp, testSvd.cpp, testTranslationVector.cpp, tutorial-image-filter.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 92 of file vpMatrix.h.

Member Enumeration Documentation

Method used to compute the determinant of a square matrix.

See also
det()
Enumerator
LU_DECOMPOSITION 

LU decomposition method.

Definition at line 99 of file vpMatrix.h.

Constructor & Destructor Documentation

vpMatrix::vpMatrix ( )
inline

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

Definition at line 107 of file vpMatrix.h.

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 114 of file vpMatrix.h.

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 122 of file vpMatrix.h.

vpMatrix::vpMatrix ( const vpMatrix M,
unsigned int  r,
unsigned int  c,
unsigned int  nrows,
unsigned int  ncols 
)
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 136 of file vpMatrix.h.

virtual vpMatrix::~vpMatrix ( )
inlinevirtual

Destructor (Memory de-allocation)

Definition at line 139 of file vpMatrix.h.

Member Function Documentation

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 286 of file vpMatrix.cpp.

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 306 of file vpMatrix.cpp.

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

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 930 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+().

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 968 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.

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 897 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.

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 345 of file vpMatrix.cpp.

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

void vpMatrix::clear ( )
inline

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

Definition at line 145 of file vpMatrix.h.

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(), and vpPose::poseVirtualVSrobust().

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 87 of file vpMatrix_covariance.cpp.

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

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 139 of file vpMatrix_covariance.cpp.

References computeCovarianceMatrix().

Referenced by computeCovarianceMatrixVVS(), vpMbEdgeKltTracker::computeVVS(), vpMbKltTracker::computeVVS(), vpMbEdgeTracker::computeVVS(), and vpPose::poseVirtualVS().

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 117 of file vpMatrix_covariance.cpp.

References computeCovarianceMatrix(), and computeCovarianceMatrixVVS().

double vpMatrix::cond ( ) const
Returns
The condition number, the ratio of the largest singular value of the matrix to the smallest.

Definition at line 3445 of file vpMatrix.cpp.

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

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

std::ostream & vpMatrix::cppPrint ( std::ostream &  os,
const char *  matrixName = NULL,
bool  octet = false 
) const

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

Print under the following form:

vpMatrix A(6,4);
A[0][0] = 1.4;
A[0][1] = 0.6; ...
Parameters
osthe stream to be printed in.
matrixNamename of the matrix, "A" by default, to be used for the line vpMatrix A(6,7) (see example).
octetif false, print using double, if true, print byte per byte each bytes of the double array.

Definition at line 2824 of file vpMatrix.cpp.

References vpArray2D< double >::getRows().

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 560 of file vpMatrix.cpp.

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

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

Print matrix in csv format.

Print as comma separated values so that this output can be imported into any program which has a csv data import option:

0.939846, 0.0300754, 0.340272
0.0300788, 0.984961, -0.170136
-0.340272, 0.170136, 0.924807

Definition at line 2794 of file vpMatrix.cpp.

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

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 methos 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.det(vpMatrix::LU_DECOMPOSITION ) << std::endl;
}
Examples:
testMatrixInverse.cpp.

Definition at line 3297 of file vpMatrix.cpp.

References LU_DECOMPOSITION.

Referenced by vpTemplateTrackerTriangle::init().

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

Definition at line 539 of file vpMatrix.cpp.

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

Referenced by vpMbEdgeKltTracker::computeVVS(), vpMbKltTracker::computeVVS(), and vpMbEdgeTracker::computeVVS().

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 493 of file vpMatrix.cpp.

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

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 3008 of file vpMatrix.cpp.

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

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 3120 of file vpMatrix.cpp.

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

double vpMatrix::euclideanNorm ( ) const

Compute and return the Euclidean norm $ ||x|| = \sqrt{ \sum{A_{ij}^2}} $.

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

Definition at line 3497 of file vpMatrix.cpp.

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

vpMatrix vpMatrix::expm ( ) const

Compute the exponential matrix of a square matrix.

Returns
Return the exponential matrix.

Definition at line 3317 of file vpMatrix.cpp.

References vpArray2D< double >::colNum, vpArray2D< double >::data, vpArray2D< Type >::data, vpException::dimensionError, eye(), inverseByLU(), vpArray2D< double >::rowNum, and sum().

Referenced by vpTemplateTrackerWarpHomographySL3::computeCoeff().

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 162 of file vpMatrix.cpp.

References eye().

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 177 of file vpMatrix.cpp.

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

vpColVector vpMatrix::getCol ( const 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

Definition at line 2250 of file vpMatrix.cpp.

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

Referenced by vpHomography::DLT(), kernel(), vpPose::poseDementhonPlan(), vpPose::poseFromRectangle(), and vpServo::secondaryTaskJointLimitAvoidance().

vpColVector vpMatrix::getCol ( const unsigned int  j,
const unsigned int  i_begin,
const 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 2200 of file vpMatrix.cpp.

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

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

Return the array max value.

Examples:
servoMomentImage.cpp.
double vpArray2D< double >::getMinValue ( ) const
inherited

Return the array min value.

Examples:
servoMomentImage.cpp.
vpRowVector vpMatrix::getRow ( const 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

Definition at line 2297 of file vpMatrix.cpp.

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

Referenced by pseudoInverse().

vpRowVector vpMatrix::getRow ( const unsigned int  i,
const unsigned int  j_begin,
const 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 2346 of file vpMatrix.cpp.

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

double vpMatrix::infinityNorm ( ) const

Compute and return the infinity norm $ {||x||}_{\infty} = max\left(\sum_{j=0}^{n}{\mid x_{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
euclideanNorm()

Definition at line 3518 of file vpMatrix.cpp.

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

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
Examples:
testMatrix.cpp.

Definition at line 137 of file vpMatrix.cpp.

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

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

Definition at line 582 of file vpMatrix.h.

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

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

Insert matrix A at the given position in the current matrix.

Warning
Throw vpException::dimensionError if the dimensions of the matrices do not allow the operation.
Parameters
A: The matrix to insert.
r: The index of the row to begin to insert data.
c: The index of the column to begin to insert data.

Definition at line 2952 of file vpMatrix.cpp.

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

Referenced by vpNurbs::curveKnotIns(), and insert().

vpMatrix vpMatrix::insert ( const vpMatrix A,
const vpMatrix B,
const unsigned int  r,
const 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 2497 of file vpMatrix.cpp.

References insert().

void insert ( const vpMatrix A,
const vpMatrix B,
vpMatrix C,
const unsigned int  r,
const 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 2526 of file vpMatrix.cpp.

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

vpMatrix vpMatrix::inverseByCholesky ( ) const

Compute the inverse of a n-by-n matrix using the Cholesky decomposition. The matrix must be real and symmetric. Only available if lapack is installed.

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 113 of file vpMatrix_cholesky.cpp.

References vpArray2D< double >::colNum, inverseByCholeskyLapack(), vpMatrixException::matrixError, vpArray2D< double >::rowNum, and vpERROR_TRACE.

vpMatrix vpMatrix::inverseByLU ( ) const

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

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.inverseByLU();
std::cout << "Inverse by LU: \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
pseudoInverse()
Examples:
photometricVisualServoing.cpp.

Definition at line 232 of file vpMatrix_lu.cpp.

References vpArray2D< double >::colNum, vpArray2D< Type >::getRows(), vpMatrixException::matrixError, vpArray2D< double >::rowNum, and vpERROR_TRACE.

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

vpMatrix vpMatrix::inverseByQR ( ) const

Compute the inverse of a n-by-n matrix using the QR decomposition. Only available if lapack is installed.

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.inverseByQR();
std::cout << "Inverse by QR: \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
pseudoInverse()

Definition at line 224 of file vpMatrix_qr.cpp.

References vpArray2D< double >::colNum, inverseByQRLapack(), vpMatrixException::matrixError, vpArray2D< double >::rowNum, and vpERROR_TRACE.

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 column

Definition at line 2567 of file vpMatrix.cpp.

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 2594 of file vpMatrix.cpp.

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

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

Function to compute the null space (the kernel) of the interaction matrix A which is not full rank. The null space ( the kernel ) of a matrix A is defined as Null(A) = Ker(A) = {X : A*X =0}.

Parameters
kerA: The matrix to contain the null space (kernel) of A defined by the row vectors (A*KerA.t()=0)
svThreshold: Specify the used threshold in the svd(...) function (a function to compute the singular value decomposition)
Returns
the rank of the matrix.
Examples:
servoViper850Point2DArtVelocity-jointAvoidance-basic.cpp.

Definition at line 3201 of file vpMatrix.cpp.

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

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 1419 of file vpMatrix.cpp.

Referenced by kron().

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 1461 of file vpMatrix.cpp.

References kron().

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 1384 of file vpMatrix.cpp.

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

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 1430 of file vpMatrix.cpp.

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

static bool vpArray2D< double >::load ( const std::string &  filename,
vpArray2D< double > &  A,
const 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 308 of file vpArray2D.h.

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

static bool vpMatrix::loadMatrix ( const std::string &  filename,
vpArray2D< double > &  M,
const 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 518 of file vpMatrix.h.

References vpArray2D< Type >::load().

Referenced by vpDot2::defineDots().

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 533 of file vpMatrix.h.

References vpArray2D< Type >::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()

Definition at line 392 of file vpArray2D.h.

References vpArray2D< Type >::resize().

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

Print using MAPLE matrix input format.

Print using the following way so that this output can be directly copied into MAPLE:

([
[0.939846, 0.0300754, 0.340272, ],
[0.0300788, 0.984961, -0.170136, ],
[-0.340272, 0.170136, 0.924807, ],
])

Definition at line 2770 of file vpMatrix.cpp.

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

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

Print using matlab syntax, to be put in matlab later.

Print using the following form:

[ a,b,c;
d,e,f;
g,h,i]

Definition at line 2745 of file vpMatrix.cpp.

References vpArray2D< double >::getRows().

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 658 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*().

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 704 of file vpMatrix.cpp.

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

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 743 of file vpMatrix.cpp.

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

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 781 of file vpMatrix.cpp.

References 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 621 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.

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

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 1139 of file vpMatrix.cpp.

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

Referenced by operator-().

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 790 of file vpMatrix.cpp.

References mult2Matrices().

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 803 of file vpMatrix.cpp.

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

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

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

Definition at line 832 of file vpMatrix.cpp.

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

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 861 of file vpMatrix.cpp.

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

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 580 of file vpMatrix.cpp.

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

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 606 of file vpMatrix.cpp.

References multMatrixVector().

vpMatrix vpMatrix::operator* ( const double  x) const

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

Definition at line 1218 of file vpMatrix.cpp.

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

vpMatrix & vpMatrix::operator*= ( const 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 1281 of file vpMatrix.cpp.

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

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 998 of file vpMatrix.cpp.

References add2Matrices().

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

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

Definition at line 1257 of file vpMatrix.cpp.

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

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 1087 of file vpMatrix.cpp.

References sub2Matrices().

vpMatrix vpMatrix::operator- ( void  ) const

Operation C = -A (A is unchanged).

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

Definition at line 1161 of file vpMatrix.cpp.

References negateMatrix().

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

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

Definition at line 1268 of file vpMatrix.cpp.

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

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

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

Definition at line 1291 of file vpMatrix.cpp.

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

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

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

Definition at line 446 of file vpMatrix.cpp.

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

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 415 of file vpMatrix.cpp.

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

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

Set all the element of the matrix A to x.

Definition at line 431 of file vpMatrix.cpp.

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

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

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

Definition at line 259 of file vpArray2D.h.

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

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

Definition at line 261 of file vpArray2D.h.

int vpMatrix::print ( std::ostream &  s,
unsigned int  length,
char const *  intro = 0 
) 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.

Definition at line 2649 of file vpMatrix.cpp.

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

void vpMatrix::printSize ( ) const
inline

Definition at line 417 of file vpMatrix.h.

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

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

Compute the pseudo inverse of the matrix using the SVD.

Compute and return the pseudo inverse of a n-by-m matrix : $ A^+ $

Parameters
svThreshold: Threshold used to test the singular values.
Returns
Pseudo inverse of the matrix.

Here an example to compute the inverse of a n-by-n matrix. If the matrix is n-by-n it is also possible to use inverseByLU().

#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.pseudoInverse();
std::cout << "Inverse by pseudo inverse: \n" << A_1 << std::endl;
std::cout << "A*A^-1: \n" << A * A_1 << std::endl;
}
See also
inverseByLU()

Definition at line 1756 of file vpMatrix.cpp.

Referenced by vpCalibration::calibrationTsai(), vpSimulatorAfma6::computeArticularVelocity(), vpSimulatorViper850::computeArticularVelocity(), vpServo::computeControlLaw(), computeCovarianceMatrix(), vpMbEdgeKltTracker::computeVVS(), vpMbKltTracker::computeVVS(), vpMbEdgeTracker::computeVVS(), vpNurbs::globalCurveApprox(), vpNurbs::globalCurveInterp(), vpMeEllipse::initTracking(), vpHomography::inverse(), vpMeLine::leastSquare(), vpPose::poseDementhonNonPlan(), vpPose::poseFromRectangle(), vpPose::poseVirtualVS(), pseudoInverse(), vpHomography::robust(), and solveBySVD().

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

Compute the pseudo inverse of the matrix using the SVD. return the rank

Compute the pseudo inverse of the matrix $Ap = A^+$

Parameters
Ap: The pseudo inverse $ A^+ $.
svThreshold: Threshold used to test the singular values.
Returns
Return the rank of the matrix A

Definition at line 1716 of file vpMatrix.cpp.

References pseudoInverse().

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

Compute the pseudo inverse of the matrix using the SVD. return the rank and the singular value

Compute the pseudo inverse of the matrix $Ap = A^+$

Parameters
Ap: The pseudo inverse $ A^+ $.
sv: Singular values.
svThreshold: Threshold used to test the singular values.
Returns
Return the rank of the matrix A

Definition at line 1772 of file vpMatrix.cpp.

References pseudoInverse().

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

Compute the pseudo inverse of the matrix using the SVD. return the rank and the singular value, image

Compute the pseudo inverse of the matrix $Ap = A^+$ along with Ker A, Ker $A^T$, Im A and Im $A^T$

Pseudo inverse, kernel and image are computed using the SVD decomposition.

A is an m x n matrix, if m >=n the svd works on A other wise it works on $A^T$.

Therefore if m>=n 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} \left[ \begin{array}{c} (\mbox{Im} {\bf A^\top})^\top \\ (\mbox{Ker}{\bf A})^\top \end{array}\right] \]

where Im(A) is an m x r matrix (r is the rank of A) and Im(A^T) is an r x n matrix

Parameters
Ap: The pseudo inverse $ A^+ $.
sv: Singular values.
svThreshold: Threshold used to test the singular values.
imAt: Image A^T
imAImage A
Returns
Return the rank of the matrix A

Definition at line 1810 of file vpMatrix.cpp.

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

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

Compute the pseudo inverse of the matrix using the SVD. return the rank and the singular value, image, kernel.

Compute the pseudo inverse of the matrix $Ap = A^+$ along with Ker A, Ker $A^T$, Im A and Im $A^T$

Pseudo inverse, kernel and image are computed using the SVD decomposition.

A is an m x n matrix, if m >=n the svd works on A other wise it works on $A^T$.

Therefore if m>=n 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} \left[ \begin{array}{c} (\mbox{Im} {\bf A^\top})^\top \\ (\mbox{Ker}{\bf A})^\top \end{array}\right] \]

where Im(A) is an m x r matrix (r is the rank of A) and Im(A^T) is an r x n matrix

Parameters
Ap: The pseudo inverse $ A^+ $.
sv: Singular values.
svThreshold: Threshold used to test the singular values.
imAImage A
imAt: Image A^T
kerA: null space of A
Returns
Return the rank of the matrix A

Definition at line 1986 of file vpMatrix.cpp.

References vpArray2D< double >::getCols(), vpArray2D< Type >::getCols(), getRow(), vpArray2D< double >::getRows(), vpArray2D< Type >::resize(), vpColVector::resize(), vpRowVector::sumSquare(), svd(), and t().

void vpArray2D< double >::resize ( const unsigned int  nrows,
const unsigned int  ncols,
const bool  flagNullify = 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.
Examples:
testArray2D.cpp, testMatrix.cpp, testMatrixInverse.cpp, and testSvd.cpp.

Definition at line 167 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(), and operator=().

static bool vpArray2D< double >::save ( const std::string &  filename,
const vpArray2D< double > &  A,
const 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 468 of file vpArray2D.h.

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

static bool vpMatrix::saveMatrix ( const std::string &  filename,
const vpArray2D< double > &  M,
const 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 550 of file vpMatrix.h.

References vpArray2D< Type >::save().

Referenced by vpDot2::defineDots().

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 567 of file vpMatrix.h.

References vpArray2D< Type >::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()

Definition at line 560 of file vpArray2D.h.

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

void vpMatrix::setIdentity ( const double &  val = 1.0)
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 209 of file vpMatrix.cpp.

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

Referenced by vpServo::secondaryTask().

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 &)

Definition at line 1517 of file vpMatrix.cpp.

References pseudoInverse().

Referenced by solveBySVD().

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 1572 of file vpMatrix.cpp.

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

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.

Definition at line 2933 of file vpMatrix.cpp.

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

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 2366 of file vpMatrix.cpp.

References stack().

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 matrix.
Returns
Stacked matrix [ A r ]^T
Warning
A and r must have the same number of columns.

Definition at line 2390 of file vpMatrix.cpp.

References stack().

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.

Definition at line 2414 of file vpMatrix.cpp.

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

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

Stack row vector v 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.

Definition at line 2456 of file vpMatrix.cpp.

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

void vpMatrix::stackColumns ( vpColVector out)
vpColVector vpMatrix::stackColumns ( )

Stacks columns of a matrix in a vector.

Returns
a vpColVector.

Definition at line 1341 of file vpMatrix.cpp.

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

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

Definition at line 586 of file vpMatrix.h.

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 590 of file vpMatrix.h.

References stack().

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 594 of file vpMatrix.h.

References stack().

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 3565 of file vpMatrix.cpp.

References stack().

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 3570 of file vpMatrix.cpp.

References stack().

vpMatrix vpMatrix::stackMatrices ( const vpColVector A,
const vpColVector B 
)
static
void vpMatrix::stackMatrices ( const vpColVector A,
const vpColVector B,
vpColVector C 
)
static
vpRowVector vpMatrix::stackRows ( )

Stacks rows of a matrix in a vector.

Returns
a vpRowVector.

Definition at line 1371 of file vpMatrix.cpp.

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

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 1057 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-().

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 1020 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.

double vpMatrix::sum ( ) const

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

Returns
$\sum a_{ij}$

Definition at line 1170 of file vpMatrix.cpp.

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

Referenced by expm().

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 3539 of file vpMatrix.cpp.

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

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

Singular value decomposition (SVD).

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

Warning
Destructive method wrt. to the matrix $ M $ to decompose. You should make a COPY of that matrix if needed not to CHANGE.
Parameters
w: Vector of singular values. $ \Sigma = diag(w) $.
v: Matrix $ V $.
Returns
Matrix $ U $.
Warning
If the GNU Scientific Library (GSL) third party library is used to compute the SVD decomposition, the singular values $ \Sigma_{i,i} $ are ordered in decreasing fashion in w. This is not the case, if the GSL is not detected by ViSP.

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.svd(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;
}
Examples:
servoMomentImage.cpp.

Definition at line 1646 of file vpMatrix.cpp.

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

Referenced by cond(), vpHomography::DLT(), kernel(), vpPose::poseDementhonPlan(), and pseudoInverse().

vpMatrix vpMatrix::transpose ( ) const

Compute and return the transpose of the matrix.

See also
t()

Definition at line 247 of file vpMatrix.cpp.

Referenced by vpServo::computeProjectionOperators(), vpTemplateTrackerWarpRT::getParamInverse(), and vpTemplateTrackerWarpSRT::getParamInverse().

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 259 of file vpMatrix.cpp.

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

Friends And Related Function Documentation

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

Allow to multiply a scalar by a matrix.

Definition at line 1200 of file vpMatrix.cpp.

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

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

double * vpArray2D< double >::data
inherited

Address of the first element of the data array.

Examples:
testDisplacement.cpp, testMatrix.cpp, testPoseVector.cpp, and testTranslationVector.cpp.

Definition at line 84 of file vpArray2D.h.

Referenced by AtA(), vpHomogeneousMatrix::buildFrom(), vpRzyxVector::buildFrom(), vpRzyzVector::buildFrom(), vpRxyzVector::buildFrom(), vpThetaUVector::buildFrom(), vpSubColVector::checkParentStatus(), vpSubRowVector::checkParentStatus(), vpSubMatrix::checkParentStatus(), vpColVector::clear(), vpHomogeneousMatrix::convert(), vpTranslationVector::euclideanNorm(), vpRowVector::euclideanNorm(), vpColVector::euclideanNorm(), euclideanNorm(), expm(), vpThetaUVector::extract(), vpSubColVector::init(), vpSubRowVector::init(), vpSubMatrix::init(), vpTranslationVector::operator*(), vpRowVector::operator*(), vpColVector::operator*(), vpHomography::operator*(), vpTranslationVector::operator-(), vpRowVector::operator-(), vpColVector::operator-(), vpTranslationVector::operator/(), vpRowVector::operator/(), vpColVector::operator/(), vpHomography::operator/(), vpHomography::operator/=(), vpSubColVector::operator=(), vpSubRowVector::operator=(), vpTranslationVector::operator=(), vpRowVector::operator=(), vpColVector::operator=(), vpRzyxVector::operator=(), vpRzyzVector::operator=(), vpRxyzVector::operator=(), operator=(), vpThetaUVector::operator=(), vpColVector::operator[](), vpRowVector::reshape(), vpColVector::reshape(), vpQuaternionVector::set(), stackRows(), vpRotationVector::t(), vpTranslationVector::t(), vpPoseVector::t(), vpRowVector::t(), vpColVector::t(), vpQuaternionVector::w(), vpQuaternionVector::x(), vpQuaternionVector::y(), vpQuaternionVector::z(), vpSubColVector::~vpSubColVector(), vpSubMatrix::~vpSubMatrix(), and vpSubRowVector::~vpSubRowVector().