LAPACK 3.12.0 LAPACK: Linear Algebra PACKage
Searching...
No Matches
clatrz.f
Go to the documentation of this file.
1*> \brief \b CLATRZ factors an upper trapezoidal matrix by means of unitary transformations.
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8*> \htmlonly
10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/clatrz.f">
11*> [TGZ]</a>
12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/clatrz.f">
13*> [ZIP]</a>
14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatrz.f">
15*> [TXT]</a>
16*> \endhtmlonly
17*
18* Definition:
19* ===========
20*
21* SUBROUTINE CLATRZ( M, N, L, A, LDA, TAU, WORK )
22*
23* .. Scalar Arguments ..
24* INTEGER L, LDA, M, N
25* ..
26* .. Array Arguments ..
27* COMPLEX A( LDA, * ), TAU( * ), WORK( * )
28* ..
29*
30*
31*> \par Purpose:
32* =============
33*>
34*> \verbatim
35*>
36*> CLATRZ factors the M-by-(M+L) complex upper trapezoidal matrix
37*> [ A1 A2 ] = [ A(1:M,1:M) A(1:M,N-L+1:N) ] as ( R 0 ) * Z by means
38*> of unitary transformations, where Z is an (M+L)-by-(M+L) unitary
39*> matrix and, R and A1 are M-by-M upper triangular matrices.
40*> \endverbatim
41*
42* Arguments:
43* ==========
44*
45*> \param[in] M
46*> \verbatim
47*> M is INTEGER
48*> The number of rows of the matrix A. M >= 0.
49*> \endverbatim
50*>
51*> \param[in] N
52*> \verbatim
53*> N is INTEGER
54*> The number of columns of the matrix A. N >= 0.
55*> \endverbatim
56*>
57*> \param[in] L
58*> \verbatim
59*> L is INTEGER
60*> The number of columns of the matrix A containing the
61*> meaningful part of the Householder vectors. N-M >= L >= 0.
62*> \endverbatim
63*>
64*> \param[in,out] A
65*> \verbatim
66*> A is COMPLEX array, dimension (LDA,N)
67*> On entry, the leading M-by-N upper trapezoidal part of the
68*> array A must contain the matrix to be factorized.
69*> On exit, the leading M-by-M upper triangular part of A
70*> contains the upper triangular matrix R, and elements N-L+1 to
71*> N of the first M rows of A, with the array TAU, represent the
72*> unitary matrix Z as a product of M elementary reflectors.
73*> \endverbatim
74*>
75*> \param[in] LDA
76*> \verbatim
77*> LDA is INTEGER
78*> The leading dimension of the array A. LDA >= max(1,M).
79*> \endverbatim
80*>
81*> \param[out] TAU
82*> \verbatim
83*> TAU is COMPLEX array, dimension (M)
84*> The scalar factors of the elementary reflectors.
85*> \endverbatim
86*>
87*> \param[out] WORK
88*> \verbatim
89*> WORK is COMPLEX array, dimension (M)
90*> \endverbatim
91*
92* Authors:
93* ========
94*
95*> \author Univ. of Tennessee
96*> \author Univ. of California Berkeley
97*> \author Univ. of Colorado Denver
98*> \author NAG Ltd.
99*
100*> \ingroup latrz
101*
102*> \par Contributors:
103* ==================
104*>
105*> A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA
106*
107*> \par Further Details:
108* =====================
109*>
110*> \verbatim
111*>
112*> The factorization is obtained by Householder's method. The kth
113*> transformation matrix, Z( k ), which is used to introduce zeros into
114*> the ( m - k + 1 )th row of A, is given in the form
115*>
116*> Z( k ) = ( I 0 ),
117*> ( 0 T( k ) )
118*>
119*> where
120*>
121*> T( k ) = I - tau*u( k )*u( k )**H, u( k ) = ( 1 ),
122*> ( 0 )
123*> ( z( k ) )
124*>
125*> tau is a scalar and z( k ) is an l element vector. tau and z( k )
126*> are chosen to annihilate the elements of the kth row of A2.
127*>
128*> The scalar tau is returned in the kth element of TAU and the vector
129*> u( k ) in the kth row of A2, such that the elements of z( k ) are
130*> in a( k, l + 1 ), ..., a( k, n ). The elements of R are returned in
131*> the upper triangular part of A1.
132*>
133*> Z is given by
134*>
135*> Z = Z( 1 ) * Z( 2 ) * ... * Z( m ).
136*> \endverbatim
137*>
138* =====================================================================
139 SUBROUTINE clatrz( M, N, L, A, LDA, TAU, WORK )
140*
141* -- LAPACK computational routine --
142* -- LAPACK is a software package provided by Univ. of Tennessee, --
143* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
144*
145* .. Scalar Arguments ..
146 INTEGER L, LDA, M, N
147* ..
148* .. Array Arguments ..
149 COMPLEX A( LDA, * ), TAU( * ), WORK( * )
150* ..
151*
152* =====================================================================
153*
154* .. Parameters ..
155 COMPLEX ZERO
156 parameter( zero = ( 0.0e+0, 0.0e+0 ) )
157* ..
158* .. Local Scalars ..
159 INTEGER I
160 COMPLEX ALPHA
161* ..
162* .. External Subroutines ..
163 EXTERNAL clacgv, clarfg, clarz
164* ..
165* .. Intrinsic Functions ..
166 INTRINSIC conjg
167* ..
168* .. Executable Statements ..
169*
170* Quick return if possible
171*
172 IF( m.EQ.0 ) THEN
173 RETURN
174 ELSE IF( m.EQ.n ) THEN
175 DO 10 i = 1, n
176 tau( i ) = zero
177 10 CONTINUE
178 RETURN
179 END IF
180*
181 DO 20 i = m, 1, -1
182*
183* Generate elementary reflector H(i) to annihilate
184* [ A(i,i) A(i,n-l+1:n) ]
185*
186 CALL clacgv( l, a( i, n-l+1 ), lda )
187 alpha = conjg( a( i, i ) )
188 CALL clarfg( l+1, alpha, a( i, n-l+1 ), lda, tau( i ) )
189 tau( i ) = conjg( tau( i ) )
190*
191* Apply H(i) to A(1:i-1,i:n) from the right
192*
193 CALL clarz( 'Right', i-1, n-i+1, l, a( i, n-l+1 ), lda,
194 \$ conjg( tau( i ) ), a( 1, i ), lda, work )
195 a( i, i ) = conjg( alpha )
196*
197 20 CONTINUE
198*
199 RETURN
200*
201* End of CLATRZ
202*
203 END
subroutine clacgv(n, x, incx)
CLACGV conjugates a complex vector.
Definition clacgv.f:74
subroutine clarfg(n, alpha, x, incx, tau)
CLARFG generates an elementary reflector (Householder matrix).
Definition clarfg.f:106
subroutine clarz(side, m, n, l, v, incv, tau, c, ldc, work)
CLARZ applies an elementary reflector (as returned by stzrzf) to a general matrix.
Definition clarz.f:147
subroutine clatrz(m, n, l, a, lda, tau, work)
CLATRZ factors an upper trapezoidal matrix by means of unitary transformations.
Definition clatrz.f:140