 # TDecompQRH - how to use the householder decomposition?

Hi,

I want to use ROOT to decompose a general (mxn) matrix via householder transformations. (m > n)

I have an object QRH of the type TDecompQRH initialised with a Matrix A that I want to decompose. I do:

``QRH->Decompose()``

and make sure it suceeded.
After that I took a look at the stored matrices Q and R and especially QR which looks quite different from the initial A. A had strict band structure and only positive elements, QR is a lot more entries, of which quite some are negative.

Looking at the header of TDecompQRH I found this as the only documentation on the class:

[quote]Decompose a general (m x n) matrix A into A = fQ fR H where

fQ : (m x n) - orthogonal matrix
fR : (n x n) - upper triangular matrix
H : HouseHolder matrix which is stored through
fUp: (n) - vector with Householder up’s
fW : (n) - vector with Householder beta’s
[/quote]

and a reference to a paper I don’t have accessible, which would probably explain the documentation…

Now what is H? After all I read about the QR decomposition of a matrix one should have a series of householder matrices Q_i forming a final matrix Q and, in addition, the upper triang. matrix R.

I have built H from fUp and fW but can’t make any sense out of it. Is there anything else to do?

Thanks for any hints…

Hi Felix,

I guess you are asking for how to reconstruct the orginal
matrix from the decomposed results . This has been
implemented in most classes from TDecompBase through
the procedure “GetMatrix” but is missing in TDecompQRH .

I will see if I can get that coded .

The reference you mention (Golub & Loan) is standard linear
algebra book :

referenced [url]
amazon.com/Computations-Hopk … 431&sr=8-1

[/url]

Eddy

Wwhat I did was just a consistency check. I wanted to see if the decomposed result gives back the original matrix, like A = QR or A = QRH suggests to be able to better understand why I do not get the results I expect.

Thanks for the link, but unfortunately I can"t get my hands on that book fast enough. What I need is a A = QR decomposition of a mxn matrix - can TDecompQRH do that for me? I do not understand the role of H. A quick fundamental comment would help very much I think.

Felix,

It is about 4 years ago that I coded this class and I will have to refresh
my memory about the storage of the decomposed elements .

You might get a hint from the Solve routine, where the
results are used to solve the Ax=b equation .

In particular take a look at the lines :

``````   for (Int_t k = 0; k < nQ; k++) {
const TVectorD qc_k = TMatrixDColumn_const(fQ,k);
ApplyHouseHolder(qc_k,fUp(k),fW(k),k,k+1,b);
}``````

which hints at the calculation of the Q_i matrices .

Again, I hope I can get a GetMatrix routine coded that
will make the role of the different elements more clear .

Eddy

Ok, I solved it. In principle my code was right all the time (writing a fitter here…) but unstable. A significant raise in the data density solved my issue. I just had a hard time bugfixing without any output, I am not a big fan of blackboxes of any sort Anyway, thank you for your time and have a nice… uhm… morning in NY 