Matrix Library
1、简介
一个矩阵计算的库,有了它,你可以很简单地进行矩阵的计算,目前还有一些不完善的地方,还在继续开发。
项目主页git@github.com:libing64/Matrix.git
2、类声明文件
template
class Mat
{
public:
// Constructors 构造函数
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 复制函数
Mat (const Mat& m);
void clone ();
// Assignment operators
Mat& operator= (const Mat& 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 单目运算符
Mat operator+ () const { return *this; }
Mat operator- () const;
Mat operator~ () const;
Mat operator! () const;
// Computed assignment赋值计算
Mat& operator+= (const Mat& m);
Mat& operator-= (const Mat& m);
Mat& operator*= (const Mat& m);
Mat& operator/= (const Mat& m);
Mat& operator*= (const T& x);
Mat& 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& ri, T* pDet = NULL);
void lubksb (const valarray& ri, const valarray& v, valarray& s) const;
void lumpove (const Mat& ludm, const valarray& ri, const valarray& v, valarray& s) const;
bool solve_lu (const valarray& v, valarray& s) const { return solve( v, s); }
bool svd (Mat& vc, valarray& w);
void svbksb (const Mat& vc, const valarray& w, const valarray& b, valarray& x) const;
bool solve_sv (const valarray& v, valarray& s) const;
void qrd (Mat& r);
void qrbksb (const Mat& r, const valarray& v, valarray& s) const;
bool solve_qr (const valarray& v, valarray& s) const;
bool chold ();
void cholbksb (const valarray& v, valarray& s) const;
bool solve_chol (const valarray& v, valarray& s) const;
bool eigen (valarray& eival) const;
bool eigen (valarray& eival, Mat& eivec) const;
bool eigen (valarray& rev, valarray& iev) const;
bool eigen (valarray& rev, valarray& iev, Mat& eivec) const;
// Inversion TODO
bool inv ();
bool inv_lu ();
bool inv_sv ();
bool inv_qr ();
// Utility methods
bool solve (const valarray& v, valarray& s) const;
bool solve (const Mat& v, Mat& s) const;
Mat 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、重载运算符
/
// Non-member binary operators
//
template Mat operator+ (const Mat& m1, const Mat& m2);
template Mat operator- (const Mat& m1, const Mat& m2);
template Mat operator* (const Mat& m1, const Mat& m2);
template Mat operator* (const Mat& m, const T& el);
template Mat operator* (const T& el, const Mat& m);
template Mat operator/ (const Mat& m1, const Mat& m2);
template Mat operator/ (const Mat& m, const T& el);
template Mat operator/ (const T& el, const Mat& m);
template bool operator== (const Mat& m1, const Mat& m2);
template bool operator!= (const Mat& m1, const Mat& m2);
/
// Non-member functions
//
template Mat mpow (const Mat& m, size_t n);
template Mat mabs (const Mat& m);
template Mat mfloor (const Mat& m);
template Mat mceil (const Mat& m);
template void mswap (Mat& x, Mat& y);
//stream
template istream& operator>> (istream& is, Mat& m);
template ostream& operator<< (ostream &os, const Mat& m);
//epsilon
template T epsilon (const T& v);