SmallMatrix.h File Reference


Detailed Description

This file is the user-includeable header to be included in user programs to provide fixed-length Vec & Mat classes.

The included internal headers declare templates needed for zero-overhead handling of small vectors and matrices. The idea is to convey all needed information, including the size, at compile time through the templatized types. These classes have well-defined minimal storage layouts and can be easily interconverted to/from arrays of scalar types, with zero conversion overhead.

There are three generic types required: a column vector Vec, a row vector (a.k.a. "covector") Row, and a matrix Mat. Real and Complex elements at single, double, and quad precision are supported. Almost all operations are inline -- this package is intended to provide performance as good as one could achieve by special-purpose C code.

When the element type is a "basic numerical type" then the resulting Vec, Row or Mat is also a basic numerical type, so these can be built up with structured elements so that Vec< 2,Vec<3> > for example is a 2-element vector whose elements are Vec<3>'s.

These classes are designed so that many operations that look like computations are free. These include: negation, conjugation, extraction of real and imaginary parts from complex numerical types, and hermitian or positional transpose. These are performed by type casting rather than computation. That is, these operations can be viewed as a change in perspective rather than an actual computation.

To achieve zero overhead, separate types are needed to convey special matrix structure, although appropriate interconversions are defined. So symmetric matrices are SymMat's and diagonal matrices are DiagMat's. Note that symmetric matrices are more properly called Hermitian in that the reflected elements are conjugates of one another.

Supported operations

Class member functions for Vec<M>: Unary: -, +, ~ (Hermitian transpose) Assignment: copy assignment of identical object elementwise assignment from any M-row Vec or Mat scalar assignment to each element TODO

Global operations involving only Vecs or Vec and scalar, yielding a vector result. (Row has the same set.) v+s, s+v, v+v v-s, s-v, v-v v*s, s*v (can't multiply a vector by another vector) v/s v==s, s==v, v==v (same for !=)

Global operations mixing Row, Vec, Mat s=r*v (dot product) m=v*r (outer product) v=m*v, r=r*m m=m*m (with compatible dimensions)

#include "SimTKcommon/Scalar.h"
#include "SimTKcommon/internal/ResultType.h"
#include "SimTKcommon/internal/Vec.h"
#include "SimTKcommon/internal/Row.h"
#include "SimTKcommon/internal/Mat.h"
#include "SimTKcommon/internal/SymMat.h"
#include "SimTKcommon/internal/SmallMatrixMixed.h"

Go to the source code of this file.

Namespaces

namespace  SimTK

Typedefs

typedef Vec< 1 > SimTK::Vec1
typedef Vec< 2 > SimTK::Vec2
typedef Vec< 3 > SimTK::Vec3
typedef Vec< 4 > SimTK::Vec4
typedef Vec< 5 > SimTK::Vec5
typedef Vec< 6 > SimTK::Vec6
typedef Vec< 7 > SimTK::Vec7
typedef Vec< 8 > SimTK::Vec8
typedef Vec< 9 > SimTK::Vec9
typedef Row< 1 > SimTK::Row1
typedef Row< 2 > SimTK::Row2
typedef Row< 3 > SimTK::Row3
typedef Row< 4 > SimTK::Row4
typedef Row< 5 > SimTK::Row5
typedef Row< 6 > SimTK::Row6
typedef Row< 7 > SimTK::Row7
typedef Row< 8 > SimTK::Row8
typedef Row< 9 > SimTK::Row9
typedef SymMat< 1 > SimTK::SymMat11
typedef SymMat< 2 > SimTK::SymMat22
typedef SymMat< 3 > SimTK::SymMat33
typedef SymMat< 4 > SimTK::SymMat44
typedef SymMat< 5 > SimTK::SymMat55
typedef SymMat< 6 > SimTK::SymMat66
typedef SymMat< 7 > SimTK::SymMat77
typedef SymMat< 8 > SimTK::SymMat88
typedef SymMat< 9 > SimTK::SymMat99
typedef Mat< 1, 1 > SimTK::Mat11
typedef Mat< 1, 2 > SimTK::Mat12
typedef Mat< 1, 3 > SimTK::Mat13
typedef Mat< 1, 4 > SimTK::Mat14
typedef Mat< 1, 5 > SimTK::Mat15
typedef Mat< 1, 6 > SimTK::Mat16
typedef Mat< 1, 7 > SimTK::Mat17
typedef Mat< 1, 8 > SimTK::Mat18
typedef Mat< 1, 9 > SimTK::Mat19
typedef Mat< 2, 1 > SimTK::Mat21
typedef Mat< 2, 2 > SimTK::Mat22
typedef Mat< 2, 3 > SimTK::Mat23
typedef Mat< 2, 4 > SimTK::Mat24
typedef Mat< 2, 5 > SimTK::Mat25
typedef Mat< 2, 6 > SimTK::Mat26
typedef Mat< 2, 7 > SimTK::Mat27
typedef Mat< 2, 8 > SimTK::Mat28
typedef Mat< 2, 9 > SimTK::Mat29
typedef Mat< 3, 1 > SimTK::Mat31
typedef Mat< 3, 2 > SimTK::Mat32
typedef Mat< 3, 3 > SimTK::Mat33
typedef Mat< 3, 4 > SimTK::Mat34
typedef Mat< 3, 5 > SimTK::Mat35
typedef Mat< 3, 6 > SimTK::Mat36
typedef Mat< 3, 7 > SimTK::Mat37
typedef Mat< 3, 8 > SimTK::Mat38
typedef Mat< 3, 9 > SimTK::Mat39
typedef Mat< 4, 1 > SimTK::Mat41
typedef Mat< 4, 2 > SimTK::Mat42
typedef Mat< 4, 3 > SimTK::Mat43
typedef Mat< 4, 4 > SimTK::Mat44
typedef Mat< 4, 5 > SimTK::Mat45
typedef Mat< 4, 6 > SimTK::Mat46
typedef Mat< 4, 7 > SimTK::Mat47
typedef Mat< 4, 8 > SimTK::Mat48
typedef Mat< 4, 9 > SimTK::Mat49
typedef Mat< 5, 1 > SimTK::Mat51
typedef Mat< 5, 2 > SimTK::Mat52
typedef Mat< 5, 3 > SimTK::Mat53
typedef Mat< 5, 4 > SimTK::Mat54
typedef Mat< 5, 5 > SimTK::Mat55
typedef Mat< 5, 6 > SimTK::Mat56
typedef Mat< 5, 7 > SimTK::Mat57
typedef Mat< 5, 8 > SimTK::Mat58
typedef Mat< 5, 9 > SimTK::Mat59
typedef Mat< 6, 1 > SimTK::Mat61
typedef Mat< 6, 2 > SimTK::Mat62
typedef Mat< 6, 3 > SimTK::Mat63
typedef Mat< 6, 4 > SimTK::Mat64
typedef Mat< 6, 5 > SimTK::Mat65
typedef Mat< 6, 6 > SimTK::Mat66
typedef Mat< 6, 7 > SimTK::Mat67
typedef Mat< 6, 8 > SimTK::Mat68
typedef Mat< 6, 9 > SimTK::Mat69
typedef Mat< 7, 1 > SimTK::Mat71
typedef Mat< 7, 2 > SimTK::Mat72
typedef Mat< 7, 3 > SimTK::Mat73
typedef Mat< 7, 4 > SimTK::Mat74
typedef Mat< 7, 5 > SimTK::Mat75
typedef Mat< 7, 6 > SimTK::Mat76
typedef Mat< 7, 7 > SimTK::Mat77
typedef Mat< 7, 8 > SimTK::Mat78
typedef Mat< 7, 9 > SimTK::Mat79
typedef Mat< 8, 1 > SimTK::Mat81
typedef Mat< 8, 2 > SimTK::Mat82
typedef Mat< 8, 3 > SimTK::Mat83
typedef Mat< 8, 4 > SimTK::Mat84
typedef Mat< 8, 5 > SimTK::Mat85
typedef Mat< 8, 6 > SimTK::Mat86
typedef Mat< 8, 7 > SimTK::Mat87
typedef Mat< 8, 8 > SimTK::Mat88
typedef Mat< 8, 9 > SimTK::Mat89
typedef Mat< 9, 1 > SimTK::Mat91
typedef Mat< 9, 2 > SimTK::Mat92
typedef Mat< 9, 3 > SimTK::Mat93
typedef Mat< 9, 4 > SimTK::Mat94
typedef Mat< 9, 5 > SimTK::Mat95
typedef Mat< 9, 6 > SimTK::Mat96
typedef Mat< 9, 7 > SimTK::Mat97
typedef Mat< 9, 8 > SimTK::Mat98
typedef Mat< 9, 9 > SimTK::Mat99


Generated on Thu Feb 28 01:34:34 2008 for SimTKcommon by  doxygen 1.4.7