#ifndef ROOT_TDecompBase
#define ROOT_TDecompBase
#include <limits>
#ifndef ROOT_TMatrixD
#include "TMatrixD.h"
#endif
#ifndef ROOT_TMatrixDUtils
#include "TMatrixDUtils.h"
#endif
#ifndef ROOT_TVectorD
#include "TVectorD.h"
#endif
class TDecompBase : public TObject
{
protected :
   Double_t fTol;       
   Double_t fDet1;      
   Double_t fDet2;      
   Double_t fCondition; 
   Int_t    fRowLwb;    
   Int_t    fColLwb;    
   void          ResetStatus() { for (Int_t i = 14; i < 22; i++) ResetBit(BIT(i)); }
   Int_t         Hager      (Double_t& est,Int_t iter=5);
   static  void  DiagProd   (const TVectorD &diag,Double_t tol,Double_t &d1,Double_t &d2);
   virtual const TMatrixDBase &GetDecompMatrix() const = 0;
   enum EMatrixDecompStat {
      kInit       = BIT(14),
      kPatternSet = BIT(15),
      kValuesSet  = BIT(16),
      kMatrixSet  = BIT(17),
      kDecomposed = BIT(18),
      kDetermined = BIT(19),
      kCondition  = BIT(20),
      kSingular   = BIT(21)
   };
   enum {kWorkMax = 100}; 
public :
   TDecompBase();
   TDecompBase(const TDecompBase &another);
   virtual ~TDecompBase() {};
   inline  Double_t GetTol       () const { return fTol; }
   inline  Double_t GetDet1      () const { return fDet1; }
   inline  Double_t GetDet2      () const { return fDet2; }
   inline  Double_t GetCondition () const { return fCondition; }
   virtual Int_t    GetNrows     () const = 0;
   virtual Int_t    GetNcols     () const = 0;
   Int_t            GetRowLwb    () const { return fRowLwb; }
   Int_t            GetColLwb    () const { return fColLwb; }
   inline Double_t  SetTol       (Double_t tol);
   virtual Double_t Condition  ();
   virtual void     Det        (Double_t &d1,Double_t &d2);
   virtual Bool_t   Decompose  ()                             = 0;
   virtual Bool_t   Solve      (      TVectorD &b)            = 0;
   virtual TVectorD Solve      (const TVectorD& b,Bool_t &ok) = 0;
   virtual Bool_t   Solve      (      TMatrixDColumn& b)      = 0;
   virtual Bool_t   TransSolve (      TVectorD &b)            = 0;
   virtual TVectorD TransSolve (const TVectorD &b,Bool_t &ok) = 0;
   virtual Bool_t   TransSolve (      TMatrixDColumn& b)      = 0;
   virtual Bool_t   MultiSolve (TMatrixD &B);
   void Print(Option_t *opt="") const;
   TDecompBase &operator= (const TDecompBase &source);
   ClassDef(TDecompBase,2) 
};
Double_t TDecompBase::SetTol(Double_t newTol) 
{
   const Double_t oldTol = fTol; 
   if (newTol >= 0.0) 
      fTol = newTol; 
   return oldTol; 
}
Bool_t DefHouseHolder  (const TVectorD &vc,Int_t     lp,Int_t     l,Double_t &up,Double_t &b,Double_t tol=0.0);
void   ApplyHouseHolder(const TVectorD &vc,Double_t  up,Double_t  b,Int_t     lp,Int_t     l,TMatrixDRow &cr);
void   ApplyHouseHolder(const TVectorD &vc,Double_t  up,Double_t  b,Int_t     lp,Int_t     l,TMatrixDColumn &cc);
void   ApplyHouseHolder(const TVectorD &vc,Double_t  up,Double_t  b,Int_t     lp,Int_t     l,TVectorD &cv);
void   DefGivens       (      Double_t  v1,Double_t  v2,Double_t &c,Double_t &s);
void   DefAplGivens    (      Double_t &v1,Double_t &v2,Double_t &c,Double_t &s);
void   ApplyGivens     (      Double_t &z1,Double_t &z2,Double_t  c,Double_t  s);
#endif
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.