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