LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
ztbt06.f
Go to the documentation of this file.
1*> \brief \b ZTBT06
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8* Definition:
9* ===========
10*
11* SUBROUTINE ZTBT06( RCOND, RCONDC, UPLO, DIAG, N, KD, AB, LDAB,
12* RWORK, RAT )
13*
14* .. Scalar Arguments ..
15* CHARACTER DIAG, UPLO
16* INTEGER KD, LDAB, N
17* DOUBLE PRECISION RAT, RCOND, RCONDC
18* ..
19* .. Array Arguments ..
20* DOUBLE PRECISION RWORK( * )
21* COMPLEX*16 AB( LDAB, * )
22* ..
23*
24*
25*> \par Purpose:
26* =============
27*>
28*> \verbatim
29*>
30*> ZTBT06 computes a test ratio comparing RCOND (the reciprocal
31*> condition number of a triangular matrix A) and RCONDC, the estimate
32*> computed by ZTBCON. Information about the triangular matrix A is
33*> used if one estimate is zero and the other is non-zero to decide if
34*> underflow in the estimate is justified.
35*> \endverbatim
36*
37* Arguments:
38* ==========
39*
40*> \param[in] RCOND
41*> \verbatim
42*> RCOND is DOUBLE PRECISION
43*> The estimate of the reciprocal condition number obtained by
44*> forming the explicit inverse of the matrix A and computing
45*> RCOND = 1/( norm(A) * norm(inv(A)) ).
46*> \endverbatim
47*>
48*> \param[in] RCONDC
49*> \verbatim
50*> RCONDC is DOUBLE PRECISION
51*> The estimate of the reciprocal condition number computed by
52*> ZTBCON.
53*> \endverbatim
54*>
55*> \param[in] UPLO
56*> \verbatim
57*> UPLO is CHARACTER
58*> Specifies whether the matrix A is upper or lower triangular.
59*> = 'U': Upper triangular
60*> = 'L': Lower triangular
61*> \endverbatim
62*>
63*> \param[in] DIAG
64*> \verbatim
65*> DIAG is CHARACTER
66*> Specifies whether or not the matrix A is unit triangular.
67*> = 'N': Non-unit triangular
68*> = 'U': Unit triangular
69*> \endverbatim
70*>
71*> \param[in] N
72*> \verbatim
73*> N is INTEGER
74*> The order of the matrix A. N >= 0.
75*> \endverbatim
76*>
77*> \param[in] KD
78*> \verbatim
79*> KD is INTEGER
80*> The number of superdiagonals or subdiagonals of the
81*> triangular band matrix A. KD >= 0.
82*> \endverbatim
83*>
84*> \param[in] AB
85*> \verbatim
86*> AB is COMPLEX*16 array, dimension (LDAB,N)
87*> The upper or lower triangular band matrix A, stored in the
88*> first kd+1 rows of the array. The j-th column of A is stored
89*> in the j-th column of the array AB as follows:
90*> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;
91*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd).
92*> \endverbatim
93*>
94*> \param[in] LDAB
95*> \verbatim
96*> LDAB is INTEGER
97*> The leading dimension of the array AB. LDAB >= KD+1.
98*> \endverbatim
99*>
100*> \param[out] RWORK
101*> \verbatim
102*> RWORK is DOUBLE PRECISION array, dimension (N)
103*> \endverbatim
104*>
105*> \param[out] RAT
106*> \verbatim
107*> RAT is DOUBLE PRECISION
108*> The test ratio. If both RCOND and RCONDC are nonzero,
109*> RAT = MAX( RCOND, RCONDC )/MIN( RCOND, RCONDC ) - 1.
110*> If RAT = 0, the two estimates are exactly the same.
111*> \endverbatim
112*
113* Authors:
114* ========
115*
116*> \author Univ. of Tennessee
117*> \author Univ. of California Berkeley
118*> \author Univ. of Colorado Denver
119*> \author NAG Ltd.
120*
121*> \ingroup complex16_lin
122*
123* =====================================================================
124 SUBROUTINE ztbt06( RCOND, RCONDC, UPLO, DIAG, N, KD, AB, LDAB,
125 $ RWORK, RAT )
126*
127* -- LAPACK test routine --
128* -- LAPACK is a software package provided by Univ. of Tennessee, --
129* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
130*
131* .. Scalar Arguments ..
132 CHARACTER DIAG, UPLO
133 INTEGER KD, LDAB, N
134 DOUBLE PRECISION RAT, RCOND, RCONDC
135* ..
136* .. Array Arguments ..
137 DOUBLE PRECISION RWORK( * )
138 COMPLEX*16 AB( LDAB, * )
139* ..
140*
141* =====================================================================
142*
143* .. Parameters ..
144 DOUBLE PRECISION ZERO, ONE
145 parameter( zero = 0.0d+0, one = 1.0d+0 )
146* ..
147* .. Local Scalars ..
148 DOUBLE PRECISION ANORM, BIGNUM, EPS, RMAX, RMIN
149* ..
150* .. External Functions ..
151 DOUBLE PRECISION DLAMCH, ZLANTB
152 EXTERNAL dlamch, zlantb
153* ..
154* .. Intrinsic Functions ..
155 INTRINSIC max, min
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 bignum = one / dlamch( 'Safe minimum' )
192 anorm = zlantb( 'M', uplo, diag, n, kd, ab, ldab, rwork )
193*
194 rat = rmax*( min( bignum / max( one, anorm ), one / eps ) )
195 END IF
196*
197 RETURN
198*
199* End of ZTBT06
200*
201 END
subroutine ztbt06(rcond, rcondc, uplo, diag, n, kd, ab, ldab, rwork, rat)
ZTBT06
Definition ztbt06.f:126