矩阵计算库

Matrix Library

1、简介

一个矩阵计算的库,有了它,你可以很简单地进行矩阵的计算,目前还有一些不完善的地方,还在继续开发。

  • 采用范型设计,可以对多种数据类型支持
  • 对常用相关运算符进行重载

项目主页[email protected]: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);

你可能感兴趣的:(C)