I want to calculate the eigensystem to some large real symmetric matrices and found the routine DSYEVR should suit my needs.
dsyevr (JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, ISUPPZ, WORK, LWORK, IWORK, LIWORK, INFO)
While including and testing this routine, I noticed the parameter isuppz
which is an integer array of length 2*m
, where m
specifies the number of calculated eigenvalues (which might change depending on the input data).
According to the documentation, the array isuppz
specifies the position of non-zero elements in the array of eigenvectors z
. I.e. in particular, the i
th eigenvector has non-zero elements between positions isuppz(2*i-1)
and isuppz(2*i)
.
Now, I have the problem, that this doesn't really match my observations. E.g. while calculating the eigensystem to an example system of size N=400
, the second eigenvector has, according to isuppz
, only non-zero elements between positions 349
and 400
. Looking at the eigenvector, I can see, that this is clearly not the case, and comparing with Mathematica
, I can clearly see, that this shouldn't be the case, too.
Actually, the eigensystem from DSYEVR
is in principle the same as the eigensystem calculated by Mathematica
. As a result, I assume that there is nothing wrong in general.
So, what is the actual meaning of the parameter isuppz
?