# ?disna

Computes the reciprocal condition numbers for the eigenvectors of a symmetric/ Hermitian matrix or for the left or right singular vectors of a general matrix.

## Syntax

FORTRAN 77:

call sdisna(job, m, n, d, sep, info)

call ddisna(job, m, n, d, sep, info)

Fortran 95:

call disna(d, sep [,job] [,minmn] [,info])

## Description

This routine computes the reciprocal condition numbers for the eigenvectors of a real symmetric or complex Hermitian matrix or for the left or right singular vectors of a general m-by-n matrix.

The reciprocal condition number is the 'gap' between the corresponding eigenvalue or singular value and the nearest other one.

The bound on the error, measured by angle in radians, in the i-th computed vector is given by

`slamch('E')*(anorm/sep(i))`

where `anorm = ||A||2 = max( |d(j)| )`. sep(i) is not allowed to be smaller than `slamch('E')*anorm` in order to limit the size of the error bound.

?disna may also be used to compute error bounds for eigenvectors of the generalized symmetric definite eigenproblem.

## Input Parameters

job

  CHARACTER*1. Must be 'E','L', or 'R'. Specifies for which problem the reciprocal condition numbers should be computed:

  job = 'E': for the eigenvectors of a symmetric/Hermitian matrix;

  job = 'L': for the left singular vectors of a general matrix;

  job = 'R': for the right singular vectors of a general matrix.

m

  INTEGER. The number of rows of the matrix (`m ≥ 0`).

n

  INTEGER.

  If `job = 'L'`, or 'R', the number of columns of the matrix (`n ≥ 0`). Ignored if `job = 'E'`.

d

  REAL for sdisna

  DOUBLE PRECISION for ddisna.

  Array, dimension at least max(1,m) if `job = 'E'`, and at least max(1, min(m,n)) if `job = 'L'` or 'R'.

  This array must contain the eigenvalues (if `job = 'E'`) or singular values (if `job = 'L'` or 'R') of the matrix, in either increasing or decreasing order.

  If singular values, they must be non-negative.

## Output Parameters

sep

  REAL for sdisna

  DOUBLE PRECISION for ddisna.

  Array, dimension at least max(1,m) if `job = 'E'`, and at least max(1, min(m,n)) if `job = 'L'` or 'R'. The reciprocal condition numbers of the vectors.

info

  INTEGER.

  If `info = 0`, the execution is successful.

  If `info = -i`, the i-th parameter had an illegal value.

## Fortran 95 Interface Notes

Routines in Fortran 95 interface have fewer arguments in the calling sequence than their FORTRAN 77 counterparts. For general conventions applied to skip redundant or restorable arguments, see Fortran 95 Interface Conventions.

Specific details for the routine disna interface are the following:

d

  Holds the vector of length min(m,n).

sep

  Holds the vector of length min(m,n).

job

  Must be 'E', 'L', or 'R'. The default value is 'E'.

minmn

  Indicates which of the values m or n is smaller. Must be either 'M' or 'N', the default is 'M'.

  If `job = 'E'`, this argument is superfluous, If `job = 'L'` or 'R', this argument is used by the routine.

Parent topic: Symmetric Eigenvalue Problems