# ?latps

Solves a triangular system of equations with the matrix held in packed storage.

## Syntax

call slatps( uplo, trans, diag, normin, n, ap, x, scale, cnorm, info )

call dlatps( uplo, trans, diag, normin, n, ap, x, scale, cnorm, info )

call clatps( uplo, trans, diag, normin, n, ap, x, scale, cnorm, info )

call zlatps( uplo, trans, diag, normin, n, ap, x, scale, cnorm, info )

## Description

The routine ?latps solves one of the triangular systems

`A*x = s*b`, or `AT*x = s*b,` or `AH*x = s*b` (for complex flavors)

with scaling to prevent overflow, where A is an upper or lower triangular matrix stored in packed form. Here AT denotes the transpose of A, AH denotes the conjugate transpose of A, x and b are n-element vectors, and s is a scaling factor, usually less than or equal to 1, chosen so that the components of x will be less than the overflow threshold. If the unscaled problem does not cause overflow, the Level 2 BLAS routine ?tpsv is called. If the matrix A is singular (`A(j, j) = 0` for some j), then s is set to 0 and a non-trivial solution to ``A*x = 0`` is returned.

## Input Parameters

uplo

  CHARACTER*1.

  Specifies whether the matrix A is upper or lower triangular.

  = 'U': upper triangular

  = 'L': uower triangular

trans

  CHARACTER*1.

  Specifies the operation applied to A.

  = 'N': solve `A*x = s*b` (no transpose)

  = 'T': solve `AT*x = s*b` (transpose)

  = 'C': solve `AH*x = s*b` (conjugate transpose)

diag

  CHARACTER*1.

  Specifies whether the matrix A is unit triangular.

  = 'N': non-unit triangular

  = 'U': unit triangular

normin

  CHARACTER*1.

  Specifies whether cnorm is set.

  = 'Y': cnorm contains the column norms on entry;

  = 'N': cnorm is not set on entry. On exit, the norms will be computed and stored in cnorm.

n

  INTEGER. The order of the matrix A. `n ≥ 0`.

ap

  REAL for slatps

  DOUBLE PRECISION for dlatps

  COMPLEX for clatps

  COMPLEX*16 for zlatps.

  Array, DIMENSION (n(n+1)/2).

  The upper or lower triangular matrix A, packed columnwise in a linear array. The j-th column of A is stored in the array ap as follows:

  if `uplo = 'U'`, `ap(i + (j-1)j/2) = A(i,j)` for `1≤ i ≤ j`;

  if `uplo = 'L'`, `ap(i + (j-1)(2n-j)/2) = A(i, j)` for `j≤i≤n`.

x

  REAL for slatps DOUBLE PRECISION for dlatps

  COMPLEX for clatps

  COMPLEX*16 for zlatps.

  Array, DIMENSION (n)

  On entry, the right hand side b of the triangular system.

cnorm

  REAL for slatps/clatps

  DOUBLE PRECISION for dlatps/zlatps.

  Array, DIMENSION (n).

  If `normin = 'Y'`, cnorm is an input argument and cnorm(j) contains the norm of the off-diagonal part of the j-th column of A.

  If `trans = 'N'`, cnorm(j) must be greater than or equal to the infinity-norm, and if `trans = 'T'` or 'C' , cnorm(j) must be greater than or equal to the 1-norm.

## Output Parameters

x

  On exit, x is overwritten by the solution vector x.

scale

  REAL for slatps/clatps

  DOUBLE PRECISION for dlatps/zlatps.

  The scaling factor s for the triangular system as described above.

  If `scale = 0`, the matrix A is singular or badly scaled, and the vector x is an exact or approximate solution to `A*x = 0`.

cnorm

  If `normin = 'N'`, cnorm is an output argument and cnorm(j) returns the 1-norm of the off-diagonal part of the j-th column of A.

info

  INTEGER.

  = 0: successful exit

  < 0: if `info = -k`, the k-th argument had an illegal value

Parent topic: Auxiliary Routines