Logo ROOT   6.08/07
Reference Guide
Matrix and Vector Operators and Functions

Matrix and Vector Operators

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:

m1 == m2           _// returns whether m1 is equal to m2 (element by element comparison)_ 
m1 != m2           _// returns whether m1 is NOT equal to m2 (element by element comparison)_ 
m1 < m2            _// returns whether m1 is less than m2 (element wise comparison)_
m1 > m2            _// returns whether m1 is greater than m2 (element wise comparison)_
_// in the following m1 and m3 can be general and m2 symmetric, but not vice-versa_
m1 += m2           _// add m2 to m1_
m1 -= m2           _// subtract m2 to m1_ 
m3 = m1 + m2       _// addition_ 
m1 - m2            _// subtraction_
_// Multiplication and division via a scalar value a_
m3 = a*m1; m3 = m1*a; m3 = m1/a;

Vector-Vector multiplication

The operator * defines an element by element multiplication between vectors. For the standard vector-vector multiplication, \( a = v^T v \), (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.

Matrix - Vector multiplication

The operator * defines the matrix-vector multiplication, \( y_i = \sum_{j} M_{ij} x_j\):

_// M is a  N1xN2 matrix, x is a N2 size vector, y is a N1 size vector_
y = M * x

It compiles only if the matrix and the vectors have the right sizes. Matrix - Matrix multiplication The operator * defines the matrix-matrix multiplication, \( C_{ij} = \sum_{k} A_{ik} B_{kj}\):

_// A is a N1xN2 matrix, B is a N2xN3 matrix and C is a N1xN3 matrix_
C = A * B

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.

Matrix and Vector Functions

The most used matrix functions are:

See Matrix Template Functions for the documentation of all existing matrix functions in the package. The major Vector functions are:

See Vector Template Functions for the list and documentation of all of them.

Matrix and Vector I/O

One can print (or write in an output stream) Vectors (and also Matrices) using the Print method or the << operator, like:

std::cout << v << std::endl;

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.