📄 matrix.h
字号:
/// Make this refer to m. RefSymmSCMatrix(SymmSCMatrix *m); ~RefSymmSCMatrix(); /// Make this refer to m. RefSymmSCMatrix& operator=(SymmSCMatrix* m); /// Make this and m refer to the same matrix. RefSymmSCMatrix& operator=(const RefSymmSCMatrix& m); // matrix specific members public: /** Create a vector with dimension d by d. The data values are undefined. */ RefSymmSCMatrix(const RefSCDimension& d,const Ref<SCMatrixKit>&); /// Multiply this by a matrix and return a matrix. RefSCMatrix operator*(const RefSCMatrix&) const; RefSCMatrix operator*(const RefSymmSCMatrix&) const; /// Multiply this by a vector and return a vector. RefSCVector operator*(const RefSCVector&a) const; RefSymmSCMatrix operator*(double) const; /// Matrix addition and subtraction. RefSymmSCMatrix operator+(const RefSymmSCMatrix&) const; RefSymmSCMatrix operator-(const RefSymmSCMatrix&) const; /// Return the inverse of this. RefSymmSCMatrix i() const; /// Return the generalized inverse of this. RefSymmSCMatrix gi() const; /** These call the SCMatrix members of the same name after checking for references to 0. */ RefSymmSCMatrix clone() const; RefSymmSCMatrix copy() const; void set_element(int,int,double) const; void accumulate_element(int,int,double) const; double get_element(int,int) const; RefSCMatrix get_subblock(int br, int er, int bc, int ec); RefSymmSCMatrix get_subblock(int br, int er); void assign_subblock(const RefSCMatrix&, int br, int er, int bc, int ec); void assign_subblock(const RefSymmSCMatrix&, int br, int er); void accumulate_subblock(const RefSCMatrix&, int, int, int, int); void accumulate_subblock(const RefSymmSCMatrix&, int, int); RefSCVector get_row(int); void assign_row(const RefSCVector&, int); void accumulate_row(const RefSCVector&, int); void accumulate_symmetric_outer_product(const RefSCVector&) const; double scalar_product(const RefSCVector&) const; void accumulate_symmetric_product(const RefSCMatrix&) const; void accumulate_symmetric_sum(const RefSCMatrix&) const; /// Add a * b * a.t() to this. void accumulate_transform(const RefSCMatrix&a,const RefSymmSCMatrix&b, SCMatrix::Transform = SCMatrix::NormalTransform) const; void accumulate_transform(const RefSCMatrix&a,const RefDiagSCMatrix&b, SCMatrix::Transform = SCMatrix::NormalTransform) const; void accumulate_transform(const RefSymmSCMatrix&a, const RefSymmSCMatrix&b) const; void randomize() const; void assign(const RefSymmSCMatrix&) const; void scale(double) const; void assign(double) const; void assign(const double*) const; void assign(const double**) const; void convert(double*) const; void convert(double**) const; void accumulate(const RefSymmSCMatrix&) const; void element_op(const Ref<SCElementOp>&) const; void element_op(const Ref<SCElementOp2>&, const RefSymmSCMatrix&) const; void element_op(const Ref<SCElementOp3>&, const RefSymmSCMatrix&, const RefSymmSCMatrix&) const; double trace() const; int n() const; RefSCDimension dim() const; Ref<SCMatrixKit> kit() const; void print(std::ostream&) const; void print(const char*title=0, std::ostream&out=ExEnv::out0(), int =10) const; void save(StateOut&); void restore(StateIn&); /** Solves this x = v. Overwrites v with x. */ double solve_lin(const RefSCVector&) const; /// Returns the determinant of the referenced matrix. double determ() const; /// Returns the eigenvalues of the reference matrix. RefDiagSCMatrix eigvals() const; /// Returns the eigenvectors of the reference matrix. RefSCMatrix eigvecs() const; /** Sets eigvals to the eigenvalues and eigvecs to the eigenvalues and eigenvectors of the referenced matrix. */ void diagonalize(const RefDiagSCMatrix& eigvals, const RefSCMatrix& eigvecs) const; /// Assign and examine matrix elements. SymmSCMatrixdouble operator()(int i,int j) const; /** If this matrix is blocked return the number of blocks. * Otherwise return 1. */ int nblock() const; /** If this matrix is blocked return block i. * Otherwise return this as block 0. */ RefSymmSCMatrix block(int i) const;};/// Allow multiplication with a scalar on the left.RefSymmSCMatrix operator*(double,const RefSymmSCMatrix&);/** The RefDiagSCMatrix class is a smart pointer to an DiagSCMatrix specialization. */class RefDiagSCMatrix: public Ref<DiagSCMatrix> { // standard overrides public: /** Initializes the matrix pointer to 0. The reference must be initialized before it is used. */ RefDiagSCMatrix(); /// Make this and m refer to the same SCMatrix. RefDiagSCMatrix(const RefDiagSCMatrix& m); /// Make this refer to m. RefDiagSCMatrix(DiagSCMatrix *m); ~RefDiagSCMatrix(); /// Make this refer to m. RefDiagSCMatrix& operator=(DiagSCMatrix* m); /// Make this and m refer to the same matrix. RefDiagSCMatrix& operator=(const RefDiagSCMatrix & m); // matrix specific members public: /** Create a diagonal matrix with dimension d by d. The data values are undefined. */ RefDiagSCMatrix(const RefSCDimension&,const Ref<SCMatrixKit>&); /// Multiply this by a matrix and return a matrix. RefSCMatrix operator*(const RefSCMatrix&) const; RefDiagSCMatrix operator*(double) const; /// Matrix addition and subtraction. RefDiagSCMatrix operator+(const RefDiagSCMatrix&) const; RefDiagSCMatrix operator-(const RefDiagSCMatrix&) const; /// Return the inverse of this. RefDiagSCMatrix i() const; /// Return the generalized inverse of this. RefDiagSCMatrix gi() const; /// These call the SCMatrix members of the same name /// after checking for references to 0. RefDiagSCMatrix clone() const; RefDiagSCMatrix copy() const; void set_element(int,double) const; void accumulate_element(int,double) const; double get_element(int) const; void randomize() const; void assign(const RefDiagSCMatrix&) const; void scale(double) const; void assign(double) const; void assign(const double*) const; void convert(double*) const; void accumulate(const RefDiagSCMatrix&) const; void element_op(const Ref<SCElementOp>&) const; void element_op(const Ref<SCElementOp2>&, const RefDiagSCMatrix&) const; void element_op(const Ref<SCElementOp3>&, const RefDiagSCMatrix&, const RefDiagSCMatrix&) const; int n() const; RefSCDimension dim() const; Ref<SCMatrixKit> kit() const; double trace() const; void print(std::ostream&) const; void print(const char*title=0, std::ostream&out=ExEnv::out0(), int =10) const; void save(StateOut&); void restore(StateIn&); /// Returns the determinant of the referenced matrix. double determ() const; /// Assign and examine matrix elements. DiagSCMatrixdouble operator()(int i) const; /** If this matrix is blocked return the number of blocks. * Otherwise return 1. */ int nblock() const; /** If this matrix is blocked return block i. * Otherwise return this as block 0. */ RefDiagSCMatrix block(int i) const;};/// Allow multiplication with a scalar on the left.RefDiagSCMatrix operator*(double,const RefDiagSCMatrix&);class SCVectordouble { friend class RefSCVector; private: RefSCVector vector; int i; SCVectordouble(SCVector*,int); public: SCVectordouble(const SCVectordouble&); ~SCVectordouble(); double operator=(double a); double operator=(const SCVectordouble&); operator double(); double val() const;};class SCMatrixdouble { friend class RefSCMatrix; private: RefSCMatrix matrix; int i; int j; SCMatrixdouble(SCMatrix*,int,int); public: SCMatrixdouble(const SCMatrixdouble&); ~SCMatrixdouble(); double operator=(double a); double operator=(const SCMatrixdouble&); operator double(); double val() const;};class SymmSCMatrixdouble { friend class RefSymmSCMatrix; private: RefSymmSCMatrix matrix; int i; int j; SymmSCMatrixdouble(SymmSCMatrix*,int,int); public: SymmSCMatrixdouble(const SCMatrixdouble&); ~SymmSCMatrixdouble(); double operator=(double a); double operator=(const SymmSCMatrixdouble&); operator double(); double val() const;};class DiagSCMatrixdouble { friend class RefDiagSCMatrix; private: RefDiagSCMatrix matrix; int i; int j; DiagSCMatrixdouble(DiagSCMatrix*,int,int); public: DiagSCMatrixdouble(const SCMatrixdouble&); ~DiagSCMatrixdouble(); double operator=(double a); double operator=(const DiagSCMatrixdouble&); operator double(); double val() const;};}#ifdef INLINE_FUNCTIONS#include <math/scmat/matrix_i.h>#endif#endif// Local Variables:// mode: c++// c-file-style: "CLJ"// End:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -