# ?latdf

Uses the LU factorization of the n-by-n matrix computed by ?getc2 and computes a contribution to the reciprocal Dif-estimate.

## Syntax

call slatdf( ijob, n, z, ldz, rhs, rdsum, rdscal, ipiv, jpiv )

call dlatdf( ijob, n, z, ldz, rhs, rdsum, rdscal, ipiv, jpiv )

call clatdf( ijob, n, z, ldz, rhs, rdsum, rdscal, ipiv, jpiv )

call zlatdf( ijob, n, z, ldz, rhs, rdsum, rdscal, ipiv, jpiv )

## Description

The routine ?latdf uses the LU factorization of the n-by-n matrix Z computed by ?getc2 and computes a contribution to the reciprocal Dif-estimate by solving `Z*x = b` for x, and choosing the right-hand side b such that the norm of x is as large as possible. On entry `rhs = b` holds the contribution from earlier solved sub-systems, and on return `rhs = x`.

The factorization of Z returned by ?getc2 has the form `Z = P*L*U*Q`, where P and Q are permutation matrices. L is lower triangular with unit diagonal elements and U is upper triangular.

## Input Parameters

ijob

  INTEGER.

  `ijob = 2`: First compute an approximative null-vector e of Z using ?gecon, e is normalized, and solve for ``Z*x = ±e`-f` with the sign giving the greater value of 2-norm(x). This option is about 5 times as expensive as default.

  `ijob ≠ 2` (default): Local look ahead strategy where all entries of the right-hand side b is chosen as either +1 or -1 .

n

  INTEGER. The number of columns of the matrix Z.

z

  REAL for slatdf/clatdf

  DOUBLE PRECISION for dlatdf/zlatdf.

  Array, DIMENSION (ldz, n)

  On entry, the LU part of the factorization of the n-by-n matrix Z computed by ?getc2: `Z = P*L*U*Q`.

ldz

  INTEGER. The leading dimension of the array Z. `lda ≥ max(1, n)`.

rhs

  REAL for slatdf/clatdf

  DOUBLE PRECISION for dlatdf/zlatdf.

  Array, DIMENSION (n).

  On entry, rhs contains contributions from other subsystems.

rdsum

  REAL for slatdf/clatdf

  DOUBLE PRECISION for dlatdf/zlatdf.

  On entry, the sum of squares of computed contributions to the Dif-estimate under computation by ?tgsyL, where the scaling factor rdscal has been factored out. If `trans = 'T'`, rdsum is not touched.

  Note that rdsum only makes sense when ?tgsy2 is called by ?tgsyL.

rdscal

  REAL for slatdf/clatdf

  DOUBLE PRECISION for dlatdf/zlatdf.

  On entry, scaling factor used to prevent overflow in rdsum.

  If `trans = T'`, rdscal is not touched.

  Note that rdscal only makes sense when ?tgsy2 is called by ?tgsyL.

ipiv

  INTEGER.

  Array, DIMENSION (n).

  The pivot indices; for `1 ≤ i ≤ n`, row i of the matrix has been interchanged with row ipiv(i).

jpiv

  INTEGER.

  Array, DIMENSION (n).

  The pivot indices; for `1 ≤j≤ n`, column j of the matrix has been interchanged with column jpiv(j).

## Output Parameters

rhs

  On exit, rhs contains the solution of the subsystem with entries according to the value of ijob.

rdsum

  On exit, the corresponding sum of squares updated with the contributions from the current sub-system.

  If `trans = 'T'`, rdsum is not touched.

rdscal

  On exit, rdscal is updated with respect to the current contributions in rdsum.

  If `trans = 'T'`, rdscal is not touched.

Parent topic: Auxiliary Routines