Template class of a symmetric matrix in the linear algebra package.
See MatrixPage for the documentation of the linear algebra package.
Note that in this implementation both matrix element m[i][j] and m[j][i] are updated and stored in memory . However, when making the object persistent only the upper right triangle is stored .
Definition at line 34 of file TMatrixTSym.h.
Public Types | |
enum | { kWorkMax = 100 } |
enum | EMatrixCreatorsOp1 { kZero, kUnit, kTransposed, kInverted, kAtA } |
enum | EMatrixCreatorsOp2 { kPlus, kMinus } |
Public Member Functions | |
TMatrixTSym () | |
TMatrixTSym (const TMatrixTSym< Element > &a, EMatrixCreatorsOp2 op, const TMatrixTSym< Element > &b) | |
TMatrixTSym (const TMatrixTSym< Element > &another) | |
template<class Element2 > | |
TMatrixTSym (const TMatrixTSym< Element2 > &another) | |
TMatrixTSym (const TMatrixTSymLazy< Element > &lazy_constructor) | |
TMatrixTSym (EMatrixCreatorsOp1 op, const TMatrixT< Element > &prototype) | |
TMatrixTSym (EMatrixCreatorsOp1 op, const TMatrixTSym< Element > &prototype) | |
Create a matrix applying a specific operation to the prototype. More... | |
TMatrixTSym (Int_t nrows) | |
TMatrixTSym (Int_t nrows, const Element *data, Option_t *option="") | |
option= More... | |
TMatrixTSym (Int_t row_lwb, Int_t row_upb) | |
TMatrixTSym (Int_t row_lwb, Int_t row_upb, const Element *data, Option_t *option="") | |
array elements are copied More... | |
virtual | ~TMatrixTSym () |
TMatrixTBase< Element > & | Apply (const TElementActionT< Element > &action) |
TMatrixTBase< Element > & | Apply (const TElementPosActionT< Element > &action) |
Apply action to each element of the matrix. More... | |
TClass * | Class () |
virtual void | Clear (Option_t *="") |
virtual Double_t | Determinant () const |
virtual void | Determinant (Double_t &d1, Double_t &d2) const |
const TMatrixT< Element > | EigenVectors (TVectorT< Element > &eigenValues) const |
Return a matrix containing the eigen-vectors ordered by descending eigen-values. More... | |
virtual Int_t * | GetColIndexArray () |
virtual const Int_t * | GetColIndexArray () const |
virtual Element * | GetMatrixArray () |
virtual const Element * | GetMatrixArray () const |
virtual Int_t * | GetRowIndexArray () |
virtual const Int_t * | GetRowIndexArray () const |
TMatrixTSym< Element > | GetSub (Int_t row_lwb, Int_t row_upb, Int_t col_lwb, Int_t col_upb, Option_t *option="S") const |
virtual TMatrixTBase< Element > & | GetSub (Int_t row_lwb, Int_t row_upb, Int_t col_lwb, Int_t col_upb, TMatrixTBase< Element > &target, Option_t *option="S") const |
Get submatrix [row_lwb..row_upb][col_lwb..col_upb]; The indexing range of the returned matrix depends on the argument option: More... | |
TMatrixTSym< Element > & | GetSub (Int_t row_lwb, Int_t row_upb, TMatrixTSym< Element > &target, Option_t *option="S") const |
Get submatrix [row_lwb..row_upb][row_lwb..row_upb]; The indexing range of the returned matrix depends on the argument option: More... | |
TMatrixTSym< Element > & | Invert (Double_t *det=0) |
Invert the matrix and calculate its determinant Notice that the LU decomposition is used instead of Bunch-Kaufman Bunch-Kaufman guarantees a symmetric inverted matrix but is slower than LU . More... | |
TMatrixTSym< Element > & | InvertFast (Double_t *det=0) |
Invert the matrix and calculate its determinant. More... | |
virtual Bool_t | IsSymmetric () const |
void | Minus (const TMatrixTSym< Element > &a, const TMatrixTSym< Element > &b) |
Symmetric matrix summation. Create a matrix C such that C = A + B. More... | |
void | Mult (const TMatrixTSym< Element > &a) |
Element & | operator() (Int_t rown, Int_t coln) |
Element | operator() (Int_t rown, Int_t coln) const |
TMatrixTSym< Element > & | operator*= (Element val) |
Multiply every element of the matrix with val. More... | |
TMatrixTSym & | operator+= (const TMatrixTSym &source) |
Add the source matrix. More... | |
TMatrixTSym< Element > & | operator+= (Element val) |
Add val to every element of the matrix. More... | |
TMatrixTSym & | operator-= (const TMatrixTSym &source) |
Subtract the source matrix. More... | |
TMatrixTSym< Element > & | operator-= (Element val) |
Subtract val from every element of the matrix. More... | |
TMatrixTSym< Element > & | operator= (const TMatrixTSym< Element > &source) |
template<class Element2 > | |
TMatrixTSym< Element > & | operator= (const TMatrixTSym< Element2 > &source) |
TMatrixTSym< Element > & | operator= (const TMatrixTSymLazy< Element > &source) |
TMatrixTSym< Element > & | operator= (Element val) |
Assign val to every element of the matrix. More... | |
TMatrixTRow< Element > | operator[] (Int_t rown) |
const TMatrixTRow_const< Element > | operator[] (Int_t rown) const |
void | Plus (const TMatrixTSym< Element > &a, const TMatrixTSym< Element > &b) |
Symmetric matrix summation. Create a matrix C such that C = A + B. More... | |
virtual TMatrixTBase< Element > & | Randomize (Element alpha, Element beta, Double_t &seed) |
randomize matrix element values but keep matrix symmetric More... | |
virtual TMatrixTSym< Element > & | RandomizePD (Element alpha, Element beta, Double_t &seed) |
randomize matrix element values but keep matrix symmetric positive definite More... | |
TMatrixTSym< Element > & | Rank1Update (const TVectorT< Element > &v, Element alpha=1.0) |
Perform a rank 1 operation on the matrix: A += alpha * v * v^T. More... | |
TMatrixTBase< Element > & | ResizeTo (const TMatrixTSym< Element > &m) |
virtual TMatrixTBase< Element > & | ResizeTo (Int_t nrows, Int_t ncols, Int_t=-1) |
Set size of the matrix to nrows x ncols New dynamic elements are created, the overlapping part of the old ones are copied to the new structures, then the old elements are deleted. More... | |
virtual TMatrixTBase< Element > & | ResizeTo (Int_t row_lwb, Int_t row_upb, Int_t col_lwb, Int_t col_upb, Int_t=-1) |
Set size of the matrix to [row_lwb:row_upb] x [col_lwb:col_upb] New dynamic elements are created, the overlapping part of the old ones are copied to the new structures, then the old elements are deleted. More... | |
virtual TMatrixTBase< Element > & | SetColIndexArray (Int_t *) |
virtual TMatrixTBase< Element > & | SetMatrixArray (const Element *data, Option_t *option="") |
virtual TMatrixTBase< Element > & | SetRowIndexArray (Int_t *) |
TMatrixTSym< Element > & | SetSub (Int_t row_lwb, const TMatrixTBase< Element > &source) |
Insert matrix source starting at [row_lwb][row_lwb], thereby overwriting the part [row_lwb..row_lwb+nrows_source][row_lwb..row_lwb+nrows_source];. More... | |
virtual TMatrixTBase< Element > & | SetSub (Int_t row_lwb, Int_t col_lwb, const TMatrixTBase< Element > &source) |
Insert matrix source starting at [row_lwb][col_lwb] in a symmetric fashion, thereby overwriting the part [row_lwb..row_lwb+nrows_source][row_lwb..row_lwb+nrows_source];. More... | |
virtual TMatrixTBase< Element > & | Shift (Int_t row_shift, Int_t col_shift) |
TMatrixTSym< Element > & | Similarity (const TMatrixT< Element > &n) |
Calculate B * (*this) * B^T , final matrix will be (nrowsb x nrowsb) This is a similarity transform when B is orthogonal . More... | |
TMatrixTSym< Element > & | Similarity (const TMatrixTSym< Element > &n) |
Calculate B * (*this) * B^T , final matrix will be (nrowsb x nrowsb) This is a similarity transform when B is orthogonal . More... | |
Element | Similarity (const TVectorT< Element > &v) const |
Calculate scalar v * (*this) * v^T. More... | |
TMatrixTSym< Element > & | SimilarityT (const TMatrixT< Element > &n) |
Calculate B^T * (*this) * B , final matrix will be (ncolsb x ncolsb) It is more efficient than applying the actual multiplication because this routine realizes that the final matrix is symmetric . More... | |
TMatrixTSym< Element > & | T () |
void | TMult (const TMatrixT< Element > &a) |
Create a matrix C such that C = A' * A. More... | |
void | TMult (const TMatrixTSym< Element > &a) |
Matrix multiplication, with A symmetric Create a matrix C such that C = A' * A = A * A = A * A'. More... | |
TMatrixTSym< Element > & | Transpose (const TMatrixTSym< Element > &source) |
Transpose a matrix. More... | |
const TMatrixTSym< Element > & | Use (const TMatrixTSym< Element > &a) const |
const TMatrixTSym< Element > & | Use (Int_t nrows, const Element *data) const |
TMatrixTSym< Element > & | Use (Int_t nrows, Element *data) |
const TMatrixTSym< Element > & | Use (Int_t row_lwb, Int_t row_upb, const Element *data) const |
TMatrixTSym< Element > & | Use (Int_t row_lwb, Int_t row_upb, Element *data) |
TMatrixTSym< Element > & | Use (TMatrixTSym< Element > &a) |
Protected Member Functions | |
void | Allocate (Int_t nrows, Int_t ncols, Int_t row_lwb=0, Int_t col_lwb=0, Int_t init=0, Int_t=-1) |
Allocate new matrix. More... | |
void | Delete_m (Int_t size, Element *&) |
delete data pointer m, if it was assigned on the heap More... | |
Int_t | Memcpy_m (Element *newp, const Element *oldp, Int_t copySize, Int_t newSize, Int_t oldSize) |
copy copySize doubles from *oldp to *newp . More... | |
Element * | New_m (Int_t size) |
return data pointer . More... | |
Protected Attributes | |
Element | fDataStack [TMatrixTBase< Element >::kSizeMax] |
Element * | fElements |
data container More... | |
#include <TMatrixTSym.h>
anonymous enum |
Enumerator | |
---|---|
kWorkMax |
Definition at line 50 of file TMatrixTSym.h.
enum TMatrixTSym::EMatrixCreatorsOp1 |
Enumerator | |
---|---|
kZero | |
kUnit | |
kTransposed | |
kInverted | |
kAtA |
Definition at line 51 of file TMatrixTSym.h.
enum TMatrixTSym::EMatrixCreatorsOp2 |
Enumerator | |
---|---|
kPlus | |
kMinus |
Definition at line 52 of file TMatrixTSym.h.
|
inline |
Definition at line 54 of file TMatrixTSym.h.
|
explicit |
Definition at line 41 of file TMatrixTSym.cxx.
TMatrixTSym< Element >::TMatrixTSym | ( | Int_t | row_lwb, |
Int_t | row_upb | ||
) |
Definition at line 49 of file TMatrixTSym.cxx.
TMatrixTSym< Element >::TMatrixTSym | ( | Int_t | no_rows, |
const Element * | elements, | ||
Option_t * | option = "" |
||
) |
option=
array elements are copied
Definition at line 65 of file TMatrixTSym.cxx.
TMatrixTSym< Element >::TMatrixTSym | ( | Int_t | row_lwb, |
Int_t | row_upb, | ||
const Element * | data, | ||
Option_t * | option = "" |
||
) |
array elements are copied
Definition at line 78 of file TMatrixTSym.cxx.
TMatrixTSym< Element >::TMatrixTSym | ( | const TMatrixTSym< Element > & | another | ) |
Definition at line 91 of file TMatrixTSym.cxx.
|
inline |
Definition at line 60 of file TMatrixTSym.h.
TMatrixTSym< Element >::TMatrixTSym | ( | EMatrixCreatorsOp1 | op, |
const TMatrixTSym< Element > & | prototype | ||
) |
Create a matrix applying a specific operation to the prototype.
Example: TMatrixTSym<Element> a(10,12); ...; TMatrixTSym<Element> b(TMatrixT::kTransposed, a); Supported operations are: kZero, kUnit, kTransposed, kInverted and kAtA.
Definition at line 104 of file TMatrixTSym.cxx.
TMatrixTSym< Element >::TMatrixTSym | ( | EMatrixCreatorsOp1 | op, |
const TMatrixT< Element > & | prototype | ||
) |
Definition at line 153 of file TMatrixTSym.cxx.
TMatrixTSym< Element >::TMatrixTSym | ( | const TMatrixTSym< Element > & | a, |
EMatrixCreatorsOp2 | op, | ||
const TMatrixTSym< Element > & | b | ||
) |
Definition at line 172 of file TMatrixTSym.cxx.
TMatrixTSym< Element >::TMatrixTSym | ( | const TMatrixTSymLazy< Element > & | lazy_constructor | ) |
Definition at line 200 of file TMatrixTSym.cxx.
|
inlinevirtual |
Definition at line 72 of file TMatrixTSym.h.
|
protected |
Allocate new matrix.
Arguments are number of rows, columns, row lowerbound (0 default) and column lowerbound (0 default).
Definition at line 274 of file TMatrixTSym.cxx.
TMatrixTBase< Element > & TMatrixTSym< Element >::Apply | ( | const TElementActionT< Element > & | action | ) |
Definition at line 1553 of file TMatrixTSym.cxx.
TMatrixTBase< Element > & TMatrixTSym< Element >::Apply | ( | const TElementPosActionT< Element > & | action | ) |
Apply action to each element of the matrix.
To action the location of the current element is passed.
Definition at line 1580 of file TMatrixTSym.cxx.
TClass * TMatrixTSym< double >::Class | ( | ) |
|
inlinevirtual |
Definition at line 92 of file TMatrixTSym.h.
|
protected |
delete data pointer m, if it was assigned on the heap
Definition at line 215 of file TMatrixTSym.cxx.
|
virtual |
Definition at line 935 of file TMatrixTSym.cxx.
|
virtual |
Definition at line 947 of file TMatrixTSym.cxx.
const TMatrixT< Element > TMatrixTSym< Element >::EigenVectors | ( | TVectorT< Element > & | eigenValues | ) | const |
Return a matrix containing the eigen-vectors ordered by descending eigen-values.
For full functionality use TMatrixDSymEigen .
Definition at line 1681 of file TMatrixTSym.cxx.
|
inlinevirtual |
Definition at line 87 of file TMatrixTSym.h.
|
inlinevirtual |
Definition at line 86 of file TMatrixTSym.h.
|
inlinevirtual |
Definition at line 190 of file TMatrixTSym.h.
|
inlinevirtual |
Definition at line 189 of file TMatrixTSym.h.
|
inlinevirtual |
Definition at line 85 of file TMatrixTSym.h.
|
inlinevirtual |
Definition at line 84 of file TMatrixTSym.h.
|
inline |
Definition at line 200 of file TMatrixTSym.h.
|
virtual |
Get submatrix [row_lwb..row_upb][col_lwb..col_upb]; The indexing range of the returned matrix depends on the argument option:
option == "S" : return [0..row_upb-row_lwb+1][0..col_upb-col_lwb+1] (default) else : return [row_lwb..row_upb][col_lwb..col_upb]
Definition at line 569 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::GetSub | ( | Int_t | row_lwb, |
Int_t | row_upb, | ||
TMatrixTSym< Element > & | target, | ||
Option_t * | option = "S" |
||
) | const |
Get submatrix [row_lwb..row_upb][row_lwb..row_upb]; The indexing range of the returned matrix depends on the argument option:
option == "S" : return [0..row_upb-row_lwb+1][0..row_upb-row_lwb+1] (default) else : return [row_lwb..row_upb][row_lwb..row_upb]
Definition at line 503 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::Invert | ( | Double_t * | det = 0 | ) |
Invert the matrix and calculate its determinant Notice that the LU decomposition is used instead of Bunch-Kaufman Bunch-Kaufman guarantees a symmetric inverted matrix but is slower than LU .
The user can access Bunch-Kaufman through the TDecompBK class .
Definition at line 961 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::InvertFast | ( | Double_t * | det = 0 | ) |
Invert the matrix and calculate its determinant.
Definition at line 979 of file TMatrixTSym.cxx.
|
inlinevirtual |
Definition at line 95 of file TMatrixTSym.h.
|
protected |
copy copySize doubles from *oldp to *newp .
However take care of the situation where both pointers are assigned to the same stack space
Definition at line 247 of file TMatrixTSym.cxx.
void TMatrixTSym< Element >::Minus | ( | const TMatrixTSym< Element > & | a, |
const TMatrixTSym< Element > & | b | ||
) |
Symmetric matrix summation. Create a matrix C such that C = A + B.
Definition at line 346 of file TMatrixTSym.cxx.
|
inline |
Definition at line 77 of file TMatrixTSym.h.
|
protected |
return data pointer .
if requested size <= kSizeMax, assign pointer to the stack space
Definition at line 229 of file TMatrixTSym.cxx.
|
inline |
Definition at line 224 of file TMatrixTSym.h.
|
inline |
Definition at line 208 of file TMatrixTSym.h.
TMatrixTSym< Element > & TMatrixTSym< Element >::operator*= | ( | Element | val | ) |
Multiply every element of the matrix with val.
Definition at line 1498 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::operator+= | ( | const TMatrixTSym< Element > & | source | ) |
Add the source matrix.
Definition at line 1514 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::operator+= | ( | Element | val | ) |
Add val to every element of the matrix.
Definition at line 1466 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::operator-= | ( | const TMatrixTSym< Element > & | source | ) |
Subtract the source matrix.
Definition at line 1534 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::operator-= | ( | Element | val | ) |
Subtract val from every element of the matrix.
Definition at line 1482 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::operator= | ( | const TMatrixTSym< Element > & | source | ) |
Definition at line 1414 of file TMatrixTSym.cxx.
|
inline |
Definition at line 144 of file TMatrixTSym.h.
TMatrixTSym< Element > & TMatrixTSym< Element >::operator= | ( | const TMatrixTSymLazy< Element > & | source | ) |
Definition at line 1431 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::operator= | ( | Element | val | ) |
Assign val to every element of the matrix.
Definition at line 1450 of file TMatrixTSym.cxx.
|
inline |
Definition at line 140 of file TMatrixTSym.h.
|
inline |
Definition at line 139 of file TMatrixTSym.h.
void TMatrixTSym< Element >::Plus | ( | const TMatrixTSym< Element > & | a, |
const TMatrixTSym< Element > & | b | ||
) |
Symmetric matrix summation. Create a matrix C such that C = A + B.
Definition at line 312 of file TMatrixTSym.cxx.
|
virtual |
randomize matrix element values but keep matrix symmetric
Definition at line 1608 of file TMatrixTSym.cxx.
|
virtual |
randomize matrix element values but keep matrix symmetric positive definite
Definition at line 1639 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::Rank1Update | ( | const TVectorT< Element > & | v, |
Element | alpha = 1.0 |
||
) |
Perform a rank 1 operation on the matrix: A += alpha * v * v^T.
Definition at line 1063 of file TMatrixTSym.cxx.
|
inline |
Definition at line 118 of file TMatrixTSym.h.
|
virtual |
Set size of the matrix to nrows x ncols New dynamic elements are created, the overlapping part of the old ones are copied to the new structures, then the old elements are deleted.
Definition at line 771 of file TMatrixTSym.cxx.
|
virtual |
Set size of the matrix to [row_lwb:row_upb] x [col_lwb:col_upb] New dynamic elements are created, the overlapping part of the old ones are copied to the new structures, then the old elements are deleted.
Definition at line 841 of file TMatrixTSym.cxx.
|
inlinevirtual |
Definition at line 90 of file TMatrixTSym.h.
|
virtual |
Definition at line 743 of file TMatrixTSym.cxx.
|
inlinevirtual |
Definition at line 89 of file TMatrixTSym.h.
TMatrixTSym< Element > & TMatrixTSym< Element >::SetSub | ( | Int_t | row_lwb, |
const TMatrixTBase< Element > & | source | ||
) |
Insert matrix source starting at [row_lwb][row_lwb], thereby overwriting the part [row_lwb..row_lwb+nrows_source][row_lwb..row_lwb+nrows_source];.
Definition at line 636 of file TMatrixTSym.cxx.
|
virtual |
Insert matrix source starting at [row_lwb][col_lwb] in a symmetric fashion, thereby overwriting the part [row_lwb..row_lwb+nrows_source][row_lwb..row_lwb+nrows_source];.
Definition at line 686 of file TMatrixTSym.cxx.
|
virtual |
Definition at line 756 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::Similarity | ( | const TMatrixT< Element > & | b | ) |
Calculate B * (*this) * B^T , final matrix will be (nrowsb x nrowsb) This is a similarity transform when B is orthogonal .
It is more efficient than applying the actual multiplication because this routine realizes that the final matrix is symmetric .
Definition at line 1099 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::Similarity | ( | const TMatrixTSym< Element > & | b | ) |
Calculate B * (*this) * B^T , final matrix will be (nrowsb x nrowsb) This is a similarity transform when B is orthogonal .
It is more efficient than applying the actual multiplication because this routine realizes that the final matrix is symmetric .
Definition at line 1190 of file TMatrixTSym.cxx.
Element TMatrixTSym< Element >::Similarity | ( | const TVectorT< Element > & | v | ) | const |
Calculate scalar v * (*this) * v^T.
Definition at line 1292 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::SimilarityT | ( | const TMatrixT< Element > & | n | ) |
Calculate B^T * (*this) * B , final matrix will be (ncolsb x ncolsb) It is more efficient than applying the actual multiplication because this routine realizes that the final matrix is symmetric .
Definition at line 1327 of file TMatrixTSym.cxx.
|
inline |
Definition at line 127 of file TMatrixTSym.h.
void TMatrixTSym< Element >::TMult | ( | const TMatrixT< Element > & | a | ) |
Create a matrix C such that C = A' * A.
In other words, c[i,j] = SUM{ a[k,i] * a[k,j] }.
Definition at line 381 of file TMatrixTSym.cxx.
void TMatrixTSym< Element >::TMult | ( | const TMatrixTSym< Element > & | a | ) |
Matrix multiplication, with A symmetric Create a matrix C such that C = A' * A = A * A = A * A'.
Definition at line 429 of file TMatrixTSym.cxx.
TMatrixTSym< Element > & TMatrixTSym< Element >::Transpose | ( | const TMatrixTSym< Element > & | source | ) |
Transpose a matrix.
Definition at line 1041 of file TMatrixTSym.cxx.
|
inline |
Definition at line 197 of file TMatrixTSym.h.
|
inline |
Definition at line 193 of file TMatrixTSym.h.
|
inline |
Definition at line 192 of file TMatrixTSym.h.
|
inline |
Definition at line 98 of file TMatrixTSym.h.
TMatrixTSym< Element > & TMatrixTSym< Element >::Use | ( | Int_t | row_lwb, |
Int_t | row_upb, | ||
Element * | data | ||
) |
Definition at line 475 of file TMatrixTSym.cxx.
|
inline |
Definition at line 195 of file TMatrixTSym.h.
|
protected |
Definition at line 38 of file TMatrixTSym.h.
|
protected |
data container
Definition at line 39 of file TMatrixTSym.h.