📄 newmat.h
字号:
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); } Real Trace() const; LogAndSign LogDeterminant() const; void GetRow(MatrixRowCol&); void GetCol(MatrixRowCol&); void GetCol(MatrixColX&); void RestoreCol(MatrixRowCol&) {} void RestoreCol(MatrixColX&); GeneralMatrix* Transpose(TransposedMatrix*, MatrixType); void ReSize(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*); NEW_DELETE(SymmetricBandMatrix)};class BandLUMatrix : public GeneralMatrix// for LU decomposition of band matrix{ int* indx; bool d; bool sing; // true if singular Real* store2; int storage2; void ludcmp(); int m1,m2; // lower and upperpublic: BandLUMatrix(const BaseMatrix&); MatrixType Type() const; void lubksb(Real*, int=0); ~BandLUMatrix(); 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 BandLUMatrix& m) { operator=((const BaseMatrix&)m); } void CleanUp(); // to clear store bool IsEqual(const GeneralMatrix&) const; bool IsSingular() const { return sing; } NEW_DELETE(BandLUMatrix)};// ************************** GenericMatrix class ************************/class GenericMatrix : public BaseMatrix{ GeneralMatrix* gm; int search(const BaseMatrix* bm) const; friend class BaseMatrix;public: GenericMatrix() : gm(0) {} GenericMatrix(const BaseMatrix& bm) { gm = ((BaseMatrix&)bm).Evaluate(); gm = gm->Image(); } GenericMatrix(const GenericMatrix& bm) { gm = bm.gm->Image(); } void operator=(const GenericMatrix&); void operator=(const BaseMatrix&); 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); } ~GenericMatrix() { delete gm; } void CleanUp() { delete gm; gm = 0; } void Release() { gm->Release(); } GeneralMatrix* Evaluate(MatrixType = MatrixTypeUnSp); MatrixBandWidth BandWidth() const; NEW_DELETE(GenericMatrix)};// *************************** temporary classes *************************/class MultipliedMatrix : public BaseMatrix{protected: // if these union statements cause problems, simply remove them // and declare the items individually union { const BaseMatrix* bm1; GeneralMatrix* gm1; }; // pointers to summands union { const BaseMatrix* bm2; GeneralMatrix* gm2; }; MultipliedMatrix(const BaseMatrix* bm1x, const BaseMatrix* bm2x) : bm1(bm1x),bm2(bm2x) {} int search(const BaseMatrix*) const; friend class BaseMatrix; friend class GeneralMatrix; friend class GenericMatrix;public: ~MultipliedMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); MatrixBandWidth BandWidth() const; NEW_DELETE(MultipliedMatrix)};class AddedMatrix : public MultipliedMatrix{protected: AddedMatrix(const BaseMatrix* bm1x, const BaseMatrix* bm2x) : MultipliedMatrix(bm1x,bm2x) {} friend class BaseMatrix; friend class GeneralMatrix; friend class GenericMatrix;public: ~AddedMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); MatrixBandWidth BandWidth() const;#ifdef __GNUG__ void SelectVersion(MatrixType, int&, int&) const;#else void SelectVersion(MatrixType, bool&, bool&) const;#endif NEW_DELETE(AddedMatrix)};class SPMatrix : public AddedMatrix{protected: SPMatrix(const BaseMatrix* bm1x, const BaseMatrix* bm2x) : AddedMatrix(bm1x,bm2x) {} friend class BaseMatrix; friend class GeneralMatrix; friend class GenericMatrix;public: ~SPMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); MatrixBandWidth BandWidth() const;#ifdef __GNUG__ void SelectVersion(MatrixType, int&, int&) const;#else void SelectVersion(MatrixType, bool&, bool&) const;#endif#ifndef TEMPS_DESTROYED_QUICKLY friend SPMatrix SP(const BaseMatrix&, const BaseMatrix&);#else friend SPMatrix& SP(const BaseMatrix&, const BaseMatrix&);#endif NEW_DELETE(SPMatrix)};class ConcatenatedMatrix : public MultipliedMatrix{protected: ConcatenatedMatrix(const BaseMatrix* bm1x, const BaseMatrix* bm2x) : MultipliedMatrix(bm1x,bm2x) {} friend class BaseMatrix; friend class GeneralMatrix; friend class GenericMatrix;public: ~ConcatenatedMatrix() {} MatrixBandWidth BandWidth() const; GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); NEW_DELETE(ConcatenatedMatrix)};class StackedMatrix : public ConcatenatedMatrix{protected: StackedMatrix(const BaseMatrix* bm1x, const BaseMatrix* bm2x) : ConcatenatedMatrix(bm1x,bm2x) {} friend class BaseMatrix; friend class GeneralMatrix; friend class GenericMatrix;public: ~StackedMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); NEW_DELETE(StackedMatrix)};class SolvedMatrix : public MultipliedMatrix{ SolvedMatrix(const BaseMatrix* bm1x, const BaseMatrix* bm2x) : MultipliedMatrix(bm1x,bm2x) {} friend class BaseMatrix; friend class InvertedMatrix; // for operator*public: ~SolvedMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); MatrixBandWidth BandWidth() const; NEW_DELETE(SolvedMatrix)};class SubtractedMatrix : public AddedMatrix{ SubtractedMatrix(const BaseMatrix* bm1x, const BaseMatrix* bm2x) : AddedMatrix(bm1x,bm2x) {} friend class BaseMatrix; friend class GeneralMatrix; friend class GenericMatrix;public: ~SubtractedMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); NEW_DELETE(SubtractedMatrix)};class ShiftedMatrix : public BaseMatrix{protected: union { const BaseMatrix* bm; GeneralMatrix* gm; }; Real f; ShiftedMatrix(const BaseMatrix* bmx, Real fx) : bm(bmx),f(fx) {} int search(const BaseMatrix*) const; friend class BaseMatrix; friend class GeneralMatrix; friend class GenericMatrix;public: ~ShiftedMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp);#ifndef TEMPS_DESTROYED_QUICKLY friend ShiftedMatrix operator+(Real f, const BaseMatrix& BM) { return ShiftedMatrix(&BM, f); }#endif NEW_DELETE(ShiftedMatrix)};class NegShiftedMatrix : public ShiftedMatrix{protected: NegShiftedMatrix(Real fx, const BaseMatrix* bmx) : ShiftedMatrix(bmx,fx) {} friend class BaseMatrix; friend class GeneralMatrix; friend class GenericMatrix;public: ~NegShiftedMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp);#ifndef TEMPS_DESTROYED_QUICKLY friend NegShiftedMatrix operator-(Real, const BaseMatrix&);#else friend NegShiftedMatrix& operator-(Real, const BaseMatrix&);#endif NEW_DELETE(NegShiftedMatrix)};class ScaledMatrix : public ShiftedMatrix{ ScaledMatrix(const BaseMatrix* bmx, Real fx) : ShiftedMatrix(bmx,fx) {} friend class BaseMatrix; friend class GeneralMatrix; friend class GenericMatrix;public: ~ScaledMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); MatrixBandWidth BandWidth() const;#ifndef TEMPS_DESTROYED_QUICKLY friend ScaledMatrix operator*(Real f, const BaseMatrix& BM) { return ScaledMatrix(&BM, f); }#endif NEW_DELETE(ScaledMatrix)};class NegatedMatrix : public BaseMatrix{protected: union { const BaseMatrix* bm; GeneralMatrix* gm; }; NegatedMatrix(const BaseMatrix* bmx) : bm(bmx) {} int search(const BaseMatrix*) const;private: friend class BaseMatrix;public: ~NegatedMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); MatrixBandWidth BandWidth() const; NEW_DELETE(NegatedMatrix)};class TransposedMatrix : public NegatedMatrix{ TransposedMatrix(const BaseMatrix* bmx) : NegatedMatrix(bmx) {} friend class BaseMatrix;public: ~TransposedMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); MatrixBandWidth BandWidth() const; NEW_DELETE(TransposedMatrix)};class ReversedMatrix : public NegatedMatrix{ ReversedMatrix(const BaseMatrix* bmx) : NegatedMatrix(bmx) {} friend class BaseMatrix;public: ~ReversedMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); NEW_DELETE(ReversedMatrix)};class InvertedMatrix : public NegatedMatrix{ InvertedMatrix(const BaseMatrix* bmx) : NegatedMatrix(bmx) {}public: ~InvertedMatrix() {}#ifndef TEMPS_DESTROYED_QUICKLY SolvedMatrix operator*(const BaseMatrix&) const; // inverse(A) * B ScaledMatrix operator*(Real t) const { return BaseMatrix::operator*(t); }#else SolvedMatrix& operator*(const BaseMatrix&); // inverse(A) * B ScaledMatrix& operator*(Real t) const { return BaseMatrix::operator*(t); }#endif friend class BaseMatrix; GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); MatrixBandWidth BandWidth() const; NEW_DELETE(InvertedMatrix)};class RowedMatrix : public NegatedMatrix{ RowedMatrix(const BaseMatrix* bmx) : NegatedMatrix(bmx) {} friend class BaseMatrix;public: ~RowedMatrix() {} GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); MatrixBandWidth BandWidth() const; NEW_DELETE(RowedMatrix)};class ColedMatrix : public NegatedMatrix
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -