newmat.h
来自「matrix library for linux and windos」· C头文件 代码 · 共 1,758 行 · 第 1/5 页
H
1,758 行
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)};// ************************** special matrices ****************************class IdentityMatrix : public GeneralMatrix{ GeneralMatrix* Image() const; // copy of matrixpublic: IdentityMatrix() {} ~IdentityMatrix() {} IdentityMatrix(ArrayLengthSpecifier n) : GeneralMatrix(1) { nrows = ncols = n.Value(); *store = 1; } IdentityMatrix(const IdentityMatrix& gm) { GetMatrix(&gm); } IdentityMatrix(const BaseMatrix&); void operator=(const BaseMatrix&); void operator=(Real f) { GeneralMatrix::operator=(f); } MatrixType Type() const; LogAndSign LogDeterminant() const; Real Trace() const; Real SumSquare() const; Real SumAbsoluteValue() const; Real Sum() const { return Trace(); } 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 n); void ReSize(const GeneralMatrix& A); MatrixBandWidth BandWidth() const;// ReturnMatrix Reverse() const; // reverse order of elements NEW_DELETE(IdentityMatrix)};// ************************** 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; 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;#ifndef TEMPS_DESTROYED_QUICKLY friend SPMatrix SP(const BaseMatrix&, const BaseMatrix&);#else friend SPMatrix& SP(const BaseMatrix&, const BaseMatrix&);#endif NEW_DELETE(SPMatrix)};class KPMatrix : public MultipliedMatrix{protected: KPMatrix(const BaseMatrix* bm1x, const BaseMatrix* bm2x) : MultipliedMatrix(bm1x,bm2x) {} friend class BaseMatrix; friend class GeneralMatrix; friend class GenericMatrix;public: ~KPMatrix() {} MatrixBandWidth BandWidth() const; GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp);#ifndef TEMPS_DESTROYED_QUICKLY friend KPMatrix KP(const BaseMatrix&, const BaseMatrix&);#else friend KPMatrix& KP(const BaseMatrix&, const BaseMatrix&);#endif NEW_DELETE(KPMatrix)};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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?