📄 newmat.h
字号:
//$$ newmat.h definition file for new version of matrix package// Copyright (C) 1991,2,3,4,7,2000: R B Davies#ifndef NEWMAT_LIB#define NEWMAT_LIB 0#include "include.h"#include "boolean.h"#include "myexcept.h"#ifdef use_namespacenamespace NEWMAT { using namespace RBD_COMMON; }namespace RBD_LIBRARIES { using namespace NEWMAT; }namespace NEWMAT {#endif// #define DO_REPORT // to activate REPORT#ifdef NO_LONG_NAMES#define UpperTriangularMatrix UTMatrix#define LowerTriangularMatrix LTMatrix#define SymmetricMatrix SMatrix#define DiagonalMatrix DMatrix#define BandMatrix BMatrix#define UpperBandMatrix UBMatrix#define LowerBandMatrix LBMatrix#define SymmetricBandMatrix SBMatrix#define BandLUMatrix BLUMatrix#endif#ifndef TEMPS_DESTROYED_QUICKLY_R#define ReturnMatrix ReturnMatrixX#else#define ReturnMatrix ReturnMatrixX&#endif// ************************** general utilities ****************************/class GeneralMatrix;void MatrixErrorNoSpace(void*); // no space handlerclass LogAndSign// Return from LogDeterminant function// - value of the log plus the sign (+, - or 0){ Real log_value; int sign;public: LogAndSign() { log_value=0.0; sign=1; } LogAndSign(Real); void operator*=(Real); void ChangeSign() { sign = -sign; } Real LogValue() const { return log_value; } int Sign() const { return sign; } Real Value() const; FREE_CHECK(LogAndSign)};// the following class is for counting the number of times a piece of code// is executed. It is used for locating any code not executed by test// routines. Use turbo GREP locate all places this code is called and// check which ones are not accessed.// Somewhat implementation dependent as it relies on "cout" still being// present when ExeCounter objects are destructed.#ifdef DO_REPORTclass ExeCounter{ int line; // code line number int fileid; // file identifier long nexe; // number of executions static int nreports; // number of reportspublic: ExeCounter(int,int); void operator++() { nexe++; } ~ExeCounter(); // prints out reports};#endif// ************************** class MatrixType *****************************/// Is used for finding the type of a matrix resulting from the binary operations// +, -, * and identifying what conversions are permissible.// This class must be updated when new matrix types are added.class GeneralMatrix; // defined laterclass BaseMatrix; // defined laterclass MatrixInput; // defined laterclass MatrixType{public: enum Attribute { Valid = 1, Diagonal = 2, // order of these is important Symmetric = 4, Band = 8, Lower = 16, Upper = 32, LUDeco = 64 }; enum { US = 0, UT = Valid + Upper, LT = Valid + Lower, Rt = Valid, Sm = Valid + Symmetric, Dg = Valid + Diagonal + Band + Lower + Upper + Symmetric, RV = Valid, // do not separate out CV = Valid, // vectors BM = Valid + Band, UB = Valid + Band + Upper, LB = Valid + Band + Lower, SB = Valid + Band + Symmetric, Ct = Valid + LUDeco, BC = Valid + Band + LUDeco }; static int nTypes() { return 9; } // number of different types // exclude Ct, US, BCpublic: int attribute; bool DataLossOK; // true if data loss is OK when // this represents a destinationpublic: MatrixType () : DataLossOK(false) {} MatrixType (int i) : attribute(i), DataLossOK(false) {} MatrixType (int i, bool dlok) : attribute(i), DataLossOK(dlok) {} MatrixType (const MatrixType& mt) : attribute(mt.attribute), DataLossOK(mt.DataLossOK) {} void operator=(const MatrixType& mt) { attribute = mt.attribute; DataLossOK = mt.DataLossOK; } void SetDataLossOK() { DataLossOK = true; } int operator+() const { return attribute; } MatrixType operator+(MatrixType mt) const { return MatrixType(attribute & mt.attribute); } MatrixType operator*(const MatrixType&) const; MatrixType SP(const MatrixType&) const; MatrixType operator|(const MatrixType& mt) const { return MatrixType(attribute & mt.attribute & Valid); } MatrixType operator&(const MatrixType& mt) const { return MatrixType(attribute & mt.attribute & Valid); } bool operator>=(MatrixType mt) const { return ( attribute & mt.attribute ) == attribute; } bool operator<(MatrixType mt) const // for MS Visual C++ 4 { return ( attribute & mt.attribute ) != attribute; } bool operator==(MatrixType t) const { return (attribute == t.attribute); } bool operator!=(MatrixType t) const { return (attribute != t.attribute); } bool operator!() const { return (attribute & Valid) == 0; } MatrixType i() const; // type of inverse MatrixType t() const; // type of transpose MatrixType AddEqualEl() const // Add constant to matrix { return MatrixType(attribute & (Valid + Symmetric)); } MatrixType MultRHS() const; // type for rhs of multiply MatrixType sub() const // type of submatrix { return MatrixType(attribute & Valid); } MatrixType ssub() const // type of sym submatrix { return MatrixType(attribute); } // not for selection matrix GeneralMatrix* New() const; // new matrix of given type GeneralMatrix* New(int,int,BaseMatrix*) const; // new matrix of given type const char* Value() const; // to print type friend bool Rectangular(MatrixType a, MatrixType b, MatrixType c); friend bool Compare(const MatrixType&, MatrixType&); // compare and check conv. bool IsBand() const { return (attribute & Band) != 0; } bool IsDiagonal() const { return (attribute & Diagonal) != 0; } bool CannotConvert() const { return (attribute & LUDeco) != 0; } // used by operator== FREE_CHECK(MatrixType)};// *********************** class MatrixBandWidth ***********************/class MatrixBandWidth{public: int lower; int upper; MatrixBandWidth(const int l, const int u) : lower(l), upper (u) {} MatrixBandWidth(const int i) : lower(i), upper(i) {} MatrixBandWidth operator+(const MatrixBandWidth&) const; MatrixBandWidth operator*(const MatrixBandWidth&) const; MatrixBandWidth minimum(const MatrixBandWidth&) const; MatrixBandWidth t() const { return MatrixBandWidth(upper,lower); } bool operator==(const MatrixBandWidth& bw) const { return (lower == bw.lower) && (upper == bw.upper); } int Upper() const { return upper; } int Lower() const { return lower; } FREE_CHECK(MatrixBandWidth)};// ********************* Array length specifier ************************/// This class is introduced to avoid constructors such as// ColumnVector(int)// being used for conversionsclass ArrayLengthSpecifier{ int value;public: int Value() const { return value; } ArrayLengthSpecifier(int l) : value(l) {}};// ************************* Matrix routines ***************************/class MatrixRowCol; // defined laterclass MatrixRow;class MatrixCol;class MatrixColX;class GeneralMatrix; // defined laterclass AddedMatrix;class MultipliedMatrix;class SubtractedMatrix;class SPMatrix;class ConcatenatedMatrix;class StackedMatrix;class SolvedMatrix;class ShiftedMatrix;class NegShiftedMatrix;class ScaledMatrix;class TransposedMatrix;class ReversedMatrix;class NegatedMatrix;class InvertedMatrix;class RowedMatrix;class ColedMatrix;class DiagedMatrix;class MatedMatrix;class GetSubMatrix;class ReturnMatrixX;class Matrix;class nricMatrix;class RowVector;class ColumnVector;class SymmetricMatrix;class UpperTriangularMatrix;class LowerTriangularMatrix;class DiagonalMatrix;class CroutMatrix;class BandMatrix;class LowerBandMatrix;class UpperBandMatrix;class SymmetricBandMatrix;class LinearEquationSolver;class GenericMatrix;#define MatrixTypeUnSp 0//static MatrixType MatrixTypeUnSp(MatrixType::US);// // AT&T needs thisclass BaseMatrix : public Janitor // base of all matrix classes{protected: virtual int search(const BaseMatrix*) const = 0; // count number of times matrix // is referred topublic: virtual GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp) = 0; // evaluate temporary // for old version of G++ // virtual GeneralMatrix* Evaluate(MatrixType mt) = 0; // GeneralMatrix* Evaluate() { return Evaluate(MatrixTypeUnSp); }#ifndef TEMPS_DESTROYED_QUICKLY AddedMatrix operator+(const BaseMatrix&) const; // results of operations MultipliedMatrix operator*(const BaseMatrix&) const; SubtractedMatrix operator-(const BaseMatrix&) const; ConcatenatedMatrix operator|(const BaseMatrix&) const; StackedMatrix operator&(const BaseMatrix&) const; ShiftedMatrix operator+(Real) const; ScaledMatrix operator*(Real) const; ScaledMatrix operator/(Real) const; ShiftedMatrix operator-(Real) const; TransposedMatrix t() const;// TransposedMatrix t; NegatedMatrix operator-() const; // change sign of elements ReversedMatrix Reverse() const; InvertedMatrix i() const;// InvertedMatrix i; RowedMatrix AsRow() const; ColedMatrix AsColumn() const; DiagedMatrix AsDiagonal() const; MatedMatrix AsMatrix(int,int) const; GetSubMatrix SubMatrix(int,int,int,int) const; GetSubMatrix SymSubMatrix(int,int) const; GetSubMatrix Row(int) const; GetSubMatrix Rows(int,int) const; GetSubMatrix Column(int) const; GetSubMatrix Columns(int,int) const;#else AddedMatrix& operator+(const BaseMatrix&) const; // results of operations MultipliedMatrix& operator*(const BaseMatrix&) const; SubtractedMatrix& operator-(const BaseMatrix&) const; ConcatenatedMatrix& operator|(const BaseMatrix&) const; StackedMatrix& operator&(const BaseMatrix&) const; ShiftedMatrix& operator+(Real) const; ScaledMatrix& operator*(Real) const; ScaledMatrix& operator/(Real) const; ShiftedMatrix& operator-(Real) const; TransposedMatrix& t() const;// TransposedMatrix& t; NegatedMatrix& operator-() const; // change sign of elements ReversedMatrix& Reverse() const; InvertedMatrix& i() const;// InvertedMatrix& i; RowedMatrix& AsRow() const; ColedMatrix& AsColumn() const; DiagedMatrix& AsDiagonal() const; MatedMatrix& AsMatrix(int,int) const; GetSubMatrix& SubMatrix(int,int,int,int) const; GetSubMatrix& SymSubMatrix(int,int) const; GetSubMatrix& Row(int) const; GetSubMatrix& Rows(int,int) const; GetSubMatrix& Column(int) const; GetSubMatrix& Columns(int,int) const;#endif Real AsScalar() const; // conversion of 1 x 1 matrix virtual LogAndSign LogDeterminant() const; Real Determinant() const; virtual Real SumSquare() const; Real NormFrobenius() const;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -