Contributed by Kamel Derouiche via PR pkg/43741
Changes in this version:
It works with Borland Builder version 6, 8;
Microsoft Visual C++ 6,7,8; Open Watcom 1.7a;
Gnu version 3, 4 and Intel for Windows & Linux compilers 9, 10.
Options and work-arounds for older compilers are being removed.
You can enter values from an integer array with statements like
Matrix A(3,2); int a[] = { 11,12,21,22,31,33 }; A << a;
There is a new matrix type SquareMatrix. You can use this where
you know a matrix is square. The only place where the information
that a matrix is used is in the Kronecker product KP(A,B).
If A is band and B is any square matrix type (i.e. type SquareMatrix
or band, triangular, symmetric or diagonal) the result is band.
If B is type Matrix then the result is of type Matrix.
Apart from this it may be worth using the SquareMatrix type to
improve readability of a program and to make sure that a matrix
that is intended to be square really is square.
There is a new routine for carrying out cross products of
ColumnVectors or RowVectors of length 3 and new routines for
updating a triangular matrix derived from a Cholesky decomposition.
Interfacing with old C functions involving one and two
dimensional arrays is simplified.
Additional QR functions, extend_orthogonal function.
Lower-case versions of functions.
You can use the manipulators scientific and fixed in the matrix
output expressions.
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.
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.