LAPACK 3.11.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
slanhs.f
Go to the documentation of this file.
1*> \brief \b SLANHS returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value of any element of an upper Hessenberg matrix.
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8*> \htmlonly
9*> Download SLANHS + dependencies
10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/slanhs.f">
11*> [TGZ]</a>
12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slanhs.f">
13*> [ZIP]</a>
14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slanhs.f">
15*> [TXT]</a>
16*> \endhtmlonly
17*
18* Definition:
19* ===========
20*
21* REAL FUNCTION SLANHS( NORM, N, A, LDA, WORK )
22*
23* .. Scalar Arguments ..
24* CHARACTER NORM
25* INTEGER LDA, N
26* ..
27* .. Array Arguments ..
28* REAL A( LDA, * ), WORK( * )
29* ..
30*
31*
32*> \par Purpose:
33* =============
34*>
35*> \verbatim
36*>
37*> SLANHS returns the value of the one norm, or the Frobenius norm, or
38*> the infinity norm, or the element of largest absolute value of a
39*> Hessenberg matrix A.
40*> \endverbatim
41*>
42*> \return SLANHS
43*> \verbatim
44*>
45*> SLANHS = ( max(abs(A(i,j))), NORM = 'M' or 'm'
46*> (
47*> ( norm1(A), NORM = '1', 'O' or 'o'
48*> (
49*> ( normI(A), NORM = 'I' or 'i'
50*> (
51*> ( normF(A), NORM = 'F', 'f', 'E' or 'e'
52*>
53*> where norm1 denotes the one norm of a matrix (maximum column sum),
54*> normI denotes the infinity norm of a matrix (maximum row sum) and
55*> normF denotes the Frobenius norm of a matrix (square root of sum of
56*> squares). Note that max(abs(A(i,j))) is not a consistent matrix norm.
57*> \endverbatim
58*
59* Arguments:
60* ==========
61*
62*> \param[in] NORM
63*> \verbatim
64*> NORM is CHARACTER*1
65*> Specifies the value to be returned in SLANHS as described
66*> above.
67*> \endverbatim
68*>
69*> \param[in] N
70*> \verbatim
71*> N is INTEGER
72*> The order of the matrix A. N >= 0. When N = 0, SLANHS is
73*> set to zero.
74*> \endverbatim
75*>
76*> \param[in] A
77*> \verbatim
78*> A is REAL array, dimension (LDA,N)
79*> The n by n upper Hessenberg matrix A; the part of A below the
80*> first sub-diagonal is not referenced.
81*> \endverbatim
82*>
83*> \param[in] LDA
84*> \verbatim
85*> LDA is INTEGER
86*> The leading dimension of the array A. LDA >= max(N,1).
87*> \endverbatim
88*>
89*> \param[out] WORK
90*> \verbatim
91*> WORK is REAL array, dimension (MAX(1,LWORK)),
92*> where LWORK >= N when NORM = 'I'; otherwise, WORK is not
93*> referenced.
94*> \endverbatim
95*
96* Authors:
97* ========
98*
99*> \author Univ. of Tennessee
100*> \author Univ. of California Berkeley
101*> \author Univ. of Colorado Denver
102*> \author NAG Ltd.
103*
104*> \ingroup realOTHERauxiliary
105*
106* =====================================================================
107 REAL function slanhs( norm, n, a, lda, work )
108*
109* -- LAPACK auxiliary routine --
110* -- LAPACK is a software package provided by Univ. of Tennessee, --
111* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
112*
113* .. Scalar Arguments ..
114 CHARACTER norm
115 INTEGER lda, n
116* ..
117* .. Array Arguments ..
118 REAL a( lda, * ), work( * )
119* ..
120*
121* =====================================================================
122*
123* .. Parameters ..
124 REAL one, zero
125 parameter( one = 1.0e+0, zero = 0.0e+0 )
126* ..
127* .. Local Scalars ..
128 INTEGER i, j
129 REAL scale, sum, value
130* ..
131* .. External Subroutines ..
132 EXTERNAL slassq
133* ..
134* .. External Functions ..
135 LOGICAL lsame, sisnan
136 EXTERNAL lsame, sisnan
137* ..
138* .. Intrinsic Functions ..
139 INTRINSIC abs, min, sqrt
140* ..
141* .. Executable Statements ..
142*
143 IF( n.EQ.0 ) THEN
144 VALUE = zero
145 ELSE IF( lsame( norm, 'M' ) ) THEN
146*
147* Find max(abs(A(i,j))).
148*
149 VALUE = zero
150 DO 20 j = 1, n
151 DO 10 i = 1, min( n, j+1 )
152 sum = abs( a( i, j ) )
153 IF( VALUE .LT. sum .OR. sisnan( sum ) ) VALUE = sum
154 10 CONTINUE
155 20 CONTINUE
156 ELSE IF( ( lsame( norm, 'O' ) ) .OR. ( norm.EQ.'1' ) ) THEN
157*
158* Find norm1(A).
159*
160 VALUE = zero
161 DO 40 j = 1, n
162 sum = zero
163 DO 30 i = 1, min( n, j+1 )
164 sum = sum + abs( a( i, j ) )
165 30 CONTINUE
166 IF( VALUE .LT. sum .OR. sisnan( sum ) ) VALUE = sum
167 40 CONTINUE
168 ELSE IF( lsame( norm, 'I' ) ) THEN
169*
170* Find normI(A).
171*
172 DO 50 i = 1, n
173 work( i ) = zero
174 50 CONTINUE
175 DO 70 j = 1, n
176 DO 60 i = 1, min( n, j+1 )
177 work( i ) = work( i ) + abs( a( i, j ) )
178 60 CONTINUE
179 70 CONTINUE
180 VALUE = zero
181 DO 80 i = 1, n
182 sum = work( i )
183 IF( VALUE .LT. sum .OR. sisnan( sum ) ) VALUE = sum
184 80 CONTINUE
185 ELSE IF( ( lsame( norm, 'F' ) ) .OR. ( lsame( norm, 'E' ) ) ) THEN
186*
187* Find normF(A).
188*
189 scale = zero
190 sum = one
191 DO 90 j = 1, n
192 CALL slassq( min( n, j+1 ), a( 1, j ), 1, scale, sum )
193 90 CONTINUE
194 VALUE = scale*sqrt( sum )
195 END IF
196*
197 slanhs = VALUE
198 RETURN
199*
200* End of SLANHS
201*
202 END
subroutine slassq(n, x, incx, scl, sumsq)
SLASSQ updates a sum of squares represented in scaled form.
Definition: slassq.f90:137
logical function sisnan(SIN)
SISNAN tests input for NaN.
Definition: sisnan.f:59
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:53
real function slanhs(NORM, N, A, LDA, WORK)
SLANHS returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
Definition: slanhs.f:108