📄 newmat.h
字号:
const Real* operator[](int m) const { return store+m*ncols-(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);
MatrixBandWidth BandWidth() const;
NEW_DELETE(UpperTriangularMatrix)
};
class LowerTriangularMatrix : public GeneralMatrix
{
GeneralMatrix* Image() const; // copy of matrix
public:
LowerTriangularMatrix() {}
~LowerTriangularMatrix() {}
LowerTriangularMatrix(ArrayLengthSpecifier);
LowerTriangularMatrix(const LowerTriangularMatrix& gm) { GetMatrix(&gm); }
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
Real operator()(int, int) const; // access element
Real element(int, int) const; // 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);
MatrixBandWidth BandWidth() const;
NEW_DELETE(LowerTriangularMatrix)
};
class DiagonalMatrix : public GeneralMatrix
{
GeneralMatrix* Image() const; // copy of matrix
public:
DiagonalMatrix() {}
~DiagonalMatrix() {}
DiagonalMatrix(ArrayLengthSpecifier);
DiagonalMatrix(const BaseMatrix&);
DiagonalMatrix(const DiagonalMatrix& gm) { GetMatrix(&gm); }
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 operator()(int, int) const; // access element
Real operator()(int) const;
Real& element(int, int); // access element
Real& element(int); // access element
Real element(int, int) const; // access element
Real element(int) const; // 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 matrix
public:
RowVector() { nrows = 1; }
~RowVector() {}
RowVector(ArrayLengthSpecifier n) : Matrix(1,n.Value()) {}
RowVector(const BaseMatrix&);
RowVector(const RowVector& gm) { GetMatrix(&gm); }
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
Real operator()(int) const; // access element
Real element(int) const; // 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 matrix
public:
ColumnVector() { ncols = 1; }
~ColumnVector() {}
ColumnVector(ArrayLengthSpecifier n) : Matrix(n.Value(),1) {}
ColumnVector(const BaseMatrix&);
ColumnVector(const ColumnVector& gm) { GetMatrix(&gm); }
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
Real operator()(int) const; // access element
Real element(int) const; // 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 matrix
protected:
void CornerClear() const; // set unused elements to zero
short SimpleAddOK(const GeneralMatrix* gm);
public:
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
Real operator()(int, int) const; // access element
Real element(int, int) const; // 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); }
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
MatrixInput operator<<(int f);
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 matrix
public:
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 operator()(int, int) const;
Real& element(int, int);
Real element(int, int) const;
#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 matrix
public:
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 operator()(int, int) const;
Real& element(int, int);
Real element(int, int) const;
#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 zero
short SimpleAddOK(const GeneralMatrix* gm);
public:
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -