LAPACK  3.8.0
LAPACK: Linear Algebra PACKage

◆ dtrt06()

subroutine dtrt06 ( double precision  RCOND,
double precision  RCONDC,
character  UPLO,
character  DIAG,
integer  N,
double precision, dimension( lda, * )  A,
integer  LDA,
double precision, dimension( * )  WORK,
double precision  RAT 
)

DTRT06

Purpose:
 DTRT06 computes a test ratio comparing RCOND (the reciprocal
 condition number of a triangular matrix A) and RCONDC, the estimate
 computed by DTRCON.  Information about the triangular matrix A is
 used if one estimate is zero and the other is non-zero to decide if
 underflow in the estimate is justified.
Parameters
[in]RCOND
          RCOND is DOUBLE PRECISION
          The estimate of the reciprocal condition number obtained by
          forming the explicit inverse of the matrix A and computing
          RCOND = 1/( norm(A) * norm(inv(A)) ).
[in]RCONDC
          RCONDC is DOUBLE PRECISION
          The estimate of the reciprocal condition number computed by
          DTRCON.
[in]UPLO
          UPLO is CHARACTER
          Specifies whether the matrix A is upper or lower triangular.
          = 'U':  Upper triangular
          = 'L':  Lower triangular
[in]DIAG
          DIAG is CHARACTER
          Specifies whether or not the matrix A is unit triangular.
          = 'N':  Non-unit triangular
          = 'U':  Unit triangular
[in]N
          N is INTEGER
          The order of the matrix A.  N >= 0.
[in]A
          A is DOUBLE PRECISION array, dimension (LDA,N)
          The triangular matrix A.  If UPLO = 'U', the leading n by n
          upper triangular part of the array A contains the upper
          triangular matrix, and the strictly lower triangular part of
          A is not referenced.  If UPLO = 'L', the leading n by n lower
          triangular part of the array A contains the lower triangular
          matrix, and the strictly upper triangular part of A is not
          referenced.  If DIAG = 'U', the diagonal elements of A are
          also not referenced and are assumed to be 1.
[in]LDA
          LDA is INTEGER
          The leading dimension of the array A.  LDA >= max(1,N).
[out]WORK
          WORK is DOUBLE PRECISION array, dimension (N)
[out]RAT
          RAT is DOUBLE PRECISION
          The test ratio.  If both RCOND and RCONDC are nonzero,
             RAT = MAX( RCOND, RCONDC )/MIN( RCOND, RCONDC ) - 1.
          If RAT = 0, the two estimates are exactly the same.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Date
December 2016

Definition at line 123 of file dtrt06.f.

123 *
124 * -- LAPACK test routine (version 3.7.0) --
125 * -- LAPACK is a software package provided by Univ. of Tennessee, --
126 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
127 * December 2016
128 *
129 * .. Scalar Arguments ..
130  CHARACTER diag, uplo
131  INTEGER lda, n
132  DOUBLE PRECISION rat, rcond, rcondc
133 * ..
134 * .. Array Arguments ..
135  DOUBLE PRECISION a( lda, * ), work( * )
136 * ..
137 *
138 * =====================================================================
139 *
140 * .. Parameters ..
141  DOUBLE PRECISION zero, one
142  parameter( zero = 0.0d+0, one = 1.0d+0 )
143 * ..
144 * .. Local Scalars ..
145  DOUBLE PRECISION anorm, bignum, eps, rmax, rmin, smlnum
146 * ..
147 * .. External Functions ..
148  DOUBLE PRECISION dlamch, dlantr
149  EXTERNAL dlamch, dlantr
150 * ..
151 * .. Intrinsic Functions ..
152  INTRINSIC max, min
153 * ..
154 * .. External Subroutines ..
155  EXTERNAL dlabad
156 * ..
157 * .. Executable Statements ..
158 *
159  eps = dlamch( 'Epsilon' )
160  rmax = max( rcond, rcondc )
161  rmin = min( rcond, rcondc )
162 *
163 * Do the easy cases first.
164 *
165  IF( rmin.LT.zero ) THEN
166 *
167 * Invalid value for RCOND or RCONDC, return 1/EPS.
168 *
169  rat = one / eps
170 *
171  ELSE IF( rmin.GT.zero ) THEN
172 *
173 * Both estimates are positive, return RMAX/RMIN - 1.
174 *
175  rat = rmax / rmin - one
176 *
177  ELSE IF( rmax.EQ.zero ) THEN
178 *
179 * Both estimates zero.
180 *
181  rat = zero
182 *
183  ELSE
184 *
185 * One estimate is zero, the other is non-zero. If the matrix is
186 * ill-conditioned, return the nonzero estimate multiplied by
187 * 1/EPS; if the matrix is badly scaled, return the nonzero
188 * estimate multiplied by BIGNUM/TMAX, where TMAX is the maximum
189 * element in absolute value in A.
190 *
191  smlnum = dlamch( 'Safe minimum' )
192  bignum = one / smlnum
193  CALL dlabad( smlnum, bignum )
194  anorm = dlantr( 'M', uplo, diag, n, n, a, lda, work )
195 *
196  rat = rmax*( min( bignum / max( one, anorm ), one / eps ) )
197  END IF
198 *
199  RETURN
200 *
201 * End of DTRT06
202 *
double precision function dlamch(CMACH)
DLAMCH
Definition: dlamch.f:65
double precision function dlantr(NORM, UPLO, DIAG, M, N, A, LDA, WORK)
DLANTR returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a trapezoidal or triangular matrix.
Definition: dlantr.f:143
subroutine dlabad(SMALL, LARGE)
DLABAD
Definition: dlabad.f:76
Here is the call graph for this function:
Here is the caller graph for this function: