LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
zlacon.f
Go to the documentation of this file.
1*> \brief \b ZLACON estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vector products.
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8*> \htmlonly
9*> Download ZLACON + dependencies
10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlacon.f">
11*> [TGZ]</a>
12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlacon.f">
13*> [ZIP]</a>
14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacon.f">
15*> [TXT]</a>
16*> \endhtmlonly
17*
18* Definition:
19* ===========
20*
21* SUBROUTINE ZLACON( N, V, X, EST, KASE )
22*
23* .. Scalar Arguments ..
24* INTEGER KASE, N
25* DOUBLE PRECISION EST
26* ..
27* .. Array Arguments ..
28* COMPLEX*16 V( N ), X( N )
29* ..
30*
31*
32*> \par Purpose:
33* =============
34*>
35*> \verbatim
36*>
37*> ZLACON estimates the 1-norm of a square, complex matrix A.
38*> Reverse communication is used for evaluating matrix-vector products.
39*> \endverbatim
40*
41* Arguments:
42* ==========
43*
44*> \param[in] N
45*> \verbatim
46*> N is INTEGER
47*> The order of the matrix. N >= 1.
48*> \endverbatim
49*>
50*> \param[out] V
51*> \verbatim
52*> V is COMPLEX*16 array, dimension (N)
53*> On the final return, V = A*W, where EST = norm(V)/norm(W)
54*> (W is not returned).
55*> \endverbatim
56*>
57*> \param[in,out] X
58*> \verbatim
59*> X is COMPLEX*16 array, dimension (N)
60*> On an intermediate return, X should be overwritten by
61*> A * X, if KASE=1,
62*> A**H * X, if KASE=2,
63*> where A**H is the conjugate transpose of A, and ZLACON must be
64*> re-called with all the other parameters unchanged.
65*> \endverbatim
66*>
67*> \param[in,out] EST
68*> \verbatim
69*> EST is DOUBLE PRECISION
70*> On entry with KASE = 1 or 2 and JUMP = 3, EST should be
71*> unchanged from the previous call to ZLACON.
72*> On exit, EST is an estimate (a lower bound) for norm(A).
73*> \endverbatim
74*>
75*> \param[in,out] KASE
76*> \verbatim
77*> KASE is INTEGER
78*> On the initial call to ZLACON, KASE should be 0.
79*> On an intermediate return, KASE will be 1 or 2, indicating
80*> whether X should be overwritten by A * X or A**H * X.
81*> On the final return from ZLACON, KASE will again be 0.
82*> \endverbatim
83*
84* Authors:
85* ========
86*
87*> \author Univ. of Tennessee
88*> \author Univ. of California Berkeley
89*> \author Univ. of Colorado Denver
90*> \author NAG Ltd.
91*
92*> \ingroup lacon
93*
94*> \par Further Details:
95* =====================
96*>
97*> Originally named CONEST, dated March 16, 1988. \n
98*> Last modified: April, 1999
99*
100*> \par Contributors:
101* ==================
102*>
103*> Nick Higham, University of Manchester
104*
105*> \par References:
106* ================
107*>
108*> N.J. Higham, "FORTRAN codes for estimating the one-norm of
109*> a real or complex matrix, with applications to condition estimation",
110*> ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.
111*>
112* =====================================================================
113 SUBROUTINE zlacon( N, V, X, EST, KASE )
114*
115* -- LAPACK auxiliary routine --
116* -- LAPACK is a software package provided by Univ. of Tennessee, --
117* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
118*
119* .. Scalar Arguments ..
120 INTEGER KASE, N
121 DOUBLE PRECISION EST
122* ..
123* .. Array Arguments ..
124 COMPLEX*16 V( N ), X( N )
125* ..
126*
127* =====================================================================
128*
129* .. Parameters ..
130 INTEGER ITMAX
131 parameter( itmax = 5 )
132 DOUBLE PRECISION ONE, TWO
133 parameter( one = 1.0d0, two = 2.0d0 )
134 COMPLEX*16 CZERO, CONE
135 parameter( czero = ( 0.0d0, 0.0d0 ),
136 $ cone = ( 1.0d0, 0.0d0 ) )
137* ..
138* .. Local Scalars ..
139 INTEGER I, ITER, J, JLAST, JUMP
140 DOUBLE PRECISION ABSXI, ALTSGN, ESTOLD, SAFMIN, TEMP
141* ..
142* .. External Functions ..
143 INTEGER IZMAX1
144 DOUBLE PRECISION DLAMCH, DZSUM1
145 EXTERNAL izmax1, dlamch, dzsum1
146* ..
147* .. External Subroutines ..
148 EXTERNAL zcopy
149* ..
150* .. Intrinsic Functions ..
151 INTRINSIC abs, dble, dcmplx, dimag
152* ..
153* .. Save statement ..
154 SAVE
155* ..
156* .. Executable Statements ..
157*
158 safmin = dlamch( 'Safe minimum' )
159 IF( kase.EQ.0 ) THEN
160 DO 10 i = 1, n
161 x( i ) = dcmplx( one / dble( n ) )
162 10 CONTINUE
163 kase = 1
164 jump = 1
165 RETURN
166 END IF
167*
168 GO TO ( 20, 40, 70, 90, 120 )jump
169*
170* ................ ENTRY (JUMP = 1)
171* FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X.
172*
173 20 CONTINUE
174 IF( n.EQ.1 ) THEN
175 v( 1 ) = x( 1 )
176 est = abs( v( 1 ) )
177* ... QUIT
178 GO TO 130
179 END IF
180 est = dzsum1( n, x, 1 )
181*
182 DO 30 i = 1, n
183 absxi = abs( x( i ) )
184 IF( absxi.GT.safmin ) THEN
185 x( i ) = dcmplx( dble( x( i ) ) / absxi,
186 $ dimag( x( i ) ) / absxi )
187 ELSE
188 x( i ) = cone
189 END IF
190 30 CONTINUE
191 kase = 2
192 jump = 2
193 RETURN
194*
195* ................ ENTRY (JUMP = 2)
196* FIRST ITERATION. X HAS BEEN OVERWRITTEN BY CTRANS(A)*X.
197*
198 40 CONTINUE
199 j = izmax1( n, x, 1 )
200 iter = 2
201*
202* MAIN LOOP - ITERATIONS 2,3,...,ITMAX.
203*
204 50 CONTINUE
205 DO 60 i = 1, n
206 x( i ) = czero
207 60 CONTINUE
208 x( j ) = cone
209 kase = 1
210 jump = 3
211 RETURN
212*
213* ................ ENTRY (JUMP = 3)
214* X HAS BEEN OVERWRITTEN BY A*X.
215*
216 70 CONTINUE
217 CALL zcopy( n, x, 1, v, 1 )
218 estold = est
219 est = dzsum1( n, v, 1 )
220*
221* TEST FOR CYCLING.
222 IF( est.LE.estold )
223 $ GO TO 100
224*
225 DO 80 i = 1, n
226 absxi = abs( x( i ) )
227 IF( absxi.GT.safmin ) THEN
228 x( i ) = dcmplx( dble( x( i ) ) / absxi,
229 $ dimag( x( i ) ) / absxi )
230 ELSE
231 x( i ) = cone
232 END IF
233 80 CONTINUE
234 kase = 2
235 jump = 4
236 RETURN
237*
238* ................ ENTRY (JUMP = 4)
239* X HAS BEEN OVERWRITTEN BY CTRANS(A)*X.
240*
241 90 CONTINUE
242 jlast = j
243 j = izmax1( n, x, 1 )
244 IF( ( abs( x( jlast ) ).NE.abs( x( j ) ) ) .AND.
245 $ ( iter.LT.itmax ) ) THEN
246 iter = iter + 1
247 GO TO 50
248 END IF
249*
250* ITERATION COMPLETE. FINAL STAGE.
251*
252 100 CONTINUE
253 altsgn = one
254 DO 110 i = 1, n
255 x( i ) = dcmplx( altsgn*( one+dble( i-1 ) / dble( n-1 ) ) )
256 altsgn = -altsgn
257 110 CONTINUE
258 kase = 1
259 jump = 5
260 RETURN
261*
262* ................ ENTRY (JUMP = 5)
263* X HAS BEEN OVERWRITTEN BY A*X.
264*
265 120 CONTINUE
266 temp = two*( dzsum1( n, x, 1 ) / dble( 3*n ) )
267 IF( temp.GT.est ) THEN
268 CALL zcopy( n, x, 1, v, 1 )
269 est = temp
270 END IF
271*
272 130 CONTINUE
273 kase = 0
274 RETURN
275*
276* End of ZLACON
277*
278 END
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
Definition zcopy.f:81
subroutine zlacon(n, v, x, est, kase)
ZLACON estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
Definition zlacon.f:114