Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
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#include "TDecompBase.h"
22
23#include "Rtypes.h"
24
25class TDecompQRH : public TDecompBase
26{
27protected :
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 const TMatrixDBase &GetDecompMatrix() const override { return fR; }
38
39public :
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 ~TDecompQRH() override {}
49
50 Int_t GetNrows () const override { return fQ.GetNrows(); }
51 Int_t GetNcols () const override { 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
62 const TMatrixD &GetTriangularMatrix() const { return fR; }
63
64 virtual void SetMatrix(const TMatrixD &a);
65
66 Bool_t Decompose () override;
67 Bool_t Solve ( TVectorD &b) override;
68 TVectorD Solve (const TVectorD& b,Bool_t &ok) override { TVectorD x = b; ok = Solve(x); return x; }
69 Bool_t Solve ( TMatrixDColumn &b) override;
70 Bool_t TransSolve ( TVectorD &b) override;
71 TVectorD TransSolve (const TVectorD& b,Bool_t &ok) override { TVectorD x = b; ok = TransSolve(x); return x; }
72 Bool_t TransSolve ( TMatrixDColumn &b) override;
73 void Det (Double_t &d1,Double_t &d2) override;
74
76 TMatrixD Invert (Bool_t &status);
77 TMatrixD Invert () { Bool_t status; return Invert(status); }
78
79 void Print(Option_t *opt ="") const override; // *MENU*
80
81 TDecompQRH &operator= (const TDecompQRH &source);
82
83 ClassDefOverride(TDecompQRH,1) // Matrix Decompositition QRH
84};
85
86#endif
#define b(i)
Definition RSha256.hxx:100
#define a(i)
Definition RSha256.hxx:99
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
double Double_t
Definition RtypesCore.h:59
const char Option_t
Definition RtypesCore.h:66
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
float * q
Decomposition Base class.
Definition TDecompBase.h:34
QR Decomposition class.
Definition TDecompQRH.h:26
virtual void SetMatrix(const TMatrixD &a)
Set matrix to be decomposed.
virtual const TVectorD & GetW()
Definition TDecompQRH.h:58
TMatrixD Invert()
Definition TDecompQRH.h:77
virtual const TMatrixD & GetR()
Definition TDecompQRH.h:54
Bool_t Solve(TVectorD &b) override
Solve Ax=b assuming the QR form of A is stored in fR,fQ and fW, but assume b has not been transformed...
Int_t GetNrows() const override
Definition TDecompQRH.h:50
void Print(Option_t *opt="") const override
Print the class members.
void Det(Double_t &d1, Double_t &d2) override
This routine calculates the absolute (!) value of the determinant |det| = d1*TMath::Power(2....
TDecompQRH & operator=(const TDecompQRH &source)
Assignment operator.
TMatrixD GetOrthogonalMatrix() const
For a matrix A(m,n), return the OtrhogonalMatrix Q such as A = Q * R.
TVectorD Solve(const TVectorD &b, Bool_t &ok) override
Definition TDecompQRH.h:68
TMatrixD fQ
Definition TDecompQRH.h:30
const TMatrixDBase & GetDecompMatrix() const override
Definition TDecompQRH.h:37
virtual const TVectorD & GetUp()
Definition TDecompQRH.h:56
TMatrixD fR
Definition TDecompQRH.h:31
static Bool_t QRH(TMatrixD &q, TVectorD &diagR, TVectorD &up, TVectorD &w, Double_t tol)
Decomposition function .
Bool_t Decompose() override
QR decomposition of matrix a by Householder transformations, see Golub & Loan first edition p41 & Sec...
TVectorD fW
Definition TDecompQRH.h:33
virtual const TMatrixD & GetQ()
Definition TDecompQRH.h:52
const TMatrixD & GetTriangularMatrix() const
Definition TDecompQRH.h:62
TVectorD TransSolve(const TVectorD &b, Bool_t &ok) override
Definition TDecompQRH.h:71
Int_t GetNcols() const override
Definition TDecompQRH.h:51
TVectorD fUp
Definition TDecompQRH.h:32
~TDecompQRH() override
Definition TDecompQRH.h:48
Bool_t TransSolve(TVectorD &b) override
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...
Int_t GetNrows() const
Int_t GetNcols() const
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
Definition TObject.h:199
Double_t x[n]
Definition legend1.C:17
void inv(rsa_NUMBER *, rsa_NUMBER *, rsa_NUMBER *)
Definition rsaaux.cxx:949
TMarker m
Definition textangle.C:8