📄 newmat.h
字号:
virtual Real SumAbsoluteValue() const; virtual Real Sum() const; virtual Real MaximumAbsoluteValue() const; virtual Real MaximumAbsoluteValue1(int& i) const; virtual Real MaximumAbsoluteValue2(int& i, int& j) const; virtual Real MinimumAbsoluteValue() const; virtual Real MinimumAbsoluteValue1(int& i) const; virtual Real MinimumAbsoluteValue2(int& i, int& j) const; virtual Real Maximum() const; virtual Real Maximum1(int& i) const; virtual Real Maximum2(int& i, int& j) const; virtual Real Minimum() const; virtual Real Minimum1(int& i) const; virtual Real Minimum2(int& i, int& j) const; virtual Real Trace() const; Real Norm1() const; Real NormInfinity() const; virtual MatrixBandWidth BandWidth() const; // bandwidths of band matrix virtual void CleanUp() {} // to clear store void IEQND() const; // called by ineq. ops// virtual ReturnMatrix Reverse() const; // reverse order of elements//protected:// BaseMatrix() : t(this), i(this) {} friend class GeneralMatrix; friend class Matrix; friend class nricMatrix; friend class RowVector; friend class ColumnVector; friend class SymmetricMatrix; friend class UpperTriangularMatrix; friend class LowerTriangularMatrix; friend class DiagonalMatrix; friend class CroutMatrix; friend class BandMatrix; friend class LowerBandMatrix; friend class UpperBandMatrix; friend class SymmetricBandMatrix; friend class AddedMatrix; friend class MultipliedMatrix; friend class SubtractedMatrix; friend class SPMatrix; friend class ConcatenatedMatrix; friend class StackedMatrix; friend class SolvedMatrix; friend class ShiftedMatrix; friend class NegShiftedMatrix; friend class ScaledMatrix; friend class TransposedMatrix; friend class ReversedMatrix; friend class NegatedMatrix; friend class InvertedMatrix; friend class RowedMatrix; friend class ColedMatrix; friend class DiagedMatrix; friend class MatedMatrix; friend class GetSubMatrix; friend class ReturnMatrixX; friend class LinearEquationSolver; friend class GenericMatrix; NEW_DELETE(BaseMatrix)};// ***************************** working classes **************************/class GeneralMatrix : public BaseMatrix // declarable matrix types{ virtual GeneralMatrix* Image() const; // copy of matrixprotected: int tag; // shows whether can reuse int nrows, ncols; // dimensions int storage; // total store required Real* store; // point to store (0=not set) GeneralMatrix(); // initialise with no store GeneralMatrix(ArrayLengthSpecifier); // constructor getting store void Add(GeneralMatrix*, Real); // sum of GM and Real void Add(Real); // add Real to this void NegAdd(GeneralMatrix*, Real); // Real - GM void NegAdd(Real); // this = this - Real void Multiply(GeneralMatrix*, Real); // product of GM and Real void Multiply(Real); // multiply this by Real void Negate(GeneralMatrix*); // change sign void Negate(); // change sign void ReverseElements(); // internal reverse of elements void ReverseElements(GeneralMatrix*); // reverse order of elements void operator=(Real); // set matrix to constant Real* GetStore(); // get store or copy GeneralMatrix* BorrowStore(GeneralMatrix*, MatrixType); // temporarily access store void GetMatrix(const GeneralMatrix*); // used by = and initialise void Eq(const BaseMatrix&, MatrixType); // used by = void Eq(const BaseMatrix&, MatrixType, bool);// used by << void Eq2(const BaseMatrix&, MatrixType); // cut down version of Eq int search(const BaseMatrix*) const; virtual GeneralMatrix* Transpose(TransposedMatrix*, MatrixType); void CheckConversion(const BaseMatrix&); // check conversion OK void ReSize(int, int, int); // change dimensionspublic: GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); virtual MatrixType Type() const = 0; // type of a matrix int Nrows() const { return nrows; } // get dimensions int Ncols() const { return ncols; } int Storage() const { return storage; } Real* Store() const { return store; } virtual ~GeneralMatrix(); // delete store if set void tDelete(); // delete if tag permits bool reuse(); // true if tag allows reuse void Protect() { tag=-1; } // cannot delete or reuse int Tag() const { return tag; } bool IsZero() const; // test matrix has all zeros void Release() { tag=1; } // del store after next use void Release(int t) { tag=t; } // del store after t accesses void ReleaseAndDelete() { tag=0; } // delete matrix after use void operator<<(const Real*); // assignment from an array void operator<<(const BaseMatrix& X) { Eq(X,this->Type(),true); } // = without checking type void Inject(const GeneralMatrix&); // copy stored els only void operator+=(const BaseMatrix&); void operator-=(const BaseMatrix&); void operator*=(const BaseMatrix&); void operator|=(const BaseMatrix&); void operator&=(const BaseMatrix&); void operator+=(Real); void operator-=(Real r) { operator+=(-r); } void operator*=(Real); void operator/=(Real r) { operator*=(1.0/r); } virtual GeneralMatrix* MakeSolver(); // for solving virtual void Solver(MatrixColX&, const MatrixColX&) {} virtual void GetRow(MatrixRowCol&) = 0; // Get matrix row virtual void RestoreRow(MatrixRowCol&) {} // Restore matrix row virtual void NextRow(MatrixRowCol&); // Go to next row virtual void GetCol(MatrixRowCol&) = 0; // Get matrix col virtual void GetCol(MatrixColX&) = 0; // Get matrix col virtual void RestoreCol(MatrixRowCol&) {} // Restore matrix col virtual void RestoreCol(MatrixColX&) {} // Restore matrix col virtual void NextCol(MatrixRowCol&); // Go to next col virtual void NextCol(MatrixColX&); // Go to next col Real SumSquare() const; Real SumAbsoluteValue() const; Real Sum() const; Real MaximumAbsoluteValue1(int& i) const; Real MinimumAbsoluteValue1(int& i) const; Real Maximum1(int& i) const; Real Minimum1(int& i) const; Real MaximumAbsoluteValue() const; Real MaximumAbsoluteValue2(int& i, int& j) const; Real MinimumAbsoluteValue() const; Real MinimumAbsoluteValue2(int& i, int& j) const; Real Maximum() const; Real Maximum2(int& i, int& j) const; Real Minimum() const; Real Minimum2(int& i, int& j) const; LogAndSign LogDeterminant() const; virtual bool IsEqual(const GeneralMatrix&) const; // same type, same values void CheckStore() const; // check store is non-zero virtual void SetParameters(const GeneralMatrix*) {} // set parameters in GetMatrix operator ReturnMatrix() const; // for building a ReturnMatrix ReturnMatrix ForReturn() const; virtual bool SameStorageType(const GeneralMatrix& A) const; virtual void ReSizeForAdd(const GeneralMatrix& A, const GeneralMatrix& B); virtual void ReSizeForSP(const GeneralMatrix& A, const GeneralMatrix& B); virtual void ReSize(const GeneralMatrix& A); MatrixInput operator<<(Real); // for loading a list// ReturnMatrix Reverse() const; // reverse order of elements void CleanUp(); // to clear store friend class Matrix; friend class nricMatrix; friend class SymmetricMatrix; friend class UpperTriangularMatrix; friend class LowerTriangularMatrix; friend class DiagonalMatrix; friend class CroutMatrix; friend class RowVector; friend class ColumnVector; friend class BandMatrix; friend class LowerBandMatrix; friend class UpperBandMatrix; friend class SymmetricBandMatrix; friend class BaseMatrix; friend class AddedMatrix; friend class MultipliedMatrix; friend class SubtractedMatrix; friend class SPMatrix; friend class ConcatenatedMatrix; friend class StackedMatrix; friend class SolvedMatrix; friend class ShiftedMatrix; friend class NegShiftedMatrix; friend class ScaledMatrix; friend class TransposedMatrix; friend class ReversedMatrix; friend class NegatedMatrix; friend class InvertedMatrix; friend class RowedMatrix; friend class ColedMatrix; friend class DiagedMatrix; friend class MatedMatrix; friend class GetSubMatrix; friend class ReturnMatrixX; friend class LinearEquationSolver; friend class GenericMatrix; NEW_DELETE(GeneralMatrix)};class Matrix : public GeneralMatrix // usual rectangular matrix{ GeneralMatrix* Image() const; // copy of matrixpublic: Matrix() {} ~Matrix() {} Matrix(int, int); // standard declaration Matrix(const BaseMatrix&); // evaluate BaseMatrix void operator=(const BaseMatrix&); void operator=(Real f) { GeneralMatrix::operator=(f); } void operator=(const Matrix& m) { operator=((const BaseMatrix&)m); } MatrixType Type() const; Real& operator()(int, int); // access element Real& element(int, int); // access element#ifdef SETUP_C_SUBSCRIPTS Real* operator[](int m) { return store+m*ncols; } const Real* operator[](int m) const { return store+m*ncols; }#endif Matrix(const Matrix& gm) { GetMatrix(&gm); } Real operator()(int, int) const; // access element GeneralMatrix* MakeSolver(); Real Trace() const; void GetRow(MatrixRowCol&); void GetCol(MatrixRowCol&); void GetCol(MatrixColX&); void RestoreCol(MatrixRowCol&); void RestoreCol(MatrixColX&); void NextRow(MatrixRowCol&); void NextCol(MatrixRowCol&); void NextCol(MatrixColX&); virtual void ReSize(int,int); // change dimensions // virtual so we will catch it being used in a vector called as a matrix void ReSize(const GeneralMatrix& A); Real MaximumAbsoluteValue2(int& i, int& j) const; Real MinimumAbsoluteValue2(int& i, int& j) const; Real Maximum2(int& i, int& j) const; Real Minimum2(int& i, int& j) const; friend Real DotProduct(const Matrix& A, const Matrix& B); NEW_DELETE(Matrix)};class nricMatrix : public Matrix // for use with Numerical // Recipes in C{ GeneralMatrix* Image() const; // copy of matrix Real** row_pointer; // points to rows void MakeRowPointer(); // build rowpointer void DeleteRowPointer();public: nricMatrix() {} nricMatrix(int m, int n) // standard declaration : Matrix(m,n) { MakeRowPointer(); } nricMatrix(const BaseMatrix& bm) // evaluate BaseMatrix : Matrix(bm) { MakeRowPointer(); } void operator=(const BaseMatrix& bm) { DeleteRowPointer(); Matrix::operator=(bm); MakeRowPointer(); } void operator=(Real f) { GeneralMatrix::operator=(f); } void operator=(const nricMatrix& m) { operator=((const BaseMatrix&)m); } void operator<<(const BaseMatrix& X) { DeleteRowPointer(); Eq(X,this->Type(),true); MakeRowPointer(); } nricMatrix(const nricMatrix& gm) { GetMatrix(&gm); MakeRowPointer(); } void ReSize(int m, int n) // change dimensions { DeleteRowPointer(); Matrix::ReSize(m,n); MakeRowPointer(); } void ReSize(const GeneralMatrix& A); ~nricMatrix() { DeleteRowPointer(); } Real** nric() const { CheckStore(); return row_pointer-1; } void CleanUp(); // to clear store NEW_DELETE(nricMatrix)};class SymmetricMatrix : public GeneralMatrix{ GeneralMatrix* Image() const; // copy of matrixpublic: SymmetricMatrix() {} ~SymmetricMatrix() {} SymmetricMatrix(ArrayLengthSpecifier); SymmetricMatrix(const BaseMatrix&); void operator=(const BaseMatrix&); void operator=(Real f) { GeneralMatrix::operator=(f); } void operator=(const SymmetricMatrix& m) { operator=((const BaseMatrix&)m); } Real& operator()(int, int); // access element Real& element(int, int); // access element#ifdef SETUP_C_SUBSCRIPTS Real* operator[](int m) { return store+(m*(m+1))/2; } const Real* operator[](int m) const { return store+(m*(m+1))/2; }#endif MatrixType Type() const; SymmetricMatrix(const SymmetricMatrix& gm) { GetMatrix(&gm); } Real operator()(int, int) const; // access element Real SumSquare() const; Real SumAbsoluteValue() const; Real Sum() const; Real Trace() const; void GetRow(MatrixRowCol&); void GetCol(MatrixRowCol&); void GetCol(MatrixColX&); void RestoreCol(MatrixRowCol&) {} void RestoreCol(MatrixColX&); GeneralMatrix* Transpose(TransposedMatrix*, MatrixType); void ReSize(int); // change dimensions void ReSize(const GeneralMatrix& A); NEW_DELETE(SymmetricMatrix)};class UpperTriangularMatrix : public GeneralMatrix{ GeneralMatrix* Image() const; // copy of matrixpublic: UpperTriangularMatrix() {} ~UpperTriangularMatrix() {} UpperTriangularMatrix(ArrayLengthSpecifier); void operator=(const BaseMatrix&); void operator=(const UpperTriangularMatrix& m) { operator=((const BaseMatrix&)m); } UpperTriangularMatrix(const BaseMatrix&); UpperTriangularMatrix(const UpperTriangularMatrix& gm) { GetMatrix(&gm); } Real operator()(int, int) const; // access element void operator=(Real f) { GeneralMatrix::operator=(f); } Real& operator()(int, int); // access element Real& element(int, int); // access element#ifdef SETUP_C_SUBSCRIPTS Real* operator[](int m) { return store+m*ncols-(m*(m+1))/2; } const Real* operator[](int m) const { return store+m*ncols-(m*(m+1))/2; }#endif MatrixType Type() const; GeneralMatrix* MakeSolver() { return this; } // for solving
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -