EMatrix overloads the addition, subtraction and multiplication operators after the standard mathematical definitions, including scalar multiplication and the unary sign operators. Additional operator overloading extends the library compatibility to that of the Octave syntax as well as other matrix laboratories. The goal of the library is for the user to translate an equation like the following Kalman filter covariance update equation: into C++ of a similar form; e.g.,
P1 = a*P0*trans(a) - a*P0*trans(c)*inv(s)*c*P0*trans(a) + Sw;
EMatrix supports all C++ primitive types as well as the <complex> type from the C++ standard library. The library supports both C++ and FORTRAN indexing of matrices; i.e. A(1,2) == A. However, the memory storage of elements is row-wise as in C++. Calls to the Lapack library are transparent to the user and account for the differences in storage between C++ and FORTRAN either explicitly by transposing matrices when necessary or implicitly by solving a different algebraic problem that yields the desired solution.