00001
00002
00003 template<long m, long n> class dgematrix_small
00004 {
00005 public:
00006
00007
00008
00009 double array[m*n];
00010
00011
00012
00013
00014 inline dgematrix_small();
00015 inline explicit dgematrix_small(const dgematrix&);
00016 inline dgematrix_small(const double&);
00017 inline ~dgematrix_small();
00018
00019
00020
00021
00022
00023 inline _dgematrix to_dgematrix() const;
00024
00025
00026 inline double& operator()(const long& i, const long& j);
00027 inline double operator()(const long& i, const long& j) const;
00028 inline dgematrix_small<m,n>& set(const long& i, const long& j, const double& v);
00029 template<long _m, long _n> inline friend std::ostream& operator<<(std::ostream&, const dgematrix_small<_m,_n>&);
00030 inline void read(const char* filename);
00031 inline void write(const char* filename) const;
00032
00033
00034 template<long _m, long _n> inline friend dgematrix_small<n,m> t(const dgematrix_small<m,n>&);
00035
00036
00037 inline dgematrix_small<m,n>& zero();
00038 inline dgematrix_small<m,n>& identity();
00039 inline dcovector_small<m> col(const long& j) const;
00040 inline drovector_small<n> row(const long& i) const;
00041
00042
00043
00044
00045
00046 template<long M, long N> inline dgematrix_small<M,N>& operator= (const dgematrix_small<M,N>&);
00047
00048 template<long M, long N> inline friend dgematrix_small<M,N>& operator+=(dgematrix_small<M,N>&, const dgematrix_small<M,N>&);
00049
00050 template<long M, long N> inline friend dgematrix_small<M,N>& operator-=(dgematrix_small<M,N>&, const dgematrix_small<M,N>&);
00051
00052 template<long M, long L, long N> inline friend dgematrix_small<M,N>& operator*=(dgematrix_small<M,L>&, const dgematrix_small<L,N>&);
00053 template<long M, long N> inline friend dgematrix_small<M,N>& operator*=(dgematrix_small<M,N>&, const double&);
00054
00055 template<long M, long N> inline friend dgematrix_small<M,N>& operator/=(dgematrix_small<M,N>&, const double&);
00056
00057 template<long M, long N> inline friend const dgematrix_small<M,N>& operator+(const dgematrix_small<M,N>&);
00058 template<long M, long N> inline friend dgematrix_small<M,N> operator-(const dgematrix_small<M,N>&);
00059
00060 template<long M, long N> inline friend dgematrix_small<M,N> operator+(const dgematrix_small<M,N>&, const dgematrix_small<M,N>&);
00061 template<long M, long N> inline friend dgematrix_small<M,N> operator+(const dgematrix_small<M,N>&, const dsymatrix_small< N >&);
00062
00063 template<long M, long N> inline friend dgematrix_small<M,N> operator-(const dgematrix_small<M,N>&, const dgematrix_small<M,N>&);
00064 template<long M, long N> inline friend dgematrix_small<M,N> operator-(const dgematrix_small<M,N>&, const dsymatrix_small< N >&);
00065
00066 template<long M, long N> inline friend dcovector_small< M > operator*(const dgematrix_small<M,N>&, const dcovector_small< N >&);
00067 template<long M, long L, long N> inline friend dgematrix_small<M,N> operator*(const dgematrix_small<M,L>&, const dgematrix_small<L,N>&);
00068 template<long M, long N> inline friend dgematrix_small<M,N> operator*(const dgematrix_small<M,N>&, const dsymatrix_small< N >&);
00069 template<long M, long N> inline friend dgematrix_small<M,N> operator*(const dgematrix_small<M,N>&, const double&);
00070
00071 template<long M, long N> inline friend dgematrix_small<M,N> operator/(const dgematrix_small<M,N>&, const double&);
00072
00073 template<long M, long N> inline friend dgematrix_small<M,N> operator*(const double&, const dgematrix_small<M,N>&);
00074 };
00075
00076
00077
00078
00079
00080 inline double det(const dgemat2&);
00081 inline dgemat2 inv(const dgemat2&);
00082 inline dgemat2 rotate(const dgemat2&, const double&);
00083 inline dgemat2 t2m(const double&);
00084
00085 inline double det(const dgemat3&);
00086 inline dgemat3 inv(const dgemat3&);
00087 inline dgemat3 rotate(const dgemat3&, const dquater&);
00088 inline dquater m2q(const dgemat3&);