-
template<typename T>
void laed2(integer *k, integer *n, integer *n1, T *d, T *q, integer *ldq, integer *indxq, T *rho, T *z, T *dlamda, T *w, T *q2, integer *indx, integer *indxc, integer *indxp, integer *coltyp, integer *info)# LAED2 used by sstedc. Merges eigenvalues and deflates secular equation.
Used when the original matrix is tridiagonal.
Purpose:
LAED2 merges the two sets of eigenvalues together into a single sorted set. Then it tries to deflate the size of the problem. There are two ways in which deflation can occur: when two or more eigenvalues are close together or if there is a tiny entry in the Z vector. For each such occurrence the order of the related secular equation problem is reduced by one.
- Parameters:
K – [out]
K is INTEGER
The number of non-deflated eigenvalues, and the order of the related secular equation. 0 <= K <=N.
N – [in]
N is INTEGER
The dimension of the symmetric tridiagonal matrix. N >= 0.
N1 – [in]
N1 is INTEGER
The location of the last eigenvalue in the leading sub-matrix. min(1,N) <= N1 <= N/2.
D – [inout]
D is REAL array, dimension (N)
On entry, D contains the eigenvalues of the two submatrices to be combined.
On exit, D contains the trailing (N-K) updated eigenvalues (those which were deflated) sorted into increasing order.Q – [inout]
Q is REAL array, dimension (LDQ, N)
On entry, Q contains the eigenvectors of two submatrices in the two square blocks with corners at (1,1), (N1,N1) and (N1+1, N1+1), (N,N).
On exit, Q contains the trailing (N-K) updated eigenvectors (those which were deflated) in its last N-K columns.LDQ – [in]
LDQ is INTEGER
The leading dimension of the array Q. LDQ >= fla_max(1,N).
INDXQ – [inout]
INDXQ is INTEGER array, dimension (N)
The permutation which separately sorts the two sub-problems in D into ascending order. Note that elements in the second half of this permutation must first have N1 added to their values. Destroyed on exit.
RHO – [inout]
RHO is REAL
On entry, the off-diagonal element associated with the rank-1 cut which originally split the two submatrices which are now being recombined.
On exit, RHO has been modified to the value required by SLAED3.Z – [in]
Z is REAL array, dimension (N)
On entry, Z contains the updating vector (the last row of the first sub-eigenvector matrix and the first row of the second sub-eigenvector matrix).
On exit, the contents of Z have been destroyed by the updating process.DLAMDA – [out]
DLAMDA is REAL array, dimension (N)
A copy of the first K eigenvalues which will be used by SLAED3 to form the secular equation.
W – [out]
W is REAL array, dimension (N)
The first k values of the final deflation-altered z-vector which will be passed to SLAED3.
Q2 – [out]
Q2 is REAL array, dimension (N1**2+(N-N1)**2)
A copy of the first K eigenvectors which will be used by SLAED3 in a matrix multiply (SGEMM) to solve for the new eigenvectors.
INDX – [out]
INDX is INTEGER array, dimension (N)
The permutation used to sort the contents of DLAMDA into ascending order.
INDXC – [out]
INDXC is INTEGER array, dimension (N)
The permutation used to arrange the columns of the deflated Q matrix into three groups: the first group contains non-zero elements only at and above N1, the second contains non-zero elements only below N1, and the third is dense.
INDXP – [out]
INDXP is INTEGER array, dimension (N)
The permutation used to place deflated values of D at the end of the array. INDXP(1:K) points to the nondeflated D-values and INDXP(K+1:N) points to the deflated eigenvalues.
COLTYP – [out]
COLTYP is INTEGER array, dimension (N)
During execution, a label which will indicate which of the following types a column in the Q2 matrix is:
1 : non-zero in the upper half only;
2 : dense;
3 : non-zero in the lower half only;
4 : deflated.
On exit, COLTYP(i) is the number of columns of type i, for i=1 to 4 only.INFO – [out]
INFO is INTEGER
= 0: successful exit.
< 0: if INFO = -i, the i-th argument had an illegal value.