Matrix computing Library

Source: Internet
Author: User

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 );

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.