root / src / lapack / double / dlanst.f @ 2
Historique | Voir | Annoter | Télécharger (3,51 ko)
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 |