LAPACK  3.10.1 LAPACK: Linear Algebra PACKage
slanst.f
Go to the documentation of this file.
1 *> \brief \b SLANST returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a real symmetric tridiagonal 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/slanst.f">
11 *> [TGZ]</a>
12 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slanst.f">
13 *> [ZIP]</a>
14 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slanst.f">
15 *> [TXT]</a>
16 *> \endhtmlonly
17 *
18 * Definition:
19 * ===========
20 *
21 * REAL FUNCTION SLANST( NORM, N, D, E )
22 *
23 * .. Scalar Arguments ..
24 * CHARACTER NORM
25 * INTEGER N
26 * ..
27 * .. Array Arguments ..
28 * REAL D( * ), E( * )
29 * ..
30 *
31 *
32 *> \par Purpose:
33 * =============
34 *>
35 *> \verbatim
36 *>
37 *> SLANST 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 symmetric tridiagonal matrix A.
40 *> \endverbatim
41 *>
42 *> \return SLANST
43 *> \verbatim
44 *>
45 *> SLANST = ( 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 SLANST 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, SLANST is
73 *> set to zero.
74 *> \endverbatim
75 *>
76 *> \param[in] D
77 *> \verbatim
78 *> D is REAL array, dimension (N)
79 *> The diagonal elements of A.
80 *> \endverbatim
81 *>
82 *> \param[in] E
83 *> \verbatim
84 *> E is REAL array, dimension (N-1)
85 *> The (n-1) sub-diagonal or super-diagonal elements of A.
86 *> \endverbatim
87 *
88 * Authors:
89 * ========
90 *
91 *> \author Univ. of Tennessee
92 *> \author Univ. of California Berkeley
93 *> \author Univ. of Colorado Denver
94 *> \author NAG Ltd.
95 *
96 *> \ingroup OTHERauxiliary
97 *
98 * =====================================================================
99  REAL function slanst( norm, n, d, e )
100 *
101 * -- LAPACK auxiliary routine --
102 * -- LAPACK is a software package provided by Univ. of Tennessee, --
103 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
104 *
105 * .. Scalar Arguments ..
106  CHARACTER norm
107  INTEGER n
108 * ..
109 * .. Array Arguments ..
110  REAL d( * ), e( * )
111 * ..
112 *
113 * =====================================================================
114 *
115 * .. Parameters ..
116  REAL one, zero
117  parameter( one = 1.0e+0, zero = 0.0e+0 )
118 * ..
119 * .. Local Scalars ..
120  INTEGER i
121  REAL anorm, scale, sum
122 * ..
123 * .. External Functions ..
124  LOGICAL lsame, sisnan
125  EXTERNAL lsame, sisnan
126 * ..
127 * .. External Subroutines ..
128  EXTERNAL slassq
129 * ..
130 * .. Intrinsic Functions ..
131  INTRINSIC abs, sqrt
132 * ..
133 * .. Executable Statements ..
134 *
135  IF( n.LE.0 ) THEN
136  anorm = zero
137  ELSE IF( lsame( norm, 'M' ) ) THEN
138 *
139 * Find max(abs(A(i,j))).
140 *
141  anorm = abs( d( n ) )
142  DO 10 i = 1, n - 1
143  sum = abs( d( i ) )
144  IF( anorm .LT. sum .OR. sisnan( sum ) ) anorm = sum
145  sum = abs( e( i ) )
146  IF( anorm .LT. sum .OR. sisnan( sum ) ) anorm = sum
147  10 CONTINUE
148  ELSE IF( lsame( norm, 'O' ) .OR. norm.EQ.'1' .OR.
149  \$ lsame( norm, 'I' ) ) THEN
150 *
151 * Find norm1(A).
152 *
153  IF( n.EQ.1 ) THEN
154  anorm = abs( d( 1 ) )
155  ELSE
156  anorm = abs( d( 1 ) )+abs( e( 1 ) )
157  sum = abs( e( n-1 ) )+abs( d( n ) )
158  IF( anorm .LT. sum .OR. sisnan( sum ) ) anorm = sum
159  DO 20 i = 2, n - 1
160  sum = abs( d( i ) )+abs( e( i ) )+abs( e( i-1 ) )
161  IF( anorm .LT. sum .OR. sisnan( sum ) ) anorm = sum
162  20 CONTINUE
163  END IF
164  ELSE IF( ( lsame( norm, 'F' ) ) .OR. ( lsame( norm, 'E' ) ) ) THEN
165 *
166 * Find normF(A).
167 *
168  scale = zero
169  sum = one
170  IF( n.GT.1 ) THEN
171  CALL slassq( n-1, e, 1, scale, sum )
172  sum = 2*sum
173  END IF
174  CALL slassq( n, d, 1, scale, sum )
175  anorm = scale*sqrt( sum )
176  END IF
177 *
178  slanst = anorm
179  RETURN
180 *
181 * End of SLANST
182 *
183  END
subroutine slassq(n, x, incx, scl, sumsq)
SLASSQ updates a sum of squares represented in scaled form.
Definition: slassq.f90:137
real function slanst(NORM, N, D, E)
SLANST returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...
Definition: slanst.f:100
logical function sisnan(SIN)
SISNAN tests input for NaN.
Definition: sisnan.f:59
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:53