📄 newmat.h
字号:
void Solver(MatrixColX&, const MatrixColX&); LogAndSign LogDeterminant() const; Real Trace() const; void GetRow(MatrixRowCol&); void GetCol(MatrixRowCol&); void GetCol(MatrixColX&); void RestoreCol(MatrixRowCol&); void RestoreCol(MatrixColX& c) { RestoreCol((MatrixRowCol&)c); } void NextRow(MatrixRowCol&); void ReSize(int); // change dimensions void ReSize(const GeneralMatrix& A); NEW_DELETE(UpperTriangularMatrix)};class LowerTriangularMatrix : public GeneralMatrix{ GeneralMatrix* Image() const; // copy of matrixpublic: LowerTriangularMatrix() {} ~LowerTriangularMatrix() {} LowerTriangularMatrix(ArrayLengthSpecifier); LowerTriangularMatrix(const LowerTriangularMatrix& gm) { GetMatrix(&gm); } Real operator()(int, int) const; // access element LowerTriangularMatrix(const BaseMatrix& M); void operator=(const BaseMatrix&); void operator=(Real f) { GeneralMatrix::operator=(f); } void operator=(const LowerTriangularMatrix& 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; GeneralMatrix* MakeSolver() { return this; } // for solving void Solver(MatrixColX&, const MatrixColX&); LogAndSign LogDeterminant() const; Real Trace() const; void GetRow(MatrixRowCol&); void GetCol(MatrixRowCol&); void GetCol(MatrixColX&); void RestoreCol(MatrixRowCol&); void RestoreCol(MatrixColX& c) { RestoreCol((MatrixRowCol&)c); } void NextRow(MatrixRowCol&); void ReSize(int); // change dimensions void ReSize(const GeneralMatrix& A); NEW_DELETE(LowerTriangularMatrix)};class DiagonalMatrix : public GeneralMatrix{ GeneralMatrix* Image() const; // copy of matrixpublic: DiagonalMatrix() {} ~DiagonalMatrix() {} DiagonalMatrix(ArrayLengthSpecifier); DiagonalMatrix(const BaseMatrix&); DiagonalMatrix(const DiagonalMatrix& gm) { GetMatrix(&gm); } Real operator()(int, int) const; // access element Real operator()(int) const; void operator=(const BaseMatrix&); void operator=(Real f) { GeneralMatrix::operator=(f); } void operator=(const DiagonalMatrix& m) { operator=((const BaseMatrix&)m); } Real& operator()(int, int); // access element Real& operator()(int); // access element Real& element(int, int); // access element Real& element(int); // access element#ifdef SETUP_C_SUBSCRIPTS Real& operator[](int m) { return store[m]; } const Real& operator[](int m) const { return store[m]; }#endif MatrixType Type() const; LogAndSign LogDeterminant() const; Real Trace() const; void GetRow(MatrixRowCol&); void GetCol(MatrixRowCol&); void GetCol(MatrixColX&); void NextRow(MatrixRowCol&); void NextCol(MatrixRowCol&); void NextCol(MatrixColX&); GeneralMatrix* MakeSolver() { return this; } // for solving void Solver(MatrixColX&, const MatrixColX&); GeneralMatrix* Transpose(TransposedMatrix*, MatrixType); void ReSize(int); // change dimensions void ReSize(const GeneralMatrix& A); Real* nric() const { CheckStore(); return store-1; } // for use by NRIC MatrixBandWidth BandWidth() const;// ReturnMatrix Reverse() const; // reverse order of elements NEW_DELETE(DiagonalMatrix)};class RowVector : public Matrix{ GeneralMatrix* Image() const; // copy of matrixpublic: RowVector() { nrows = 1; } ~RowVector() {} RowVector(ArrayLengthSpecifier n) : Matrix(1,n.Value()) {} RowVector(const BaseMatrix&); RowVector(const RowVector& gm) { GetMatrix(&gm); } Real operator()(int) const; // access element void operator=(const BaseMatrix&); void operator=(Real f) { GeneralMatrix::operator=(f); } void operator=(const RowVector& m) { operator=((const BaseMatrix&)m); } Real& operator()(int); // access element Real& element(int); // access element#ifdef SETUP_C_SUBSCRIPTS Real& operator[](int m) { return store[m]; } const Real& operator[](int m) const { return store[m]; }#endif MatrixType Type() const; void GetCol(MatrixRowCol&); void GetCol(MatrixColX&); void NextCol(MatrixRowCol&); void NextCol(MatrixColX&); void RestoreCol(MatrixRowCol&) {} void RestoreCol(MatrixColX& c); GeneralMatrix* Transpose(TransposedMatrix*, MatrixType); void ReSize(int); // change dimensions void ReSize(int,int); // in case access is matrix void ReSize(const GeneralMatrix& A); Real* nric() const { CheckStore(); return store-1; } // for use by NRIC void CleanUp(); // to clear store // friend ReturnMatrix GetMatrixRow(Matrix& A, int row); NEW_DELETE(RowVector)};class ColumnVector : public Matrix{ GeneralMatrix* Image() const; // copy of matrixpublic: ColumnVector() { ncols = 1; } ~ColumnVector() {} ColumnVector(ArrayLengthSpecifier n) : Matrix(n.Value(),1) {} ColumnVector(const BaseMatrix&); ColumnVector(const ColumnVector& gm) { GetMatrix(&gm); } Real operator()(int) const; // access element void operator=(const BaseMatrix&); void operator=(Real f) { GeneralMatrix::operator=(f); } void operator=(const ColumnVector& m) { operator=((const BaseMatrix&)m); } Real& operator()(int); // access element Real& element(int); // access element#ifdef SETUP_C_SUBSCRIPTS Real& operator[](int m) { return store[m]; } const Real& operator[](int m) const { return store[m]; }#endif MatrixType Type() const; GeneralMatrix* Transpose(TransposedMatrix*, MatrixType); void ReSize(int); // change dimensions void ReSize(int,int); // in case access is matrix void ReSize(const GeneralMatrix& A); Real* nric() const { CheckStore(); return store-1; } // for use by NRIC void CleanUp(); // to clear store// ReturnMatrix Reverse() const; // reverse order of elements NEW_DELETE(ColumnVector)};class CroutMatrix : public GeneralMatrix // for LU decomposition{ int* indx; bool d; bool sing; void ludcmp();public: CroutMatrix(const BaseMatrix&); MatrixType Type() const; void lubksb(Real*, int=0); ~CroutMatrix(); GeneralMatrix* MakeSolver() { return this; } // for solving LogAndSign LogDeterminant() const; void Solver(MatrixColX&, const MatrixColX&); void GetRow(MatrixRowCol&); void GetCol(MatrixRowCol&); void GetCol(MatrixColX& c) { GetCol((MatrixRowCol&)c); } void operator=(const BaseMatrix&); void operator=(const CroutMatrix& m) { operator=((const BaseMatrix&)m); } void CleanUp(); // to clear store bool IsEqual(const GeneralMatrix&) const; bool IsSingular() const { return sing; } NEW_DELETE(CroutMatrix)};// ***************************** band matrices ***************************/class BandMatrix : public GeneralMatrix // band matrix{ GeneralMatrix* Image() const; // copy of matrixprotected: void CornerClear() const; // set unused elements to zeropublic: int lower, upper; // band widths BandMatrix() { lower=0; upper=0; CornerClear(); } ~BandMatrix() {} BandMatrix(int n,int lb,int ub) { ReSize(n,lb,ub); CornerClear(); } // standard declaration BandMatrix(const BaseMatrix&); // evaluate BaseMatrix void operator=(const BaseMatrix&); void operator=(Real f) { GeneralMatrix::operator=(f); } void operator=(const BandMatrix& 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+(upper+lower)*m+lower; } const Real* operator[](int m) const { return store+(upper+lower)*m+lower; }#endif BandMatrix(const BandMatrix& gm) { GetMatrix(&gm); } Real operator()(int, int) const; // access element LogAndSign LogDeterminant() const; GeneralMatrix* MakeSolver(); Real Trace() const; Real SumSquare() const { CornerClear(); return GeneralMatrix::SumSquare(); } Real SumAbsoluteValue() const { CornerClear(); return GeneralMatrix::SumAbsoluteValue(); } Real Sum() const { CornerClear(); return GeneralMatrix::Sum(); } Real MaximumAbsoluteValue() const { CornerClear(); return GeneralMatrix::MaximumAbsoluteValue(); } Real MinimumAbsoluteValue() const { int i, j; return GeneralMatrix::MinimumAbsoluteValue2(i, j); } Real Maximum() const { int i, j; return GeneralMatrix::Maximum2(i, j); } Real Minimum() const { int i, j; return GeneralMatrix::Minimum2(i, j); } void GetRow(MatrixRowCol&); void GetCol(MatrixRowCol&); void GetCol(MatrixColX&); void RestoreCol(MatrixRowCol&); void RestoreCol(MatrixColX& c) { RestoreCol((MatrixRowCol&)c); } void NextRow(MatrixRowCol&); virtual void ReSize(int, int, int); // change dimensions void ReSize(const GeneralMatrix& A); bool SameStorageType(const GeneralMatrix& A) const; void ReSizeForAdd(const GeneralMatrix& A, const GeneralMatrix& B); void ReSizeForSP(const GeneralMatrix& A, const GeneralMatrix& B); MatrixBandWidth BandWidth() const; void SetParameters(const GeneralMatrix*); MatrixInput operator<<(Real); // will give error void operator<<(const Real* r); // will give error // the next is included because Zortech and Borland // cannot find the copy in GeneralMatrix void operator<<(const BaseMatrix& X) { GeneralMatrix::operator<<(X); } NEW_DELETE(BandMatrix)};class UpperBandMatrix : public BandMatrix // upper band matrix{ GeneralMatrix* Image() const; // copy of matrixpublic: UpperBandMatrix() {} ~UpperBandMatrix() {} UpperBandMatrix(int n, int ubw) // standard declaration : BandMatrix(n, 0, ubw) {} UpperBandMatrix(const BaseMatrix&); // evaluate BaseMatrix void operator=(const BaseMatrix&); void operator=(Real f) { GeneralMatrix::operator=(f); } void operator=(const UpperBandMatrix& m) { operator=((const BaseMatrix&)m); } MatrixType Type() const; UpperBandMatrix(const UpperBandMatrix& gm) { GetMatrix(&gm); } GeneralMatrix* MakeSolver() { return this; } void Solver(MatrixColX&, const MatrixColX&); LogAndSign LogDeterminant() const; void ReSize(int, int, int); // change dimensions void ReSize(int n,int ubw) // change dimensions { BandMatrix::ReSize(n,0,ubw); } void ReSize(const GeneralMatrix& A) { BandMatrix::ReSize(A); } Real& operator()(int, int); Real& element(int, int);#ifdef SETUP_C_SUBSCRIPTS Real* operator[](int m) { return store+upper*m; } const Real* operator[](int m) const { return store+upper*m; }#endif NEW_DELETE(UpperBandMatrix)};class LowerBandMatrix : public BandMatrix // upper band matrix{ GeneralMatrix* Image() const; // copy of matrixpublic: LowerBandMatrix() {} ~LowerBandMatrix() {} LowerBandMatrix(int n, int lbw) // standard declaration : BandMatrix(n, lbw, 0) {} LowerBandMatrix(const BaseMatrix&); // evaluate BaseMatrix void operator=(const BaseMatrix&); void operator=(Real f) { GeneralMatrix::operator=(f); } void operator=(const LowerBandMatrix& m) { operator=((const BaseMatrix&)m); } MatrixType Type() const; LowerBandMatrix(const LowerBandMatrix& gm) { GetMatrix(&gm); } GeneralMatrix* MakeSolver() { return this; } void Solver(MatrixColX&, const MatrixColX&); LogAndSign LogDeterminant() const; void ReSize(int, int, int); // change dimensions void ReSize(int n,int lbw) // change dimensions { BandMatrix::ReSize(n,lbw,0); } void ReSize(const GeneralMatrix& A) { BandMatrix::ReSize(A); } Real& operator()(int, int); Real& element(int, int);#ifdef SETUP_C_SUBSCRIPTS Real* operator[](int m) { return store+lower*(m+1); } const Real* operator[](int m) const { return store+lower*(m+1); }#endif NEW_DELETE(LowerBandMatrix)};class SymmetricBandMatrix : public GeneralMatrix{ GeneralMatrix* Image() const; // copy of matrix void CornerClear() const; // set unused elements to zeropublic: int lower; // lower band width SymmetricBandMatrix() { lower=0; CornerClear(); } ~SymmetricBandMatrix() {} SymmetricBandMatrix(int n, int lb) { ReSize(n,lb); CornerClear(); } SymmetricBandMatrix(const BaseMatrix&); void operator=(const BaseMatrix&); void operator=(Real f) { GeneralMatrix::operator=(f); } void operator=(const SymmetricBandMatrix& 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+lower*(m+1); } const Real* operator[](int m) const { return store+lower*(m+1); }#endif MatrixType Type() const; SymmetricBandMatrix(const SymmetricBandMatrix& gm) { GetMatrix(&gm); } Real operator()(int, int) const; // access element GeneralMatrix* MakeSolver(); Real SumSquare() const; Real SumAbsoluteValue() const; Real Sum() const;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -