📄 newmat.h
字号:
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) { Eq(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_val; }
const Real* operator[](int m) const { return store+m*ncols_val; }
// following for Numerical Recipes in C++
Matrix(Real, int, int);
Matrix(const Real*, int, int);
#endif
Matrix(const Matrix& gm) : GeneralMatrix() { 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
virtual void resize_keep(int,int);
virtual void ReSize(int m, int n) { resize(m, n); }
void resize(const GeneralMatrix& A);
void ReSize(const GeneralMatrix& A) { resize(A); }
Real maximum_absolute_value2(int& i, int& j) const;
Real minimum_absolute_value2(int& i, int& j) const;
Real maximum2(int& i, int& j) const;
Real minimum2(int& i, int& j) const;
void operator+=(const Matrix& M) { PlusEqual(M); }
void operator-=(const Matrix& M) { MinusEqual(M); }
void operator+=(Real f) { GeneralMatrix::Add(f); }
void operator-=(Real f) { GeneralMatrix::Add(-f); }
void swap(Matrix& gm) { GeneralMatrix::swap((GeneralMatrix&)gm); }
friend Real dotproduct(const Matrix& A, const Matrix& B);
NEW_DELETE(Matrix)
};
/// Square matrix.
class SquareMatrix : public Matrix
{
GeneralMatrix* Image() const; // copy of matrix
public:
SquareMatrix() {}
~SquareMatrix() {}
SquareMatrix(ArrayLengthSpecifier); // standard declaration
SquareMatrix(const BaseMatrix&); // evaluate BaseMatrix
void operator=(const BaseMatrix&);
void operator=(Real f) { GeneralMatrix::operator=(f); }
void operator=(const SquareMatrix& m) { Eq(m); }
void operator=(const Matrix& m);
MatrixType type() const;
SquareMatrix(const SquareMatrix& gm) : Matrix() { GetMatrix(&gm); }
SquareMatrix(const Matrix& gm);
void resize(int); // change dimensions
void ReSize(int m) { resize(m); }
void resize_keep(int);
void resize_keep(int,int);
void resize(int,int); // change dimensions
void ReSize(int m, int n) { resize(m, n); }
void resize(const GeneralMatrix& A);
void ReSize(const GeneralMatrix& A) { resize(A); }
void operator+=(const Matrix& M) { PlusEqual(M); }
void operator-=(const Matrix& M) { MinusEqual(M); }
void operator+=(Real f) { GeneralMatrix::Add(f); }
void operator-=(Real f) { GeneralMatrix::Add(-f); }
void swap(SquareMatrix& gm) { GeneralMatrix::swap((GeneralMatrix&)gm); }
NEW_DELETE(SquareMatrix)
};
/// Rectangular matrix for use with Numerical Recipes in C.
class nricMatrix : public Matrix
{
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)
{ DeleteRowPointer(); Eq(m); MakeRowPointer(); }
void operator<<(const BaseMatrix& X)
{ DeleteRowPointer(); Eq(X,this->type(),true); MakeRowPointer(); }
nricMatrix(const nricMatrix& gm) : Matrix()
{ GetMatrix(&gm); MakeRowPointer(); }
void resize(int m, int n) // change dimensions
{ DeleteRowPointer(); Matrix::resize(m,n); MakeRowPointer(); }
void resize_keep(int m, int n) // change dimensions
{ DeleteRowPointer(); Matrix::resize_keep(m,n); MakeRowPointer(); }
void ReSize(int m, int n) // change dimensions
{ DeleteRowPointer(); Matrix::resize(m,n); MakeRowPointer(); }
void resize(const GeneralMatrix& A);
void ReSize(const GeneralMatrix& A) { resize(A); }
~nricMatrix() { DeleteRowPointer(); }
Real** nric() const { CheckStore(); return row_pointer-1; }
void cleanup(); // to clear store
void MiniCleanUp();
void operator+=(const Matrix& M) { PlusEqual(M); }
void operator-=(const Matrix& M) { MinusEqual(M); }
void operator+=(Real f) { GeneralMatrix::Add(f); }
void operator-=(Real f) { GeneralMatrix::Add(-f); }
void swap(nricMatrix& gm);
NEW_DELETE(nricMatrix)
};
/// Symmetric matrix.
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) { Eq(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)
: GeneralMatrix() { GetMatrix(&gm); }
Real sum_square() const;
Real sum_absolute_value() 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(int m) { resize(m); }
void resize_keep(int);
void resize(const GeneralMatrix& A);
void ReSize(const GeneralMatrix& A) { resize(A); }
void operator+=(const SymmetricMatrix& M) { PlusEqual(M); }
void operator-=(const SymmetricMatrix& M) { MinusEqual(M); }
void operator+=(Real f) { GeneralMatrix::Add(f); }
void operator-=(Real f) { GeneralMatrix::Add(-f); }
void swap(SymmetricMatrix& gm) { GeneralMatrix::swap((GeneralMatrix&)gm); }
NEW_DELETE(SymmetricMatrix)
};
/// Upper triangular matrix.
class UpperTriangularMatrix : public GeneralMatrix
{
GeneralMatrix* Image() const; // copy of matrix
public:
UpperTriangularMatrix() {}
~UpperTriangularMatrix() {}
UpperTriangularMatrix(ArrayLengthSpecifier);
void operator=(const BaseMatrix&);
void operator=(const UpperTriangularMatrix& m) { Eq(m); }
UpperTriangularMatrix(const BaseMatrix&);
UpperTriangularMatrix(const UpperTriangularMatrix& gm)
: GeneralMatrix() { 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_val-(m*(m+1))/2; }
const Real* operator[](int m) const
{ return store+m*ncols_val-(m*(m+1))/2; }
#endif
MatrixType type() const;
GeneralMatrix* MakeSolver() { return this; } // for solving
void Solver(MatrixColX&, const MatrixColX&);
LogAndSign log_determinant() 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(int m) { resize(m); }
void resize(const GeneralMatrix& A);
void ReSize(const GeneralMatrix& A) { resize(A); }
void resize_keep(int);
MatrixBandWidth bandwidth() const;
void operator+=(const UpperTriangularMatrix& M) { PlusEqual(M); }
void operator-=(const UpperTriangularMatrix& M) { MinusEqual(M); }
void operator+=(Real f) { GeneralMatrix::operator+=(f); }
void operator-=(Real f) { GeneralMatrix::operator-=(f); }
void swap(UpperTriangularMatrix& gm)
{ GeneralMatrix::swap((GeneralMatrix&)gm); }
NEW_DELETE(UpperTriangularMatrix)
};
/// Lower triangular matrix.
class LowerTriangularMatrix : public GeneralMatrix
{
GeneralMatrix* Image() const; // copy of matrix
public:
LowerTriangularMatrix() {}
~LowerTriangularMatrix() {}
LowerTriangularMatrix(ArrayLengthSpecifier);
LowerTriangularMatrix(const LowerTriangularMatrix& gm)
: GeneralMatrix() { GetMatrix(&gm); }
LowerTriangularMatrix(const BaseMatrix& M);
void operator=(const BaseMatrix&);
void operator=(Real f) { GeneralMatrix::operator=(f); }
void operator=(const LowerTriangularMatrix& m) { Eq(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 log_determinant() 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(int m) { resize(m); }
void resize_keep(int);
void resize(const GeneralMatrix& A);
void ReSize(const GeneralMatrix& A) { resize(A); }
MatrixBandWidth bandwidth() const;
void operator+=(const LowerTriangularMatrix& M) { PlusEqual(M); }
void operator-=(const LowerTriangularMatrix& M) { MinusEqual(M); }
void operator+=(Real f) { GeneralMatrix::operator+=(f); }
void operator-=(Real f) { GeneralMatrix::operator-=(f); }
void swap(LowerTriangularMatrix& gm)
{ GeneralMatrix::swap((GeneralMatrix&)gm); }
NEW_DELETE(LowerTriangularMatrix)
};
/// Diagonal matrix.
class DiagonalMatrix : public GeneralMatrix
{
GeneralMatrix* Image() const; // copy of matrix
public:
DiagonalMatrix() {}
~DiagonalMatrix() {}
DiagonalMatrix(ArrayLengthSpecifier);
DiagonalMatrix(const BaseMatrix&);
DiagonalMatrix(const DiagonalMatrix& gm)
: GeneralMatrix() { GetMatrix(&gm); }
void operator=(const BaseMatrix&);
void operator=(Real f) { GeneralMatrix::operator=(f); }
void operator=(const DiagonalMatrix& m) { Eq(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 log_determinant() 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(int m) { resize(m); }
void resize_keep(int);
void resize(const GeneralMatrix& A);
void ReSize(const GeneralMatrix& A) { resize(A); }
Real* nric() const
{ CheckStore(); return store-1; } // for use by NRIC
MatrixBandWidth bandwidth() const;
// ReturnMatrix Reverse() const; // reverse order of elements
void operator+=(const DiagonalMatrix& M) { PlusEqual(M); }
void operator-=(const DiagonalMatrix& M) { MinusEqual(M); }
void operator+=(Real f) { GeneralMatrix::operator+=(f); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -