Logo ROOT   6.10/00
Reference Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
math/smatrix/doc/Functions.md
Go to the documentation of this file.
1 \page MatVecFunctions Matrix and Vector Operators and Functions
2 
3 
4 ## Matrix and Vector Operators
5 
6 The ROOT::Math::SVector and ROOT::Math::SMatrix classes defines the following operators described below. The _m1,m2,m3_ are vectors or matrices of the same type (and size) and _a_ is a scalar value:
7 
8 ~~~ {.cpp}
9 m1 == m2 // returns whether m1 is equal to m2 (element by element comparison)
10 m1 != m2 // returns whether m1 is NOT equal to m2 (element by element comparison)
11 m1 < m2 // returns whether m1 is less than m2 (element wise comparison)
12 m1 > m2 // returns whether m1 is greater than m2 (element wise comparison)
13 // in the following m1 and m3 can be general and m2 symmetric, but not vice-versa
14 m1 += m2 // add m2 to m1
15 m1 -= m2 // subtract m2 to m1
16 m3 = m1 + m2 // addition
17 m1 - m2 // subtraction
18 
19 // Multiplication and division via a scalar value a
20 m3 = a*m1; m3 = m1*a; m3 = m1/a;
21 ~~~
22 
23 
24 ### Vector-Vector multiplication
25 
26 The _operator *_ defines an element by element multiplication between vectors. For the standard vector-vector multiplication, \f$ a = v^T v \f$, (dot product) one must use the ROOT::Math::Dot function. In addition, the Cross (only for vector sizes of 3), ROOT::Math::Cross, and the Tensor product, ROOT::Math::TensorProd, are defined.
27 
28 ### Matrix - Vector multiplication
29 
30 The _operator *_ defines the matrix-vector multiplication, \f$ y_i = \sum_{j} M_{ij} x_j\f$:
31 
32 ~~~ {.cpp}
33 // M is a N1xN2 matrix, x is a N2 size vector, y is a N1 size vector
34 y = M * x
35 ~~~
36 
37 
38 It compiles only if the matrix and the vectors have the right sizes.
39 **Matrix - Matrix multiplication** The _operator *_ defines the matrix-matrix multiplication, \f$ C_{ij} = \sum_{k} A_{ik} B_{kj}\f$:
40 
41 ~~~ {.cpp}
42 // A is a N1xN2 matrix, B is a N2xN3 matrix and C is a N1xN3 matrix
43 C = A * B
44 ~~~
45 
46 
47 The operation compiles only if the matrices have the right size. In the case that A and B are symmetric matrices, C is a general one, since their product is not guaranteed to be symmetric.
48 
49 ### Matrix and Vector Functions
50 
51 The most used matrix functions are:
52 
53 * **ROOT::Math::Transpose**(M) : return the transpose matrix, \f$ M^T \f$
54 * **ROOT::Math::Similarity**( v, M) : returns the scalar value resulting from the matrix- vector product \f$ v^T M v \f$
55 * **ROOT::Math::Similarity**( U, M) : returns the matrix resulting from the product \f$ U M U^T \f$. If M is symmetric, the returned resulting matrix is also symmetric
56 * **ROOT::Math::SimilarityT**( U, M) : returns the matrix resulting from the product \f$ U^T M U \f$. If M is symmetric, the returned resulting matrix is also symmetric
57 
58 See \ref MatrixFunctions for the documentation of all existing matrix functions in the package.
59 The major Vector functions are:
60 
61 * **ROOT::Math::Dot**( v1, v2) : returns the scalar value resulting from the vector dot product
62 * **ROOT::Math::Cross**( v1, v2) : returns the vector cross product for two vectors of size 3\. Note that the Cross product is not defined for other vector sizes
63 * **ROOT::Math::Unit**( v) : returns unit vector. One can use also the _v.Unit()_ method.
64 * **ROOT::Math::TensorProd**(v1,v2) : returns a general matrix M of size N1xN2 resulting from the [Tensor Product](http://en.wikipedia.org/wiki/Tensor_product) between the vector v1 of size N1) and v2 of size N2
65 
66 See \ref VectFunction for the list and documentation of all of them.
67 
68 ### Matrix and Vector I/O
69 
70 One can print (or write in an output stream) Vectors (and also Matrices) using the Print method or the << operator, like:
71 
72 ~~~ {.cpp}
73 v.Print(std::cout);
74 std::cout << v << std::endl;
75 ~~~
76 
77 
78 In the ROOT distribution, the CINT dictionary is generated for SMatrix and SVector for double types and sizes up to 5\. This allows the storage of them in a ROOT file.
79 
for(Int_t i=0;i< n;i++)
Definition: legend1.C:18
T Dot(const SVector< T, D > &lhs, const SVector< T, D > &rhs)
Vector dot product.
Definition: Functions.h:164
T Similarity(const SMatrix< T, D, D, R > &lhs, const SVector< T, D > &rhs)
Similarity Vector - Matrix Product: v^T * A * v returning a scalar value of type T ...
static Double_t Product(const Double_t *x, const Float_t *y)
Product.
Definition: TCTUB.cxx:102
static double B[]
double write(int n, const std::string &file_name, const std::string &vector_type, int compress=0)
writing
double T(double x)
Definition: ChebyshevPol.h:34
Expr< TransposeOp< SMatrix< T, D1, D2, R >, T, D1, D2 >, T, D2, D1, typename TranspPolicy< T, D1, D2, R >::RepType > Transpose(const SMatrix< T, D1, D2, R > &rhs)
Matrix Transpose B(i,j) = A(j,i) returning a matrix expression.
TArc * a
Definition: textangle.C:12
static double A[]
Double_t x[n]
Definition: legend1.C:17
SMatrix: a generic fixed size D1 x D2 Matrix class.
static double C[]
SVector< double, 2 > v
Definition: Dict.h:5
#define _(A, B)
Definition: cfortran.h:108
Expr< TensorMulOp< SVector< T, D1 >, SVector< T, D2 > >, T, D1, D2 > TensorProd(const SVector< T, D1 > &lhs, const SVector< T, D2 > &rhs)
Tensor Vector Product : M(i,j) = v(i) * v(j) returning a matrix expression.
SVector< T, 3 > Cross(const SVector< T, 3 > &lhs, const SVector< T, 3 > &rhs)
Vector Cross Product (only for 3-dim vectors) .
Definition: Functions.h:322
Double_t Dot(const TGLVector3 &v1, const TGLVector3 &v2)
Definition: TGLUtil.h:318
double f(double x)
void Print(std::ostream &os, const OptionType &opt)
int type
Definition: TGX11.cxx:120
Double_t y[n]
Definition: legend1.C:17
void Functions(TString type="Import")
Definition: Functions.C:32
SMatrix< T, D2, D2, MatRepSym< T, D2 > > SimilarityT(const SMatrix< T, D1, D2, R > &lhs, const SMatrix< T, D1, D1, MatRepSym< T, D1 > > &rhs)
Transpose Similarity Matrix Product : B = U^T * A * U for A symmetric returning a symmetric matrix ex...
TGLVector3 Cross(const TGLVector3 &v1, const TGLVector3 &v2)
Definition: TGLUtil.h:324
SVector< T, D > Unit(const SVector< T, D > &rhs)
Unit.
Definition: Functions.h:381
#define I(x, y, z)
SVector: a generic fixed size Vector class.