SMatrix: a generic fixed size D1 x D2 Matrix class. The class is template on the scalar type, on the matrix sizes: D1 = number of rows and D2 = number of columns amd on the representation storage type. By default the representation is MatRepStd<T,D1,D2> (standard D1xD2 of type T), but it can be of type MatRepSym<T,D> for symmetric matrices DxD, where the storage is only D*(D+1)/2. See \ref SMatrixDoc. Original author is Thorsten Glebe HERA-B Collaboration, MPI Heidelberg (Germany) @ingroup SMatrixSVector @authors T. Glebe, L. Moneta and J. Palacios SMatrix: column-wise storage
Assign from another compatible matrix. Possible Symmetirc to general but NOT vice-versa
@name --- Access functions --- access the parse tree with the index starting from zero and following the C convention for the order in accessing the matrix elements. Same convention for general and symmetric matrices.
@name --- STL-like interface --- The iterators access the matrix element in the order how they are stored in memory. The C (row-major) convention is used, and in the case of symmetric matrices the iterator spans only the lower diagonal block. For example for a symmetric 3x3 matrices the order of the 6 elements \f${a_0,...a_5}\f$ is: \f[ M = \left( \begin{array}{ccc} a_0 & a_1 & a_3 \\ a_1 & a_2 & a_4 \\ a_3 & a_4 & a_5 \end{array} \right) \f] STL iterator interface.
read only access to matrix element, with indices starting from 0
read/write access to matrix element with indices starting from 0
read only access to matrix element, with indices starting from 0. Function will check index values and it will assert if they are wrong
read/write access to matrix element with indices starting from 0. Function will check index values and it will assert if they are wrong
@name --- Linear Algebra Functions --- Invert a square Matrix ( this method changes the current matrix). Return true if inversion is successfull. The method used for general square matrices is the LU factorization taken from Dinv routine from the CERNLIB (written in C++ from CLHEP authors) In case of symmetric matrices Bunch-Kaufman diagonal pivoting method is used (The implementation is the one written by the CLHEP authors)
Fast Invertion of a square Matrix ( this method changes the current matrix). Return true if inversion is successfull. The method used is based on direct inversion using the Cramer rule for matrices upto 5x5. Afterwards the same default algorithm of Invert() is used. Note that this method is faster but can suffer from much larger numerical accuracy when the condition of the matrix is large
Invert a square Matrix and returns a new matrix. In case the inversion fails the current matrix is returned. \param ifail . ifail will be set to 0 when inversion is successfull. See ROOT::Math::SMatrix::InvertFast for the inversion algorithm
Invertion of a symmetric positive defined Matrix using Choleski decomposition. ( this method changes the current matrix). Return true if inversion is successfull. The method used is based on Choleski decomposition A compile error is given if the matrix is not of type symmetric and a run-time failure if the matrix is not positive defined. For solving a linear system, it is possible to use also the function ROOT::Math::SolveChol(matrix, vector) which will be faster than performing the inversion
Invert of a symmetric positive defined Matrix using Choleski decomposition. A compile error is given if the matrix is not of type symmetric and a run-time failure if the matrix is not positive defined. In case the inversion fails the current matrix is returned. \param ifail . ifail will be set to 0 when inversion is successfull. See ROOT::Math::SMatrix::InvertChol for the inversion algorithm
determinant of square Matrix via Dfact. Return true when the calculation is successfull. \param det will contain the calculated determinant value \b Note: this will destroy the contents of the Matrix!
determinant of square Matrix via Dfact. Return true when the calculation is successfull. \param det will contain the calculated determinant value \b Note: this will preserve the content of the Matrix!
return a full Matrix row as a vector (copy the content in a new vector)
return a full Matrix column as a vector (copy the content in a new vector)
return diagonal elements of a matrix as a Vector. It works only for squared matrices D1 == D2, otherwise it will produce a compile error
@name --- Other Functions --- Function to check if a matrix is sharing same memory location of the passed pointer This function is used by the expression templates to avoid the alias problem during expression evaluation. When the matrix is in use, for example in operations like A = B * A, a temporary object storing the intermediate result is automatically created when evaluating the expression.