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