00001 #ifndef __NEW_MAT_IDENTITY_MATRIX_H__ 00002 #define __NEW_MAT_IDENTITY_MATRIX_H__ 00003 00005 class IdentityMatrix : public GeneralMatrix 00006 { 00007 GeneralMatrix* Image() const; // copy of matrix 00008 public: 00009 IdentityMatrix() {} 00010 ~IdentityMatrix() {} 00011 IdentityMatrix(ArrayLengthSpecifier n) : GeneralMatrix(1) 00012 { nrows_val = ncols_val = n.Value(); *store = 1; } 00013 IdentityMatrix(const IdentityMatrix& gm) 00014 : GeneralMatrix() { GetMatrix(&gm); } 00015 IdentityMatrix(const BaseMatrix&); 00016 void operator=(const BaseMatrix&); 00017 void operator=(const IdentityMatrix& m) { Eq(m); } 00018 void operator=(Real f) { GeneralMatrix::operator=(f); } 00019 MatrixType type() const; 00020 00021 LogAndSign log_determinant() const; 00022 Real trace() const; 00023 Real sum_square() const; 00024 Real sum_absolute_value() const; 00025 Real sum() const { return trace(); } 00026 void GetRow(MatrixRowCol&); 00027 void GetCol(MatrixRowCol&); 00028 void GetCol(MatrixColX&); 00029 void NextRow(MatrixRowCol&); 00030 void NextCol(MatrixRowCol&); 00031 void NextCol(MatrixColX&); 00032 GeneralMatrix* MakeSolver() { return this; } // for solving 00033 void Solver(MatrixColX&, const MatrixColX&); 00034 GeneralMatrix* Transpose(TransposedMatrix*, MatrixType); 00035 void resize(int n); 00036 void ReSize(int n) { resize(n); } 00037 void resize(const GeneralMatrix& A); 00038 void ReSize(const GeneralMatrix& A) { resize(A); } 00039 MatrixBandWidth bandwidth() const; 00040 // ReturnMatrix Reverse() const; // reverse order of elements 00041 void swap(IdentityMatrix& gm) 00042 { GeneralMatrix::swap((GeneralMatrix&)gm); } 00043 NEW_DELETE(IdentityMatrix) 00044 }; 00045 00046 00047 #endif 00048