There seems to be an inconsistency in the documentation of ?syrdb(https://software.intel.com/en-us/node/469030)
I've attached my program which you are free to change and is written in Fortran 90. It generates a random symmetric matrix A and tries to reduce it to the banded matrix B, of specified bandwidth. Make sure to compile it with the -mkl flag
On setting the flag jobz to 'U', I am expected to
- A is supposed to be overwritten by the banded matrix B. It doesn't seem to be the case as I still get a full matrix.
- The documentation says it will be overwritten by QB as well, which doesn't make sense as there is one matrix already.
- Z is written by Q - which is correct as QTAQ gives me a tridiagonal matrix.
I would like access to QB such that QTBAQB = B. Could you look into the algorithm (and my program if necessary) to find out the issue?
Many Lapack routines use rather complex but compact representations of matrices. If that is not kept in mind, the documentation can be confusing. Because of the various combinations of options such as UPLO and JOBZ, there is a single subroutine with different personalities whose descriptions gets interwoven and, again, this can be confusing.
In the case of ?syrdb, the given symmetric matrix A is first reduced to a band matrix B and then to a tridiagonal matrix T. I think that you confuse B with T -- the former is an intermediate result that you probably have no use for, and the latter is not returned as a two-dimensional array, as one may reasonably expect, but as a pair of one-dimensional arrays, D(:) and E(:).
Along the same lines, a phrase such as "A is reduced to T" describes what the algorithm does, and should not be understood to say "A is replaced by T" at exit.
I think that you confuse B with T -- the former is an intermediate result that you probably have no use for
No. That is exactly what I am looking for. I need an algorithm which uses a set of orthogonal transformations to reduce a full matrix to a banded matrix of specific bandwidth.
Is there a way in which I can recover B from the `dsyrdb` routine? There should be if the routine behaves in the way it is in the documentation
, then overwritten by the banded matrix B and details of the orthogonal matrix Q to reduce A to B as specified by .
Neither do I see B nor do I see QB. I don't understand what the documentation means by 'the banded matrix and details' overwritten to the same matrix.