Loading...
Searching...
No Matches
laqtrsd: Quasi-Triangular solve with modified diagonal; used by trevc
Dense LA » Eigenvalues » Non-symmetric eigenvalues » Auxiliary routines

## 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) quasi-triangular systems with modified diagonal (T - lambda*I) * x = 0 or (T - lambda*I)**T * x = 0 with scaling to prevent overflow.
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) quasi-triangular systems with modified diagonal (T - lambda*I) * x = 0 or (T - lambda*I)**T * x = 0 with scaling to prevent overflow.

## Detailed Description

## Function Documentation

## magma_dlaqtrsd()

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) quasi-triangular 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 quasi-triangular matrix with 1x1 or 2x2 diagonal blocks, A**T denotes the transpose of A, and x is an n-element 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.

Parameters

  [in]

  trans

  magma_trans_t Specifies the operation applied to T.
  - = MagmaNoTrans: Solve (T - lambda*I) * x = 0 (No transpose)
  - = MagmaTrans: Solve (T - lambda*I)**T * x = 0 (Transpose)

  [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 off-diagonal part of the j-th column of T. If TRANS = MagmaNoTrans, CNORM(j) must be greater than or equal to the infinity-norm, and if TRANS = MagmaTrans or MagmaConjTrans, CNORM(j) must be greater than or equal to the 1-norm.

  [out]

  info

  INTEGER
  - = 0: successful exit
  - < 0: if INFO = -k, the k-th argument had an illegal value

## magma_slaqtrsd()

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) quasi-triangular 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 quasi-triangular matrix with 1x1 or 2x2 diagonal blocks, A**T denotes the transpose of A, and x is an n-element 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.

Parameters

  [in]

  trans

  magma_trans_t Specifies the operation applied to T.
  - = MagmaNoTrans: Solve (T - lambda*I) * x = 0 (No transpose)
  - = MagmaTrans: Solve (T - lambda*I)**T * x = 0 (Transpose)

  [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 off-diagonal part of the j-th column of T. If TRANS = MagmaNoTrans, CNORM(j) must be greater than or equal to the infinity-norm, and if TRANS = MagmaTrans or MagmaConjTrans, CNORM(j) must be greater than or equal to the 1-norm.

  [out]

  info

  INTEGER
  - = 0: successful exit
  - < 0: if INFO = -k, the k-th argument had an illegal value