Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef MatrixH
00033 #define MatrixH
00034
00035 #include <zeusmath/System/Interfaces/IMatrix.hpp>
00036 #include <zeusmath/System/Vector.h>
00037 #include <zeusbase/System/String.h>
00038
00039
00040 BEGIN_NAMESPACE_Zeus
00041
00042
00045
00046 zeusmath_class TMatrix : public IMatrix
00047 {
00048 public:
00049 TMatrix(Int iRowsColumns = 1);
00050 TMatrix(Int iRows, Int iColumns);
00051 TMatrix(const Float** aafData, Int iRows, Int iColumns);
00052 TMatrix(Float** aafData, Int iRows, Int iColumns, bool bAdoptPointer);
00053 TMatrix(const TString& rstrValues);
00054
00056 inline TMatrix(const TMatrix& rMatrix)
00057 {
00058 m_aafData = NULL;
00059 assign(rMatrix);
00060 }
00061
00063 inline TMatrix(const IMatrix& rMatrix)
00064 {
00065 m_aafData = NULL;
00066 assign(rMatrix);
00067 }
00068
00070 inline virtual ~TMatrix() { releaseDataArray(); }
00071
00072 void assign(Float** aafData, Int iRows, Int iColumns, bool bAdoptPointer);
00073 void assign(const TMatrix& rMatrix);
00074 const Float** getCells() const;
00075 bool reduce(Int iRow, Int iColumn, TMatrix& rMatrix) const;
00076 bool pow(Int iExp, TMatrix& rMatrix) const;
00077 TString toString() const;
00078
00079
00080 virtual void MQUALIFIER assign(const IMatrix& rMatrix);
00081 virtual Float MQUALIFIER calcDeterminant() const;
00082 virtual bool MQUALIFIER calcInverse(IMatrix& rInverseMatrix) const;
00083 virtual void MQUALIFIER calcTransposed(IMatrix& rTransposedMatrix) const;
00084 virtual bool MQUALIFIER equals(const IMatrix& rMatrix, Float fPrecision = FLOAT_PRECISION) const;
00085 virtual Float MQUALIFIER getCell(Int iRow, Int iColumn, bool* pbError = NULL) const;
00086 virtual bool MQUALIFIER getRow(Int iRow, IVector& rVector) const;
00087 virtual bool MQUALIFIER getColumn(Int iColumn, IVector& rVector) const;
00088 virtual bool MQUALIFIER getDiagonalVector(IVector& rDiagVector) const;
00089 virtual Int MQUALIFIER getRowCount() const;
00090 virtual Int MQUALIFIER getColumnCount() const;
00091 virtual void MQUALIFIER initAsIdentityMatrix();
00092 virtual void MQUALIFIER initAsZeroMatrix();
00093 virtual bool MQUALIFIER invert();
00094 virtual bool MQUALIFIER isIdentityMatrix() const;
00095 virtual bool MQUALIFIER isInvertible() const;
00096 virtual bool MQUALIFIER isSquaredMatrix() const;
00097 virtual bool MQUALIFIER isZeroMatrix() const;
00098 virtual bool MQUALIFIER setCell(Int iRow, Int iColumn, const Float& rValue);
00099 virtual bool MQUALIFIER setRow(Int iRow, const IVector& rVector);
00100 virtual bool MQUALIFIER setColumn(Int iColumn, const IVector& rVector);
00101 virtual void MQUALIFIER setDiagonalValue(const Float& fValue);
00102 virtual void MQUALIFIER setDiagonalVector(const IVector& rDiagVector);
00103 virtual Retval MQUALIFIER setDimensions(Int iRows, Int iColumns);
00104 virtual bool MQUALIFIER swapCells(Int iRow1, Int iColumn1, Int iRow2, Int iColumn2);
00105 virtual void MQUALIFIER transpose();
00106 virtual Float MQUALIFIER getEntropy() const;
00107 virtual void MQUALIFIER addConstant(Float fConstant);
00108 virtual void MQUALIFIER multiplyConstant(Float fConstant);
00109
00110
00111 TMatrix operator+(const Float& f) const;
00112 TMatrix operator-(const Float& f) const;
00113 TVector operator*(const IVector& rVector) const;
00114 TMatrix operator*(const TMatrix& rMatrix) const;
00115 TMatrix operator*(const Float& f) const;
00116 TMatrix operator/(const Float& f) const;
00117 const TMatrix& operator+=(const Float& f);
00118 const TMatrix& operator-=(const Float& f);
00119 const TMatrix& operator*=(const Float& f);
00120 const TMatrix& operator/=(const Float& f);
00121
00122
00123 const TMatrix& operator=(const TMatrix& rMatrix);
00124 const TMatrix& operator=(const IMatrix& rMatrix);
00125
00126
00127 bool operator==(const IMatrix& rMatrix) const;
00128 bool operator!=(const IMatrix& rMatrix) const;
00129 Float* operator[](Int iIndex);
00130
00131 protected:
00133 Float** m_aafData;
00135 Int m_iRows;
00137 Int m_iColumns;
00138
00139 void createDataArray();
00140 void createDataArray(const Float** aafData);
00141 void releaseDataArray();
00142
00143 private:
00144
00145 };
00146
00147
00148
00149
00156
00157 inline TMatrix TMatrix::operator-(const Float& f) const
00158 {
00159 TMatrix mRetval(*this);
00160 mRetval.addConstant(-f);
00161 return mRetval;
00162 }
00163
00164
00172
00173 inline TMatrix TMatrix::operator/(const Float& f) const
00174 {
00175 TMatrix mRetval(*this);
00176 mRetval.multiplyConstant(1/f);
00177 return mRetval;
00178 }
00179
00180
00181
00188
00189 inline const TMatrix& TMatrix::operator+=(const Float& f)
00190 {
00191 addConstant(f);
00192 return *this;
00193 }
00194
00195
00202
00203 inline const TMatrix& TMatrix::operator-=(const Float& f)
00204 {
00205 addConstant(-f);
00206 return *this;
00207 }
00208
00209
00217
00218 inline const TMatrix& TMatrix::operator*=(const Float& f)
00219 {
00220 multiplyConstant(f);
00221 return *this;
00222 }
00223
00224
00232
00233 inline const TMatrix& TMatrix::operator/=(const Float& f)
00234 {
00235 multiplyConstant(1/f);
00236 return *this;
00237 }
00238
00239
00246
00247 inline const TMatrix& TMatrix::operator=(const TMatrix& rMatrix)
00248 {
00249 assign(rMatrix);
00250 return *this;
00251 }
00252
00253
00260
00261 inline const TMatrix& TMatrix::operator=(const IMatrix& rMatrix)
00262 {
00263 assign(rMatrix);
00264 return *this;
00265 }
00266
00267
00274
00275 inline bool TMatrix::operator==(const IMatrix& rMatrix) const
00276 {
00277 return equals(rMatrix);
00278 }
00279
00280
00287
00288 inline bool TMatrix::operator!=(const IMatrix& rMatrix) const
00289 {
00290 return !equals(rMatrix);
00291 }
00292
00293
00299
00300 inline Float* TMatrix::operator[](Int iIndex)
00301 {
00302 return m_aafData[iIndex];
00303 }
00304
00305
00310
00311 inline const Float** TMatrix::getCells() const
00312 {
00313 return const_cast<const Float**>(m_aafData);
00314 }
00315
00316
00319
00320 inline Int MQUALIFIER TMatrix::getRowCount() const
00321 {
00322 return m_iRows;
00323 }
00324
00325
00328
00329 inline Int MQUALIFIER TMatrix::getColumnCount() const
00330 {
00331 return m_iColumns;
00332 }
00333
00334
00337
00338 inline bool MQUALIFIER TMatrix::isSquaredMatrix() const
00339 {
00340 return (m_iColumns == m_iRows);
00341 }
00342
00343
00346
00347 inline void MQUALIFIER TMatrix::transpose()
00348 {
00349 calcTransposed(*this);
00350 }
00351
00352
00353 END_NAMESPACE_Zeus
00354
00355 #endif
00356