LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
spptrf.f
Go to the documentation of this file.
1*> \brief \b SPPTRF
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8*> Download SPPTRF + dependencies
9*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/spptrf.f">
10*> [TGZ]</a>
11*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/spptrf.f">
12*> [ZIP]</a>
13*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/spptrf.f">
14*> [TXT]</a>
15*
16* Definition:
17* ===========
18*
19* SUBROUTINE SPPTRF( UPLO, N, AP, INFO )
20*
21* .. Scalar Arguments ..
22* CHARACTER UPLO
23* INTEGER INFO, N
24* ..
25* .. Array Arguments ..
26* REAL AP( * )
27* ..
28*
29*
30*> \par Purpose:
31* =============
32*>
33*> \verbatim
34*>
35*> SPPTRF computes the Cholesky factorization of a real symmetric
36*> positive definite matrix A stored in packed format.
37*>
38*> The factorization has the form
39*> A = U**T * U, if UPLO = 'U', or
40*> A = L * L**T, if UPLO = 'L',
41*> where U is an upper triangular matrix and L is lower triangular.
42*> \endverbatim
43*
44* Arguments:
45* ==========
46*
47*> \param[in] UPLO
48*> \verbatim
49*> UPLO is CHARACTER*1
50*> = 'U': Upper triangle of A is stored;
51*> = 'L': Lower triangle of A is stored.
52*> \endverbatim
53*>
54*> \param[in] N
55*> \verbatim
56*> N is INTEGER
57*> The order of the matrix A. N >= 0.
58*> \endverbatim
59*>
60*> \param[in,out] AP
61*> \verbatim
62*> AP is REAL array, dimension (N*(N+1)/2)
63*> On entry, the upper or lower triangle of the symmetric matrix
64*> A, packed columnwise in a linear array. The j-th column of A
65*> is stored in the array AP as follows:
66*> if UPLO = 'U', AP(i + (j-1)*j/2) = A(i,j) for 1<=i<=j;
67*> if UPLO = 'L', AP(i + (j-1)*(2n-j)/2) = A(i,j) for j<=i<=n.
68*> See below for further details.
69*>
70*> On exit, if INFO = 0, the triangular factor U or L from the
71*> Cholesky factorization A = U**T*U or A = L*L**T, in the same
72*> storage format as A.
73*> \endverbatim
74*>
75*> \param[out] INFO
76*> \verbatim
77*> INFO is INTEGER
78*> = 0: successful exit
79*> < 0: if INFO = -i, the i-th argument had an illegal value
80*> > 0: if INFO = i, the leading principal minor of order i
81*> is not positive, and the factorization could not be
82*> completed.
83*> \endverbatim
84*
85* Authors:
86* ========
87*
88*> \author Univ. of Tennessee
89*> \author Univ. of California Berkeley
90*> \author Univ. of Colorado Denver
91*> \author NAG Ltd.
92*
93*> \ingroup pptrf
94*
95*> \par Further Details:
96* =====================
97*>
98*> \verbatim
99*>
100*> The packed storage scheme is illustrated by the following example
101*> when N = 4, UPLO = 'U':
102*>
103*> Two-dimensional storage of the symmetric matrix A:
104*>
105*> a11 a12 a13 a14
106*> a22 a23 a24
107*> a33 a34 (aij = aji)
108*> a44
109*>
110*> Packed storage of the upper triangle of A:
111*>
112*> AP = [ a11, a12, a22, a13, a23, a33, a14, a24, a34, a44 ]
113*> \endverbatim
114*>
115* =====================================================================
116 SUBROUTINE spptrf( UPLO, N, AP, INFO )
117*
118* -- LAPACK computational routine --
119* -- LAPACK is a software package provided by Univ. of Tennessee, --
120* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
121*
122* .. Scalar Arguments ..
123 CHARACTER UPLO
124 INTEGER INFO, N
125* ..
126* .. Array Arguments ..
127 REAL AP( * )
128* ..
129*
130* =====================================================================
131*
132* .. Parameters ..
133 REAL ONE, ZERO
134 parameter( one = 1.0e+0, zero = 0.0e+0 )
135* ..
136* .. Local Scalars ..
137 LOGICAL UPPER
138 INTEGER J, JC, JJ
139 REAL AJJ
140* ..
141* .. External Functions ..
142 LOGICAL LSAME
143 REAL SDOT
144 EXTERNAL lsame, sdot
145* ..
146* .. External Subroutines ..
147 EXTERNAL sscal, sspr, stpsv, xerbla
148* ..
149* .. Intrinsic Functions ..
150 INTRINSIC sqrt
151* ..
152* .. Executable Statements ..
153*
154* Test the input parameters.
155*
156 info = 0
157 upper = lsame( uplo, 'U' )
158 IF( .NOT.upper .AND. .NOT.lsame( uplo, 'L' ) ) THEN
159 info = -1
160 ELSE IF( n.LT.0 ) THEN
161 info = -2
162 END IF
163 IF( info.NE.0 ) THEN
164 CALL xerbla( 'SPPTRF', -info )
165 RETURN
166 END IF
167*
168* Quick return if possible
169*
170 IF( n.EQ.0 )
171 $ RETURN
172*
173 IF( upper ) THEN
174*
175* Compute the Cholesky factorization A = U**T*U.
176*
177 jj = 0
178 DO 10 j = 1, n
179 jc = jj + 1
180 jj = jj + j
181*
182* Compute elements 1:J-1 of column J.
183*
184 IF( j.GT.1 )
185 $ CALL stpsv( 'Upper', 'Transpose', 'Non-unit', j-1, ap,
186 $ ap( jc ), 1 )
187*
188* Compute U(J,J) and test for non-positive-definiteness.
189*
190 ajj = ap( jj ) - sdot( j-1, ap( jc ), 1, ap( jc ), 1 )
191 IF( ajj.LE.zero ) THEN
192 ap( jj ) = ajj
193 GO TO 30
194 END IF
195 ap( jj ) = sqrt( ajj )
196 10 CONTINUE
197 ELSE
198*
199* Compute the Cholesky factorization A = L*L**T.
200*
201 jj = 1
202 DO 20 j = 1, n
203*
204* Compute L(J,J) and test for non-positive-definiteness.
205*
206 ajj = ap( jj )
207 IF( ajj.LE.zero ) THEN
208 ap( jj ) = ajj
209 GO TO 30
210 END IF
211 ajj = sqrt( ajj )
212 ap( jj ) = ajj
213*
214* Compute elements J+1:N of column J and update the trailing
215* submatrix.
216*
217 IF( j.LT.n ) THEN
218 CALL sscal( n-j, one / ajj, ap( jj+1 ), 1 )
219 CALL sspr( 'Lower', n-j, -one, ap( jj+1 ), 1,
220 $ ap( jj+n-j+1 ) )
221 jj = jj + n - j + 1
222 END IF
223 20 CONTINUE
224 END IF
225 GO TO 40
226*
227 30 CONTINUE
228 info = j
229*
230 40 CONTINUE
231 RETURN
232*
233* End of SPPTRF
234*
235 END
subroutine xerbla(srname, info)
Definition cblat2.f:3285
subroutine sspr(uplo, n, alpha, x, incx, ap)
SSPR
Definition sspr.f:127
subroutine spptrf(uplo, n, ap, info)
SPPTRF
Definition spptrf.f:117
subroutine sscal(n, sa, sx, incx)
SSCAL
Definition sscal.f:79
subroutine stpsv(uplo, trans, diag, n, ap, x, incx)
STPSV
Definition stpsv.f:144