LAPACK 3.12.0 LAPACK: Linear Algebra PACKage
Searching...
No Matches
slatrz.f
Go to the documentation of this file.
1*> \brief \b SLATRZ factors an upper trapezoidal matrix by means of orthogonal 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/slatrz.f">
11*> [TGZ]</a>
12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/slatrz.f">
13*> [ZIP]</a>
14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/slatrz.f">
15*> [TXT]</a>
16*> \endhtmlonly
17*
18* Definition:
19* ===========
20*
21* SUBROUTINE SLATRZ( M, N, L, A, LDA, TAU, WORK )
22*
23* .. Scalar Arguments ..
24* INTEGER L, LDA, M, N
25* ..
26* .. Array Arguments ..
27* REAL A( LDA, * ), TAU( * ), WORK( * )
28* ..
29*
30*
31*> \par Purpose:
32* =============
33*>
34*> \verbatim
35*>
36*> SLATRZ factors the M-by-(M+L) real 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 orthogonal transformations. Z is an (M+L)-by-(M+L) orthogonal
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 REAL 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*> orthogonal 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 REAL array, dimension (M)
84*> The scalar factors of the elementary reflectors.
85*> \endverbatim
86*>
87*> \param[out] WORK
88*> \verbatim
89*> WORK is REAL 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 )**T, 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 slatrz( 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 REAL A( LDA, * ), TAU( * ), WORK( * )
150* ..
151*
152* =====================================================================
153*
154* .. Parameters ..
155 REAL ZERO
156 parameter( zero = 0.0e+0 )
157* ..
158* .. Local Scalars ..
159 INTEGER I
160* ..
161* .. External Subroutines ..
162 EXTERNAL slarfg, slarz
163* ..
164* .. Executable Statements ..
165*
166* Test the input arguments
167*
168* Quick return if possible
169*
170 IF( m.EQ.0 ) THEN
171 RETURN
172 ELSE IF( m.EQ.n ) THEN
173 DO 10 i = 1, n
174 tau( i ) = zero
175 10 CONTINUE
176 RETURN
177 END IF
178*
179 DO 20 i = m, 1, -1
180*
181* Generate elementary reflector H(i) to annihilate
182* [ A(i,i) A(i,n-l+1:n) ]
183*
184 CALL slarfg( l+1, a( i, i ), a( i, n-l+1 ), lda, tau( i ) )
185*
186* Apply H(i) to A(1:i-1,i:n) from the right
187*
188 CALL slarz( 'Right', i-1, n-i+1, l, a( i, n-l+1 ), lda,
189 \$ tau( i ), a( 1, i ), lda, work )
190*
191 20 CONTINUE
192*
193 RETURN
194*
195* End of SLATRZ
196*
197 END
subroutine slarfg(n, alpha, x, incx, tau)
SLARFG generates an elementary reflector (Householder matrix).
Definition slarfg.f:106
subroutine slarz(side, m, n, l, v, incv, tau, c, ldc, work)
SLARZ applies an elementary reflector (as returned by stzrzf) to a general matrix.
Definition slarz.f:145
subroutine slatrz(m, n, l, a, lda, tau, work)
SLATRZ factors an upper trapezoidal matrix by means of orthogonal transformations.
Definition slatrz.f:140