matrix< T, Shape = rectangle<>, Storage = dense<>, Orientation = row_major > Programmers Guide Contents | Index |  Search

Category:containers,generators Component type:type
Description
Matrices that occur in real engineering and scientific applications often have special structure, especially in terms of how many zeros are in the matrix, and where the non-zeros are located in the matrix. This means that space and time saving can be acheived by using various types of compressed storage. There are a multitude of matrix storage formats in use today, and the MTL tries to support many of the more common storage formats. The following discussion will describe how the user of MTL can select the type of matrix he or she wishes to use. To create a MTL matrix, one first needs to construct the appropriate matrix type. This is done using the matrix type generation class, which is easier to think of as a function. It takes as input the characteristics of the matrix type that you want and then returns the appropriate MTL matrix. The matrix type generators ``function'' has defaults defined, so in order to create a normal rectangular matrix type, one merely does the following:
``` typedef matrix< double >::type MyMatrix;
MyMatrix A(M, N);
```
The matrix type generators can take up to four arguments, the element type, the matrix shape, the storage format, and the orientation. The following is the ``prototype'' for the matrix type generators.
``` matrix< EltType, Shape, Storage, Orientation >::type
```
This type of "generative" interface technique was developed by by Krzysztof Czarnecki and Ulrich Eisenecker in their work on the Generative Matrix Computation Library.

*Storage can be made external by specifying such in the storage parameter. eg. dense<external>, packed<external>.

Example
Definition
matrix.h
Template Parameters

ParameterDescriptionDefault
EltTypeValid choices for this argument include double, complex, and bool. In essence, any builtin or user defined type can be used for the EltType, however, if one uses the matrix with a particular algorithm, the EltType must support the operations required by the algorithm. For MTL algorithms these typically include the usual numerical operators such as addition and multiplication. The std::complex class is a good example of what is required in a numerical type. The documentation for each algorithm will include the requirements on the element type.
ShapeThis argument specifies the general positioning of the non zero elements in the matrix, but does not specify the actual storage format. In addition it specifies certain properties such as symmetry. The choices for this argument include rectangle, banded, diagonal, triangle, and symmetric. Hermitian is not yet implemented.
StorageThe argument specifies the storage scheme used to lay out the matrix elements (and sometimes the element indices) in memory. The storage formats include dense , banded, packed , banded_view, compressed, envelope, and array.
OrientationThe storage order for an MTL matrix can either be row_major or column_major.
Model of
Members
Member Where defined Description
enum { Shape_id = Shape::id, Shape_M = Shape::M, Shape_N = Shape::N }
type   The generated type
New members
Notes