00001 #ifndef __NEW_MAT_SYMMETRIX_MATRIX_H__ 00002 #define __NEW_MAT_SYMMETRIX_MATRIX_H__ 00003 00005 class SymmetricMatrix : public GeneralMatrix 00006 { 00007 GeneralMatrix* Image() const; // copy of matrix 00008 public: 00009 SymmetricMatrix() {} 00010 ~SymmetricMatrix() {} 00011 SymmetricMatrix(ArrayLengthSpecifier); 00012 SymmetricMatrix(const BaseMatrix&); 00013 void operator=(const BaseMatrix&); 00014 void operator=(Real f) { GeneralMatrix::operator=(f); } 00015 void operator=(const SymmetricMatrix& m) { Eq(m); } 00016 Real& operator()(int, int); // access element 00017 Real& element(int, int); // access element 00018 Real operator()(int, int) const; // access element 00019 Real element(int, int) const; // access element 00020 #ifdef SETUP_C_SUBSCRIPTS 00021 Real* operator[](int m) { return store+(m*(m+1))/2; } 00022 const Real* operator[](int m) const { return store+(m*(m+1))/2; } 00023 #endif 00024 MatrixType type() const; 00025 SymmetricMatrix(const SymmetricMatrix& gm) 00026 : GeneralMatrix() { GetMatrix(&gm); } 00027 Real sum_square() const; 00028 Real sum_absolute_value() const; 00029 Real sum() const; 00030 Real trace() const; 00031 void GetRow(MatrixRowCol&); 00032 void GetCol(MatrixRowCol&); 00033 void GetCol(MatrixColX&); 00034 void RestoreCol(MatrixRowCol&) {} 00035 void RestoreCol(MatrixColX&); 00036 GeneralMatrix* Transpose(TransposedMatrix*, MatrixType); 00037 void resize(int); // change dimensions 00038 void ReSize(int m) { resize(m); } 00039 void resize_keep(int); 00040 void resize(const GeneralMatrix& A); 00041 void ReSize(const GeneralMatrix& A) { resize(A); } 00042 void operator+=(const SymmetricMatrix& M) { PlusEqual(M); } 00043 void operator-=(const SymmetricMatrix& M) { MinusEqual(M); } 00044 void operator+=(Real f) { GeneralMatrix::Add(f); } 00045 void operator-=(Real f) { GeneralMatrix::Add(-f); } 00046 void swap(SymmetricMatrix& gm) { GeneralMatrix::swap((GeneralMatrix&)gm); } 00047 NEW_DELETE(SymmetricMatrix) 00048 }; 00049 00050 #endif 00051