Logo ROOT   6.08/07
Reference Guide
TDecompQRH.h
Go to the documentation of this file.
1 // @(#)root/matrix:$Id$
2 // Authors: Fons Rademakers, Eddy Offermann Dec 2003
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TDecompQRH
13 #define ROOT_TDecompQRH
14 
15 ///////////////////////////////////////////////////////////////////////////
16 // //
17 // QR Decomposition class //
18 // //
19 ///////////////////////////////////////////////////////////////////////////
20 
21 #ifndef ROOT_TDecompBase
22 #include "TDecompBase.h"
23 #endif
24 
25 class TDecompQRH : public TDecompBase
26 {
27 protected :
28 
29  // A = fQ fR H (m x n) matrix
30  TMatrixD fQ; // (m x n) - orthogonal matrix
31  TMatrixD fR; // (n x n) - upper triangular matrix
32  TVectorD fUp; // (n) - vector with Householder up's
33  TVectorD fW; // (n) - vector with Householder beta's
34 
35  static Bool_t QRH(TMatrixD &q,TVectorD &diagR,TVectorD &up,TVectorD &w,Double_t tol);
36 
37  virtual const TMatrixDBase &GetDecompMatrix() const { return fR; }
38 
39 public :
40 
41  enum {kWorkMax = 100}; // size of work array
42 
44  TDecompQRH(Int_t nrows,Int_t ncols);
45  TDecompQRH(Int_t row_lwb,Int_t row_upb,Int_t col_lwb,Int_t col_upb);
46  TDecompQRH(const TMatrixD &m,Double_t tol = 0.0); // be careful for slicing in operator=
47  TDecompQRH(const TDecompQRH &another);
48  virtual ~TDecompQRH() {}
49 
50  virtual Int_t GetNrows () const { return fQ.GetNrows(); }
51  virtual Int_t GetNcols () const { return fQ.GetNcols(); }
52  virtual const TMatrixD &GetQ () { if ( !TestBit(kDecomposed) ) Decompose();
53  return fQ; }
54  virtual const TMatrixD &GetR () { if ( !TestBit(kDecomposed) ) Decompose();
55  return fR; }
56  virtual const TVectorD &GetUp () { if ( !TestBit(kDecomposed) ) Decompose();
57  return fUp; }
58  virtual const TVectorD &GetW () { if ( !TestBit(kDecomposed) ) Decompose();
59  return fW; }
60 
61  virtual void SetMatrix(const TMatrixD &a);
62 
63  virtual Bool_t Decompose ();
64  virtual Bool_t Solve ( TVectorD &b);
65  virtual TVectorD Solve (const TVectorD& b,Bool_t &ok) { TVectorD x = b; ok = Solve(x); return x; }
66  virtual Bool_t Solve ( TMatrixDColumn &b);
67  virtual Bool_t TransSolve ( TVectorD &b);
68  virtual TVectorD TransSolve (const TVectorD& b,Bool_t &ok) { TVectorD x = b; ok = TransSolve(x); return x; }
69  virtual Bool_t TransSolve ( TMatrixDColumn &b);
70  virtual void Det (Double_t &d1,Double_t &d2);
71 
73  TMatrixD Invert (Bool_t &status);
74  TMatrixD Invert () { Bool_t status; return Invert(status); }
75 
76  void Print(Option_t *opt ="") const; // *MENU*
77 
78  TDecompQRH &operator= (const TDecompQRH &source);
79 
80  ClassDef(TDecompQRH,1) // Matrix Decompositition QRH
81 };
82 
83 #endif
QR Decomposition class.
Definition: TDecompQRH.h:25
virtual const TMatrixDBase & GetDecompMatrix() const
Definition: TDecompQRH.h:37
TMatrixD fQ
Definition: TDecompQRH.h:30
TMatrixD fR
Definition: TDecompQRH.h:31
void Print(Option_t *opt="") const
Print the class members.
Definition: TDecompQRH.cxx:542
const char Option_t
Definition: RtypesCore.h:62
Int_t GetNcols() const
Definition: TMatrixTBase.h:137
Bool_t TestBit(UInt_t f) const
Definition: TObject.h:157
TVectorD fUp
Definition: TDecompQRH.h:32
Decomposition Base class.
Definition: TDecompBase.h:36
double inv(double x)
For comparisons.
Definition: inv.h:58
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
TArc * a
Definition: textangle.C:12
virtual const TMatrixD & GetQ()
Definition: TDecompQRH.h:52
virtual Int_t GetNrows() const
Definition: TDecompQRH.h:50
Double_t x[n]
Definition: legend1.C:17
#define ClassDef(name, id)
Definition: Rtypes.h:254
TDecompQRH & operator=(const TDecompQRH &source)
Assignment operator.
Definition: TDecompQRH.cxx:554
static Bool_t QRH(TMatrixD &q, TVectorD &diagR, TVectorD &up, TVectorD &w, Double_t tol)
Decomposition function .
Definition: TDecompQRH.cxx:182
virtual const TVectorD & GetUp()
Definition: TDecompQRH.h:56
virtual const TVectorD & GetW()
Definition: TDecompQRH.h:58
virtual ~TDecompQRH()
Definition: TDecompQRH.h:48
TVectorD fW
Definition: TDecompQRH.h:33
virtual Bool_t Decompose()
QR decomposition of matrix a by Householder transformations, see Golub & Loan first edition p41 & Sec...
Definition: TDecompQRH.cxx:143
const double tol
virtual Bool_t Solve(TVectorD &b)
Solve Ax=b assuming the QR form of A is stored in fR,fQ and fW, but assume b has not been transformed...
Definition: TDecompQRH.cxx:249
TMatrixD Invert()
Definition: TDecompQRH.h:74
TMarker * m
Definition: textangle.C:8
virtual void Det(Double_t &d1, Double_t &d2)
This routine calculates the absolute (!) value of the determinant |det| = d1*TMath::Power(2.,d2)
Definition: TDecompQRH.cxx:486
Linear Algebra Package.
Int_t GetNrows() const
Definition: TMatrixTBase.h:134
virtual TVectorD TransSolve(const TVectorD &b, Bool_t &ok)
Definition: TDecompQRH.h:68
virtual Bool_t TransSolve(TVectorD &b)
Solve A^T x=b assuming the QR form of A is stored in fR,fQ and fW, but assume b has not been transfor...
Definition: TDecompQRH.cxx:363
double Double_t
Definition: RtypesCore.h:55
virtual const TMatrixD & GetR()
Definition: TDecompQRH.h:54
virtual Int_t GetNcols() const
Definition: TDecompQRH.h:51
virtual TVectorD Solve(const TVectorD &b, Bool_t &ok)
Definition: TDecompQRH.h:65
virtual void SetMatrix(const TMatrixD &a)
Set matrix to be decomposed.
Definition: TDecompQRH.cxx:215
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Definition: TRolke.cxx:630
float * q
Definition: THbookFile.cxx:87