 LAPACK  3.10.1 LAPACK: Linear Algebra PACKage

## ◆ dtrt01()

 subroutine dtrt01 ( character UPLO, character DIAG, integer N, double precision, dimension( lda, * ) A, integer LDA, double precision, dimension( ldainv, * ) AINV, integer LDAINV, double precision RCOND, double precision, dimension( * ) WORK, double precision RESID )

DTRT01

Purpose:
``` DTRT01 computes the residual for a triangular matrix A times its
inverse:
RESID = norm( A*AINV - I ) / ( N * norm(A) * norm(AINV) * EPS ),
where EPS is the machine epsilon.```
Parameters
 [in] UPLO ``` UPLO is CHARACTER*1 Specifies whether the matrix A is upper or lower triangular. = 'U': Upper triangular = 'L': Lower triangular``` [in] DIAG ``` DIAG is CHARACTER*1 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).``` [in,out] AINV ``` AINV is DOUBLE PRECISION array, dimension (LDAINV,N) On entry, the (triangular) inverse of the matrix A, in the same storage format as A. On exit, the contents of AINV are destroyed.``` [in] LDAINV ``` LDAINV is INTEGER The leading dimension of the array AINV. LDAINV >= max(1,N).``` [out] RCOND ``` RCOND is DOUBLE PRECISION The reciprocal condition number of A, computed as 1/(norm(A) * norm(AINV)).``` [out] WORK ` WORK is DOUBLE PRECISION array, dimension (N)` [out] RESID ``` RESID is DOUBLE PRECISION norm(A*AINV - I) / ( N * norm(A) * norm(AINV) * EPS )```

Definition at line 122 of file dtrt01.f.

124 *
125 * -- LAPACK test routine --
126 * -- LAPACK is a software package provided by Univ. of Tennessee, --
127 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
128 *
129 * .. Scalar Arguments ..
130  CHARACTER DIAG, UPLO
131  INTEGER LDA, LDAINV, N
132  DOUBLE PRECISION RCOND, RESID
133 * ..
134 * .. Array Arguments ..
135  DOUBLE PRECISION A( LDA, * ), AINV( LDAINV, * ), 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  INTEGER J
146  DOUBLE PRECISION AINVNM, ANORM, EPS
147 * ..
148 * .. External Functions ..
149  LOGICAL LSAME
150  DOUBLE PRECISION DLAMCH, DLANTR
151  EXTERNAL lsame, dlamch, dlantr
152 * ..
153 * .. External Subroutines ..
154  EXTERNAL dtrmv
155 * ..
156 * .. Intrinsic Functions ..
157  INTRINSIC dble
158 * ..
159 * .. Executable Statements ..
160 *
161 * Quick exit if N = 0
162 *
163  IF( n.LE.0 ) THEN
164  rcond = one
165  resid = zero
166  RETURN
167  END IF
168 *
169 * Exit with RESID = 1/EPS if ANORM = 0 or AINVNM = 0.
170 *
171  eps = dlamch( 'Epsilon' )
172  anorm = dlantr( '1', uplo, diag, n, n, a, lda, work )
173  ainvnm = dlantr( '1', uplo, diag, n, n, ainv, ldainv, work )
174  IF( anorm.LE.zero .OR. ainvnm.LE.zero ) THEN
175  rcond = zero
176  resid = one / eps
177  RETURN
178  END IF
179  rcond = ( one / anorm ) / ainvnm
180 *
181 * Set the diagonal of AINV to 1 if AINV has unit diagonal.
182 *
183  IF( lsame( diag, 'U' ) ) THEN
184  DO 10 j = 1, n
185  ainv( j, j ) = one
186  10 CONTINUE
187  END IF
188 *
189 * Compute A * AINV, overwriting AINV.
190 *
191  IF( lsame( uplo, 'U' ) ) THEN
192  DO 20 j = 1, n
193  CALL dtrmv( 'Upper', 'No transpose', diag, j, a, lda,
194  \$ ainv( 1, j ), 1 )
195  20 CONTINUE
196  ELSE
197  DO 30 j = 1, n
198  CALL dtrmv( 'Lower', 'No transpose', diag, n-j+1, a( j, j ),
199  \$ lda, ainv( j, j ), 1 )
200  30 CONTINUE
201  END IF
202 *
203 * Subtract 1 from each diagonal element to form A*AINV - I.
204 *
205  DO 40 j = 1, n
206  ainv( j, j ) = ainv( j, j ) - one
207  40 CONTINUE
208 *
209 * Compute norm(A*AINV - I) / (N * norm(A) * norm(AINV) * EPS)
210 *
211  resid = dlantr( '1', uplo, 'Non-unit', n, n, ainv, ldainv, work )
212 *
213  resid = ( ( resid*rcond ) / dble( n ) ) / eps
214 *
215  RETURN
216 *
217 * End of DTRT01
218 *
double precision function dlamch(CMACH)
DLAMCH
Definition: dlamch.f:69
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:53
subroutine dtrmv(UPLO, TRANS, DIAG, N, A, LDA, X, INCX)
DTRMV
Definition: dtrmv.f:147
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,...
Definition: dlantr.f:141
Here is the call graph for this function:
Here is the caller graph for this function: