lasq2#
Functions
-
void slasq2(const INT n, f32 *restrict Z, INT *info)#
SLASQ2 computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated with the qd array
Zto high relative accuracy are computed to high relative accuracy, in the absence of denormalization, underflow and overflow.To see the relation of
Zto the tridiagonal matrix, let L be a unit lower bidiagonal matrix with subdiagonalsZ[1,3,5,..]and let U be an upper bidiagonal matrix with 1’s above and diagonalZ[0,2,4,..]. The tridiagonal is L*U or, if you prefer, the symmetric tridiagonal to which it is similar.Note : SLASQ2 defines a logical variable,
ieee, which is true on machines which follow ieee-754 floating-point standard in their handling of infinities and NaNs, and false otherwise. This variable is passed to SLASQ3.- Further Details:
Local Variables:
i0:n0defines a current unreduced segment ofZ. The shifts are accumulated insigma. Iteration count is initer. Ping-pong is controlled bypp(alternates between 0 and 1).
Parameters
innThe number of rows and columns in the matrix.
n>=0.inoutZSingle precision array, dimension (4*n). On entry
Zholds the qd array. On exit, entries0ton-1hold the eigenvalues in decreasing order,Z[2*n]holds the trace, andZ[2*n+1]holds the sum of the eigenvalues. Ifn>2, thenZ[2*n+2]holds the iteration count,Z[2*n+3]holds NDIVS/NIN^2, andZ[2*n+4]holds the percentage of shifts that failed.outinfoinfo=0: successful exitinfo<0: if the i-th argument is a scalar and had an illegal value, theninfo=-i, if the i-th argument is an array and the j-entry had an illegal value, theninfo=-(i*100+j)info>0: the algorithm failedinfo=1, a split was marked by a positive value in Einfo=2, current block ofZnot diagonalized after100*niterations (in inner while loop). On exitZholds a qd array with the same eigenvalues as the givenZ.info=3, termination criterion of outer while loop not met (program created more thannunreduced blocks)
void slasq2(
const INT n,
f32* restrict Z,
INT* info
);
Functions
-
void dlasq2(const INT n, f64 *restrict Z, INT *info)#
DLASQ2 computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated with the qd array
Zto high relative accuracy are computed to high relative accuracy, in the absence of denormalization, underflow and overflow.To see the relation of
Zto the tridiagonal matrix, let L be a unit lower bidiagonal matrix with subdiagonalsZ[1,3,5,..]and let U be an upper bidiagonal matrix with 1’s above and diagonalZ[0,2,4,..]. The tridiagonal is L*U or, if you prefer, the symmetric tridiagonal to which it is similar.Note : DLASQ2 defines a logical variable,
ieee, which is true on machines which follow ieee-754 floating-point standard in their handling of infinities and NaNs, and false otherwise. This variable is passed to DLASQ3.- Further Details:
Local Variables:
i0:n0defines a current unreduced segment ofZ. The shifts are accumulated insigma. Iteration count is initer. Ping-pong is controlled bypp(alternates between 0 and 1).
Parameters
innThe number of rows and columns in the matrix.
n>=0.inoutZDouble precision array, dimension (4*n). On entry
Zholds the qd array. On exit, entries0ton-1hold the eigenvalues in decreasing order,Z[2*n]holds the trace, andZ[2*n+1]holds the sum of the eigenvalues. Ifn>2, thenZ[2*n+2]holds the iteration count,Z[2*n+3]holds NDIVS/NIN^2, andZ[2*n+4]holds the percentage of shifts that failed.outinfoinfo=0: successful exitinfo<0: if the i-th argument is a scalar and had an illegal value, theninfo=-i, if the i-th argument is an array and the j-entry had an illegal value, theninfo=-(i*100+j)info>0: the algorithm failedinfo=1, a split was marked by a positive value in Einfo=2, current block ofZnot diagonalized after100*niterations (in inner while loop). On exitZholds a qd array with the same eigenvalues as the givenZ.info=3, termination criterion of outer while loop not met (program created more thannunreduced blocks)
void dlasq2(
const INT n,
f64* restrict Z,
INT* info
);