MAGMA
2.3.0
Matrix Algebra for GPU and Multicore Architectures

Functions  
magma_int_t  magma_dlaqtrsd (magma_trans_t trans, magma_int_t n, const double *T, magma_int_t ldt, double *x, magma_int_t ldx, const double *cnorm, magma_int_t *info) 
DLAQTRSD is used by DTREVC to solve one of the (singular) quasitriangular systems with modified diagonal (T  lambda*I) * x = 0 or (T  lambda*I)**T * x = 0 with scaling to prevent overflow. More...  
magma_int_t  magma_slaqtrsd (magma_trans_t trans, magma_int_t n, const float *T, magma_int_t ldt, float *x, magma_int_t ldx, const float *cnorm, magma_int_t *info) 
SLAQTRSD is used by STREVC to solve one of the (singular) quasitriangular systems with modified diagonal (T  lambda*I) * x = 0 or (T  lambda*I)**T * x = 0 with scaling to prevent overflow. More...  
magma_int_t magma_dlaqtrsd  (  magma_trans_t  trans, 
magma_int_t  n,  
const double *  T,  
magma_int_t  ldt,  
double *  x,  
magma_int_t  ldx,  
const double *  cnorm,  
magma_int_t *  info  
) 
DLAQTRSD is used by DTREVC to solve one of the (singular) quasitriangular systems with modified diagonal (T  lambda*I) * x = 0 or (T  lambda*I)**T * x = 0 with scaling to prevent overflow.
Here T is an upper quasitriangular matrix with 1x1 or 2x2 diagonal blocks, A**T denotes the transpose of A, and x is an nelement real or complex vector. The eigenvalue lambda is computed from the block diagonal of T. It does not modify T during the computation.
If trans = MagmaNoTrans, lambda is an eigenvalue for the lower 1x1 or 2x2 block, and it solves ( [ That u ]  lambda*I ) * x = 0, ( [ 0 lambda ] ) which becomes (That  lambda*I) * w = s*u, with x = [ w; 1 ] and scaling s. If the lower block is 1x1, lambda and x are real; if the lower block is 2x2, lambda and x are complex.
If trans = MagmaTrans, lambda is an eigenvalue for the upper 1x1 or 2x2 block, and it solves ( [ lambda v^T ]  lambda I )**T * x = 0, ( [ 0 That ] ) which becomes (That  lambda*I)**T * w = s*v, with x = [ 1; w ] and scaling s. If the upper block is 1x1, lambda and x are real; if the upper block is 2x2, lambda and x are complex.
[in]  trans  magma_trans_t Specifies the operation applied to T.

[in]  n  INTEGER The order of the matrix T. N >= 0. 
[in]  T  DOUBLE PRECISION array, dimension (LDT,N) The triangular matrix T. The leading n by n upper triangular part of the array T contains the upper triangular matrix, and the strictly lower triangular part of T is not referenced. 
[in]  ldt  INTEGER The leading dimension of the array T. LDT >= max (1,N). 
[out]  x  DOUBLE PRECISION array, dimension (LDX,1) or (LDX,2). On exit, X is overwritten by the solution vector x. If LAMBDAI .EQ. 0, X is real and has dimension (LDX,1). If LAMBDAI .NE. 0, X is complex and has dimension (LDX,2); the real part is in X(:,0), the imaginary part in X(:,1). 
[in]  ldx  INTEGER The leading dimension of the array X. LDX >= max(1,N). 
[in,out]  cnorm  (input) DOUBLE PRECISION array, dimension (N) CNORM(j) contains the norm of the offdiagonal part of the jth column of T. If TRANS = MagmaNoTrans, CNORM(j) must be greater than or equal to the infinitynorm, and if TRANS = MagmaTrans or MagmaConjTrans, CNORM(j) must be greater than or equal to the 1norm. 
[out]  info  INTEGER

magma_int_t magma_slaqtrsd  (  magma_trans_t  trans, 
magma_int_t  n,  
const float *  T,  
magma_int_t  ldt,  
float *  x,  
magma_int_t  ldx,  
const float *  cnorm,  
magma_int_t *  info  
) 
SLAQTRSD is used by STREVC to solve one of the (singular) quasitriangular systems with modified diagonal (T  lambda*I) * x = 0 or (T  lambda*I)**T * x = 0 with scaling to prevent overflow.
Here T is an upper quasitriangular matrix with 1x1 or 2x2 diagonal blocks, A**T denotes the transpose of A, and x is an nelement real or complex vector. The eigenvalue lambda is computed from the block diagonal of T. It does not modify T during the computation.
If trans = MagmaNoTrans, lambda is an eigenvalue for the lower 1x1 or 2x2 block, and it solves ( [ That u ]  lambda*I ) * x = 0, ( [ 0 lambda ] ) which becomes (That  lambda*I) * w = s*u, with x = [ w; 1 ] and scaling s. If the lower block is 1x1, lambda and x are real; if the lower block is 2x2, lambda and x are complex.
If trans = MagmaTrans, lambda is an eigenvalue for the upper 1x1 or 2x2 block, and it solves ( [ lambda v^T ]  lambda I )**T * x = 0, ( [ 0 That ] ) which becomes (That  lambda*I)**T * w = s*v, with x = [ 1; w ] and scaling s. If the upper block is 1x1, lambda and x are real; if the upper block is 2x2, lambda and x are complex.
[in]  trans  magma_trans_t Specifies the operation applied to T.

[in]  n  INTEGER The order of the matrix T. N >= 0. 
[in]  T  REAL array, dimension (LDT,N) The triangular matrix T. The leading n by n upper triangular part of the array T contains the upper triangular matrix, and the strictly lower triangular part of T is not referenced. 
[in]  ldt  INTEGER The leading dimension of the array T. LDT >= max (1,N). 
[out]  x  REAL array, dimension (LDX,1) or (LDX,2). On exit, X is overwritten by the solution vector x. If LAMBDAI .EQ. 0, X is real and has dimension (LDX,1). If LAMBDAI .NE. 0, X is complex and has dimension (LDX,2); the real part is in X(:,0), the imaginary part in X(:,1). 
[in]  ldx  INTEGER The leading dimension of the array X. LDX >= max(1,N). 
[in,out]  cnorm  (input) REAL array, dimension (N) CNORM(j) contains the norm of the offdiagonal part of the jth column of T. If TRANS = MagmaNoTrans, CNORM(j) must be greater than or equal to the infinitynorm, and if TRANS = MagmaTrans or MagmaConjTrans, CNORM(j) must be greater than or equal to the 1norm. 
[out]  info  INTEGER
