1: DOUBLE PRECISION FUNCTION DLANST( NORM, N, D, E )
2: *
3: * -- LAPACK auxiliary routine (version 3.2) --
4: * -- LAPACK is a software package provided by Univ. of Tennessee, --
5: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
6: * November 2006
7: *
8: * .. Scalar Arguments ..
9: CHARACTER NORM
10: INTEGER N
11: * ..
12: * .. Array Arguments ..
13: DOUBLE PRECISION D( * ), E( * )
14: * ..
15: *
16: * Purpose
17: * =======
18: *
19: * DLANST returns the value of the one norm, or the Frobenius norm, or
20: * the infinity norm, or the element of largest absolute value of a
21: * real symmetric tridiagonal matrix A.
22: *
23: * Description
24: * ===========
25: *
26: * DLANST returns the value
27: *
28: * DLANST = ( max(abs(A(i,j))), NORM = 'M' or 'm'
29: * (
30: * ( norm1(A), NORM = '1', 'O' or 'o'
31: * (
32: * ( normI(A), NORM = 'I' or 'i'
33: * (
34: * ( normF(A), NORM = 'F', 'f', 'E' or 'e'
35: *
36: * where norm1 denotes the one norm of a matrix (maximum column sum),
37: * normI denotes the infinity norm of a matrix (maximum row sum) and
38: * normF denotes the Frobenius norm of a matrix (square root of sum of
39: * squares). Note that max(abs(A(i,j))) is not a consistent matrix norm.
40: *
41: * Arguments
42: * =========
43: *
44: * NORM (input) CHARACTER*1
45: * Specifies the value to be returned in DLANST as described
46: * above.
47: *
48: * N (input) INTEGER
49: * The order of the matrix A. N >= 0. When N = 0, DLANST is
50: * set to zero.
51: *
52: * D (input) DOUBLE PRECISION array, dimension (N)
53: * The diagonal elements of A.
54: *
55: * E (input) DOUBLE PRECISION array, dimension (N-1)
56: * The (n-1) sub-diagonal or super-diagonal elements of A.
57: *
58: * =====================================================================
59: *
60: * .. Parameters ..
61: DOUBLE PRECISION ONE, ZERO
62: PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
63: * ..
64: * .. Local Scalars ..
65: INTEGER I
66: DOUBLE PRECISION ANORM, SCALE, SUM
67: * ..
68: * .. External Functions ..
69: LOGICAL LSAME
70: EXTERNAL LSAME
71: * ..
72: * .. External Subroutines ..
73: EXTERNAL DLASSQ
74: * ..
75: * .. Intrinsic Functions ..
76: INTRINSIC ABS, MAX, SQRT
77: * ..
78: * .. Executable Statements ..
79: *
80: IF( N.LE.0 ) THEN
81: ANORM = ZERO
82: ELSE IF( LSAME( NORM, 'M' ) ) THEN
83: *
84: * Find max(abs(A(i,j))).
85: *
86: ANORM = ABS( D( N ) )
87: DO 10 I = 1, N - 1
88: ANORM = MAX( ANORM, ABS( D( I ) ) )
89: ANORM = MAX( ANORM, ABS( E( I ) ) )
90: 10 CONTINUE
91: ELSE IF( LSAME( NORM, 'O' ) .OR. NORM.EQ.'1' .OR.
92: $ LSAME( NORM, 'I' ) ) THEN
93: *
94: * Find norm1(A).
95: *
96: IF( N.EQ.1 ) THEN
97: ANORM = ABS( D( 1 ) )
98: ELSE
99: ANORM = MAX( ABS( D( 1 ) )+ABS( E( 1 ) ),
100: $ ABS( E( N-1 ) )+ABS( D( N ) ) )
101: DO 20 I = 2, N - 1
102: ANORM = MAX( ANORM, ABS( D( I ) )+ABS( E( I ) )+
103: $ ABS( E( I-1 ) ) )
104: 20 CONTINUE
105: END IF
106: ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
107: *
108: * Find normF(A).
109: *
110: SCALE = ZERO
111: SUM = ONE
112: IF( N.GT.1 ) THEN
113: CALL DLASSQ( N-1, E, 1, SCALE, SUM )
114: SUM = 2*SUM
115: END IF
116: CALL DLASSQ( N, D, 1, SCALE, SUM )
117: ANORM = SCALE*SQRT( SUM )
118: END IF
119: *
120: DLANST = ANORM
121: RETURN
122: *
123: * End of DLANST
124: *
125: END
CVSweb interface <joel.bertrand@systella.fr>