This C++ library is intended for scientists and engineers who need to manipulate a variety of types of matrices using standard matrix operations. Emphasis is on the kind of operations needed in statistical calculations such as least squares, linear equation solve and eigenvalues.

It supports matrix types: Matrix (rectangular matrix); UpperTriangularMatrix; LowerTriangularMatrix; DiagonalMatrix; SymmetricMatrix; BandMatrix; UpperBandMatrix; LowerBandMatrix; SymmetricBandMatrix; IdentityMatrix; RowVector; ColumnVector.

Only one element type (float or double) is supported.

The library includes the operations `*`, `+`, `-`,
`*=`, `+=`, `-=`, Kronecker product, Schur product, concatenation, inverse, transpose, conversion between types, submatrix,
determinant, Cholesky decomposition, QR triangularisation, singular value
decomposition, eigenvalues of a symmetric matrix, sorting, fast Fourier and
trig. transforms, printing and an interface with *Numerical Recipes in C*.

It is intended for matrices in the range 10 x 10 to the maximum size your machine will accommodate in a single array. The package works for very small matrices but becomes rather inefficient.

A *lazy evaluation* approach to evaluating matrix expressions is used
to improve efficiency and reduce use of temporary storage.

I have tested the library with Borland (Builder 6,8), Microsoft (VC++ 6,7,8), Open Watcom (1.7), Intel 11 on a PC; Gnu G++ (3.3), Sun C++ on a Sun and Gnu G++ (3.4,4.1) and Intel 10 C++ under Linux.

For more information look at the documentation pages - see links above.

I have assembled a short FAQ list for newmat which lists some problems users have encountered.