annotate libcruft/lapack/dlanst.f @ 7948:af10baa63915 ss-3-1-50

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