00001 #ifndef __NEW_MAT_CROUT_MATIX_H__ 00002 #define __NEW_MAT_CROUT_MATIX_H__ 00003 00007 class CroutMatrix : public GeneralMatrix 00008 { 00009 int* indx; 00010 bool d; // number of row swaps = even or odd 00011 bool sing; 00012 void ludcmp(); 00013 void get_aux(CroutMatrix&); // for copying indx[] etc 00014 GeneralMatrix* Image() const; // copy of matrix 00015 public: 00016 CroutMatrix(const BaseMatrix&); 00017 CroutMatrix() : indx(0), d(true), sing(true) {} 00018 CroutMatrix(const CroutMatrix&); 00019 void operator=(const CroutMatrix&); 00020 GeneralMatrix* Evaluate(MatrixType mt=MatrixTypeUnSp); 00021 MatrixType type() const; 00022 void lubksb(Real*, int=0); 00023 ~CroutMatrix(); 00024 GeneralMatrix* MakeSolver() { return this; } // for solving 00025 LogAndSign log_determinant() const; 00026 void Solver(MatrixColX&, const MatrixColX&); 00027 void GetRow(MatrixRowCol&); 00028 void GetCol(MatrixRowCol&); 00029 void GetCol(MatrixColX& c) { GetCol((MatrixRowCol&)c); } 00030 void cleanup(); // to clear store 00031 void MiniCleanUp(); 00032 bool IsEqual(const GeneralMatrix&) const; 00033 bool is_singular() const { return sing; } 00034 bool IsSingular() const { return sing; } 00035 const int* const_data_indx() const { return indx; } 00036 bool even_exchanges() const { return d; } 00037 void swap(CroutMatrix& gm); 00038 NEW_DELETE(CroutMatrix) 00039 }; 00040 00041 #endif 00042