 LAPACK  3.10.0 LAPACK: Linear Algebra PACKage

◆ dhst01()

 subroutine dhst01 ( integer N, integer ILO, integer IHI, double precision, dimension( lda, * ) A, integer LDA, double precision, dimension( ldh, * ) H, integer LDH, double precision, dimension( ldq, * ) Q, integer LDQ, double precision, dimension( lwork ) WORK, integer LWORK, double precision, dimension( 2 ) RESULT )

DHST01

Purpose:
DHST01 tests the reduction of a general matrix A to upper Hessenberg
form:  A = Q*H*Q'.  Two test ratios are computed;

RESULT(1) = norm( A - Q*H*Q' ) / ( norm(A) * N * EPS )
RESULT(2) = norm( I - Q'*Q ) / ( N * EPS )

The matrix Q is assumed to be given explicitly as it would be
following DGEHRD + DORGHR.

In this version, ILO and IHI are not used and are assumed to be 1 and
N, respectively.
Parameters
 [in] N N is INTEGER The order of the matrix A. N >= 0. [in] ILO ILO is INTEGER [in] IHI IHI is INTEGER A is assumed to be upper triangular in rows and columns 1:ILO-1 and IHI+1:N, so Q differs from the identity only in rows and columns ILO+1:IHI. [in] A A is DOUBLE PRECISION array, dimension (LDA,N) The original n by n matrix A. [in] LDA LDA is INTEGER The leading dimension of the array A. LDA >= max(1,N). [in] H H is DOUBLE PRECISION array, dimension (LDH,N) The upper Hessenberg matrix H from the reduction A = Q*H*Q' as computed by DGEHRD. H is assumed to be zero below the first subdiagonal. [in] LDH LDH is INTEGER The leading dimension of the array H. LDH >= max(1,N). [in] Q Q is DOUBLE PRECISION array, dimension (LDQ,N) The orthogonal matrix Q from the reduction A = Q*H*Q' as computed by DGEHRD + DORGHR. [in] LDQ LDQ is INTEGER The leading dimension of the array Q. LDQ >= max(1,N). [out] WORK WORK is DOUBLE PRECISION array, dimension (LWORK) [in] LWORK LWORK is INTEGER The length of the array WORK. LWORK >= 2*N*N. [out] RESULT RESULT is DOUBLE PRECISION array, dimension (2) RESULT(1) = norm( A - Q*H*Q' ) / ( norm(A) * N * EPS ) RESULT(2) = norm( I - Q'*Q ) / ( N * EPS )

Definition at line 132 of file dhst01.f.

134 *
135 * -- LAPACK test routine --
136 * -- LAPACK is a software package provided by Univ. of Tennessee, --
137 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
138 *
139 * .. Scalar Arguments ..
140  INTEGER IHI, ILO, LDA, LDH, LDQ, LWORK, N
141 * ..
142 * .. Array Arguments ..
143  DOUBLE PRECISION A( LDA, * ), H( LDH, * ), Q( LDQ, * ),
144  \$ RESULT( 2 ), WORK( LWORK )
145 * ..
146 *
147 * =====================================================================
148 *
149 * .. Parameters ..
150  DOUBLE PRECISION ONE, ZERO
151  parameter( one = 1.0d+0, zero = 0.0d+0 )
152 * ..
153 * .. Local Scalars ..
154  INTEGER LDWORK
155  DOUBLE PRECISION ANORM, EPS, OVFL, SMLNUM, UNFL, WNORM
156 * ..
157 * .. External Functions ..
158  DOUBLE PRECISION DLAMCH, DLANGE
159  EXTERNAL dlamch, dlange
160 * ..
161 * .. External Subroutines ..
162  EXTERNAL dgemm, dlabad, dlacpy, dort01
163 * ..
164 * .. Intrinsic Functions ..
165  INTRINSIC max, min
166 * ..
167 * .. Executable Statements ..
168 *
169 * Quick return if possible
170 *
171  IF( n.LE.0 ) THEN
172  result( 1 ) = zero
173  result( 2 ) = zero
174  RETURN
175  END IF
176 *
177  unfl = dlamch( 'Safe minimum' )
178  eps = dlamch( 'Precision' )
179  ovfl = one / unfl
180  CALL dlabad( unfl, ovfl )
181  smlnum = unfl*n / eps
182 *
183 * Test 1: Compute norm( A - Q*H*Q' ) / ( norm(A) * N * EPS )
184 *
185 * Copy A to WORK
186 *
187  ldwork = max( 1, n )
188  CALL dlacpy( ' ', n, n, a, lda, work, ldwork )
189 *
190 * Compute Q*H
191 *
192  CALL dgemm( 'No transpose', 'No transpose', n, n, n, one, q, ldq,
193  \$ h, ldh, zero, work( ldwork*n+1 ), ldwork )
194 *
195 * Compute A - Q*H*Q'
196 *
197  CALL dgemm( 'No transpose', 'Transpose', n, n, n, -one,
198  \$ work( ldwork*n+1 ), ldwork, q, ldq, one, work,
199  \$ ldwork )
200 *
201  anorm = max( dlange( '1', n, n, a, lda, work( ldwork*n+1 ) ),
202  \$ unfl )
203  wnorm = dlange( '1', n, n, work, ldwork, work( ldwork*n+1 ) )
204 *
205 * Note that RESULT(1) cannot overflow and is bounded by 1/(N*EPS)
206 *
207  result( 1 ) = min( wnorm, anorm ) / max( smlnum, anorm*eps ) / n
208 *
209 * Test 2: Compute norm( I - Q'*Q ) / ( N * EPS )
210 *
211  CALL dort01( 'Columns', n, n, q, ldq, work, lwork, result( 2 ) )
212 *
213  RETURN
214 *
215 * End of DHST01
216 *
double precision function dlamch(CMACH)
DLAMCH
Definition: dlamch.f:69
subroutine dlacpy(UPLO, M, N, A, LDA, B, LDB)
DLACPY copies all or part of one two-dimensional array to another.
Definition: dlacpy.f:103
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DGEMM
Definition: dgemm.f:187
subroutine dort01(ROWCOL, M, N, U, LDU, WORK, LWORK, RESID)
DORT01
Definition: dort01.f:116
double precision function dlange(NORM, M, N, A, LDA, WORK)
DLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
Definition: dlange.f:114
Here is the call graph for this function:
Here is the caller graph for this function: