---
name: "spstrf"
section: "3lapack"
platform: "linux"
package: "liblapack-doc"
version: "3.2.1-8"
release: "Debian 6.0 (Squeeze)"
platforms: ["linux"]
url: "https://new.carta.tech/spstrf/3lapack"
---

# spstrf(3lapack)

computes the Cholesky factorization with complete pivoting of a real symmetric positive semidefinite matrix A

## NAME

SPSTRF - computes the Cholesky factorization with complete pivoting of a real symmetric positive semidefinite matrix A

## SYNOPSIS

- SUBROUTINE SPSTRF(

  UPLO, N, A, LDA, PIV, RANK, TOL, WORK, INFO )

- REAL

  TOL

- INTEGER

  INFO, LDA, N, RANK

- CHARACTER

  UPLO

- REAL

  A( LDA, \* ), WORK( 2\*N )

- INTEGER

  PIV( N )

## PURPOSE

SPSTRF computes the Cholesky factorization with complete pivoting of a real symmetric positive semidefinite matrix A. The factorization has the form\
\
    P' \* A \* P = U' \* U ,  if UPLO = 'U',\
\
    P' \* A \* P = L  \* L',  if UPLO = 'L',\
 where U is an upper triangular matrix and L is lower triangular, and P is stored as vector PIV.\
 This algorithm does not attempt to check that A is positive semidefinite. This version of the algorithm calls level 3 BLAS.

## ARGUMENTS

- UPLO (input) CHARACTER\*1

  Specifies whether the upper or lower triangular part of the symmetric matrix A is stored. = 'U':  Upper triangular\
   \= 'L':  Lower triangular

- N (input) INTEGER

  The order of the matrix A.  N \>= 0.

- A (input/output) REAL array, dimension (LDA,N)

  On entry, the symmetric matrix A.  If UPLO = 'U', the leading n by n upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced.  If UPLO = 'L', the leading n by n lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if INFO = 0, the factor U or L from the Cholesky factorization as above.

- PIV (output) INTEGER array, dimension (N)

  PIV is such that the nonzero entries are P( PIV(K), K ) = 1.

- RANK (output) INTEGER

  The rank of A given by the number of steps the algorithm completed.

- TOL (input) REAL

  User defined tolerance. If TOL \< 0, then N\*U\*MAX( A(K,K) ) will be used. The algorithm terminates at the (K-1)st step if the pivot \<= TOL.

- LDA (input) INTEGER

  The leading dimension of the array A.  LDA \>= max(1,N).

- WORK REAL array, dimension (2\*N)

  Work space.

- INFO (output) INTEGER

  \< 0: If INFO = -K, the K-th argument had an illegal value,\
   \= 0: algorithm completed successfully, and\
   \> 0: the matrix A is either rank deficient with computed rank as returned in RANK, or is indefinite.  See Section 7 of LAPACK Working Note #161 for further information.
