📄 newmat.h
字号:
Real NormFrobenius() const;
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 KPMatrix;
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 matrix
protected:
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 dimensions
virtual short SimpleAddOK(const GeneralMatrix* gm) { return 0; }
// see bandmat.cpp for explanation
public:
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
MatrixInput operator<<(int f);
// 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 KPMatrix;
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 matrix
public:
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
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*ncols; }
const Real* operator[](int m) const { return store+m*ncols; }
#endif
Matrix(const Matrix& gm) { GetMatrix(&gm); }
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 matrix
public:
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
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;
SymmetricMatrix(const SymmetricMatrix& gm) { GetMatrix(&gm); }
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 matrix
public:
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); }
void operator=(Real f) { GeneralMatrix::operator=(f); }
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*ncols-(m*(m+1))/2; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -