Matrix Library
1. Introduction
With a matrix computing library, you can easily perform matrix computing. There are still some imperfections that are still being developed.
The model design can support multiple data types.
Reload common Operators
2. Class declaration File
Template <class T> class Mat {public:
// Constructors constructor Mat (size_t nRow, size_t nCol );
Mat (size_t nRow, size_t nCol, const T & t );
Mat (size_t nRow, size_t nCol, const T * Array );
~ Mat ();
// Copy constructors Copy Function
Mat (const Mat <T> & m );
Void clone ();
// Assignment operators Mat <T> & operator = (const Mat <T> & m );
// Size size_t size () {return this-> nRow * this-> nCol ;}
Size_t typesize () {return sizeof (T );
} Size_t colsize () {return this-> nRow;
} // No. of elements in a column, I. e., it's row number
Size_t rowsize () {return this-> nCol ;}
// No. of elements in a row, I. e., it's column number
Size_t rowno () {return this-> nRow ;}
// No. of rows size_t colno () {return this-> nCol ;}
// No. of columns
Void resize (size_t nRow, size_t nCol, const T & dval = T (0 ));
Void free ();
Const T & operator () (size_t I, size_t j) const;
// Unary operators single object Operator
Mat <T> operator + () const {return * this ;}
Mat <T> operator-() const;
Mat <T> operator ~ () Const;
Mat <T> operator! () Const;
// Computed assignment value assignment Calculation
Mat <T> & operator + = (const Mat <T> & m );
Mat <T> & operator-= (const Mat <T> & m );
Mat <T> & operator * = (const Mat <T> & m );
Mat <T> & operator/= (const Mat <T> & m );
Mat <T> & operator * = (const T & x );
Mat <T> & operator/= (const T & x );
// Miscellaneous methods void null ();
Void unit (); void rand (int rmin =-1, int rmax = 1, int rseed = 0 );
T sum (); T min ();
T max ();
Bool lud (valarray <size_t> & ri, T * pDet = NULL );
Void lubksb (const valarray <size_t> & ri, const valarray <T> & v, valarray <T> & s) const;
Void lumpove (const Mat <T> & ludm, const valarray <size_t> & ri, const valarray <T> & v, valarray <T> & s) const;
Bool solve_lu (const valarray <T> & v, valarray <T> & s) const {return solve (v, s );}
Bool svd (Mat <T> & vc, valarray <T> & w );
Void svbksb (const Mat <T> & vc, const valarray <T> & w,
Const valarray <T> & B, valarray <T> & x) const;
Bool solve_sv (const valarray <T> & v, valarray <T> & s) const;
Void qrd (Mat <T> & r );
Void qrbksb (const Mat <T> & r, const valarray <T> & v, valarray <T> & s) const;
Bool solve_qr (const valarray <T> & v, valarray <T> & s) const;
Bool chold (); void cholbksb (const valarray <T> & v, valarray <T> & s) const;
Bool solve_chol (const valarray <T> & v, valarray <T> & s) const;
Bool eigen (valarray <T> & eival) const;
Bool eigen (valarray <T> & eival, Mat <T> & eivec) const;
Bool eigen (valarray <T> & rev, valarray <T> & iev) const;
Bool eigen (valarray <T> & rev, valarray <T> & iev, Mat <T> & eivec) const;
// Inversion TODO bool inv ();
Bool inv_lu ();
Bool inv_sv ();
Bool inv_qr ();
// Utility methods
Bool solve (const valarray <T> & v, valarray <T> & s) const;
Bool solve (const Mat <T> & v, Mat <T> & s) const;
Mat <T> adj () const;
T cofact (size_t row, size_t col) const;
T det () const; T cond () const;
Size_t rank () const; T norm1 () const;
T norm2 () const;
T normI () const;
T normF () const;
// Display void show ();
Int nRow;
Int nCol; T * data; private:}; 3. Overload Operators
/// // Non-member binary operators // template <class T> Mat <T> operator + (const Mat <T> & m1,
Const Mat <T> & m2 );
Template <class T> Mat <T> operator-(const Mat <T> & m1,
Const Mat <T> & m2 );
Template <class T> Mat <T> operator * (const Mat <T> & m1,
Const Mat <T> & m2); template <class T> Mat <T> operator * (const Mat <T> & m, const T & el); t
Emplate <class T> Mat <T> operator * (const T & el, const Mat <T> & m );
Template <class T> Mat <T> operator/(const Mat <T> & m1, const Mat <T> & m2 );
Template <class T> Mat <T> operator/(const Mat <T> & m, const T & el );
Template <class T> Mat <T> operator/(const T & el, const Mat <T> & m );
Template <class T> bool operator = (const Mat <T> & m1,
Const Mat <T> & m2 );
Template <class T> bool operator! = (Const Mat <T> & m1, const Mat <T> & m2 );
////// // Non-member functions // template <class T> Mat <T> mpow (const Mat <T> & m, size_t n );
Template <class T> Mat <T> mabs (const Mat <T> & m );
Template <class T> Mat <T> mfloor (const Mat <T> & m );
Template <class T> Mat <T> mceil (const Mat <T> & m );
Template <class T> void mswap (Mat <T> & x, Mat <T> & y );
// Streamtemplate <class T> istream & operator> (istream & is,
Mat <T> & m); template <class T> ostream & operator <(ostream & OS,
Const Mat <T> & m); // epsilontemplate <class T> T epsilon (const T & v );