Matrix Package

Matrix Package
Philip J. Erdelsky
December 2, 1998
Public domain; no restrictions on use
Any C++ compiler that implements templates, exceptions and properties
A C++ package to perform basic matrix operations

This package performs all of the most common matrix operations for rather arbitrary matrices. The package is implemented as a template class, in which the type of the matrix elements is a parameter.

The file MATRIX.H includes the entire package. It must be included in, or copied into, any source file that uses the package.

To define a matrix, first choose a type for the matrix elements. Usually, this is float or double. It must be a type which implements the usual aritmetic operations: addition, subtraction, multiplication, division and comparison.

Then define a matrix type as follows:

     general form:  typedef matrix<T> mymatrix;

     example:       typedef matrix<float> mymatrix;

There are two constructors:

     mymatrix A(height, width);

     int height;     number of rows in matrix
     int width ;     number of columns in matrix

     mymatrix A(B);

     mymatrix B;     matrix to be copied into A

Notice that the dimensions of a matrix are determined when it is constructed and cannot be changed dynamically.

The usual matrix operations are implemented as overloaded operators:

     A + B
     A - B
     - A
     A * B
     x * B   x is a scalar of the same type as matrix elements
     A = B   assignment of matrices
     A == B  comparison of matrices

Other operations are as follows:

    A(i,j)       element in i-th row and j-th column of A, where
                 the upper left element is A(1,1)

    out << A     edit and send a matrix to an output stream

    in >> A      read a matrix from an input stream

A static function returns an identity matrix of the specified size:

    mymatrix::I(N)   returns N X N identity matrix

Both the input and output operations process the elements in lexicographical order, i.e., the order in which English text is usually read when the matrix elements are in their usual positions.

If there is an error, the package will throw an exception called mymatrix::exception, which has a member that explains the error. You can catch the exception as follows:

       matrix operations
     catch (mymatrix::exception &E)
       cout << E.message;

Expressions such as A.height, A.width, A.transpose and A.inverse are implemented as properties. If the C++ compiler does not support properties, slight changes will convert them to member functions.