# ?gesvr

Tests regularity/singularity of an interval matrix by Rump and Rex-Rohn singular value criteria.

## Syntax

call sigesvr(n, a, lda, msr, rsr, reg, info)

call digesvr(n, a, lda, msr, rsr, reg, info)

## Description

The routine ?gesvr checks whether a general interval square matrix A is regular or singular by using Rump and Rex-Rohn singular value criteria.

## Input Parameters

n

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

a

  REAL for sigesvr.

  DOUBLE PRECISION for digesvr.

  Array: DIMENSION (lda,*).

  Contains the matrix A.

  The second dimension of a must be at least max(1, n).

lda

  INTEGER. The first dimension of a, `lda ≥ max(1, n)`.

## Output Parameters

msr, rsr

  S_INTERVAL for sigesvr.

  D_INTERVAL for digesvr.

  Additional information about the matrix A.

  The intervals represent the ranges of the singular spectra of the midpoint matrix and radius matrix, respectively.

reg

  INTEGER. Displays results of the singularity test.

  If `reg ≥ 0`, then A is regular.

  If `reg < 0`, then A is singular.

  If reg = 0, then the result is undetermined, that is, the test was not sufficiently sensitive to detect whether the matrix A is regular or singular.

info

  INTEGER.

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

  If `info = i ≥ 0`, the execution is not successful.

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

## Application Notes

The routine ?gesvr implements a test that is only a sufficient condition for a matrix to be either regular or singular. This means that in some boundary cases the test may prove not sensitive enough to determine whether a given matrix is regular or singular, and the routine returns `reg = 0` on output.

## Fortran 90 Code for Testing Regularity of Interval Matrix by Singular Value Criteria

To test regularity of the interval matrix

by singular value criteria, the following piece of Fortran 90 code may be helpful:

----------------------------------------------------------------------------------------------
`. . . . . .`
`USE INTERVAL_ARITHMETIC`
`. . . . . .`
`INTEGER, PARAMETER :: LDA = 2, N = 2`
`TYPE(D_INTERVAL) :: A(LDA,N), MSR, RSR`
`INTEGER :: REG, INFO`
`. . . . . .`
`A(1,1) = DINTERVAL(2.,4.); A(1,2) = DINTERVAL(-2.,1.)`
`A(2,1) = DINTERVAL(-1.,2.); A(2,2) = DINTERVAL(2.,4.)`
`. . . . . .`
`CALL DIGESVR( N, A, LDA, MSR, RSR, REG, INFO )`

----------------------------------------------------------------------------------------------

Mutual disposition of the intervals MSR and RSR on the real axis can serve to some extent as a measure of how large the regularity margin is (in case of MSR ≥ RSR), or how far the matrix is from the regular ones (in case of MSR < RSR).

Parent topic: Routines for Checking Properties of Interval Matrices