 LAPACK 3.11.0 LAPACK: Linear Algebra PACKage
Searching...
No Matches

## ◆ shst01()

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

SHST01

Purpose:
``` SHST01 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 SGEHRD + SORGHR.

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 REAL 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 REAL array, dimension (LDH,N) The upper Hessenberg matrix H from the reduction A = Q*H*Q' as computed by SGEHRD. 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 REAL array, dimension (LDQ,N) The orthogonal matrix Q from the reduction A = Q*H*Q' as computed by SGEHRD + SORGHR.``` [in] LDQ ``` LDQ is INTEGER The leading dimension of the array Q. LDQ >= max(1,N).``` [out] WORK ` WORK is REAL array, dimension (LWORK)` [in] LWORK ``` LWORK is INTEGER The length of the array WORK. LWORK >= 2*N*N.``` [out] RESULT ``` RESULT is REAL 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 shst01.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 REAL A( LDA, * ), H( LDH, * ), Q( LDQ, * ),
144 \$ RESULT( 2 ), WORK( LWORK )
145* ..
146*
147* =====================================================================
148*
149* .. Parameters ..
150 REAL ONE, ZERO
151 parameter( one = 1.0e+0, zero = 0.0e+0 )
152* ..
153* .. Local Scalars ..
154 INTEGER LDWORK
155 REAL ANORM, EPS, OVFL, SMLNUM, UNFL, WNORM
156* ..
157* .. External Functions ..
158 REAL SLAMCH, SLANGE
159 EXTERNAL slamch, slange
160* ..
161* .. External Subroutines ..
162 EXTERNAL sgemm, slabad, slacpy, sort01
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 = slamch( 'Safe minimum' )
178 eps = slamch( 'Precision' )
179 ovfl = one / unfl
180 CALL slabad( 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 slacpy( ' ', n, n, a, lda, work, ldwork )
189*
190* Compute Q*H
191*
192 CALL sgemm( '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 sgemm( 'No transpose', 'Transpose', n, n, n, -one,
198 \$ work( ldwork*n+1 ), ldwork, q, ldq, one, work,
199 \$ ldwork )
200*
201 anorm = max( slange( '1', n, n, a, lda, work( ldwork*n+1 ) ),
202 \$ unfl )
203 wnorm = slange( '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 sort01( 'Columns', n, n, q, ldq, work, lwork, result( 2 ) )
212*
213 RETURN
214*
215* End of SHST01
216*
subroutine slacpy(UPLO, M, N, A, LDA, B, LDB)
SLACPY copies all or part of one two-dimensional array to another.
Definition: slacpy.f:103
real function slange(NORM, M, N, A, LDA, WORK)
SLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
Definition: slange.f:114
subroutine sgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
SGEMM
Definition: sgemm.f:187
subroutine sort01(ROWCOL, M, N, U, LDU, WORK, LWORK, RESID)
SORT01
Definition: sort01.f:116
real function slamch(CMACH)
SLAMCH
Definition: slamch.f:68
Here is the call graph for this function:
Here is the caller graph for this function: