Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 10/31/2024
Public
Document Table of Contents

?pstrf

Computes the Cholesky factorization with complete pivoting of a real symmetric (complex Hermitian) positive semidefinite matrix.

Syntax

call spstrf( uplo, n, a, lda, piv, rank, tol, work, info )

call dpstrf( uplo, n, a, lda, piv, rank, tol, work, info )

call cpstrf( uplo, n, a, lda, piv, rank, tol, work, info )

call zpstrf( uplo, n, a, lda, piv, rank, tol, work, info )

Include Files

  • mkl.fi, mkl_lapack.f90

Description

The routine computes the Cholesky factorization with complete pivoting of a real symmetric (complex Hermitian) positive semidefinite matrix. The form of the factorization is:

  • PT * A * P = UT * U, if uplo ='U' for real flavors,

  • PT * A * P = UH * U, if uplo ='U' for complex flavors,

  • PT * A * P = L * LT, if uplo ='L' for real flavors,

  • PT * A * P = L * LH, if uplo ='L' for complex flavors,

where P is a permutation matrix stored as vector piv, and U and L are upper and lower triangular matrices, respectively.

This algorithm does not attempt to check that A is positive semidefinite. This version of the algorithm calls level 3 BLAS.

Input Parameters

uplo

CHARACTER*1. Must be 'U' or 'L'.

Indicates whether the upper or lower triangular part of A is stored:

If uplo = 'U', the array a stores the upper triangular part of the matrix A, and the strictly lower triangular part of the matrix is not referenced.

If uplo = 'L', the array a stores the lower triangular part of the matrix A, and the strictly upper triangular part of the matrix is not referenced.

n

INTEGER. The order of matrix A; n 0.

a

REAL for spstrf

DOUBLE PRECISION for dpstrf

COMPLEX for cpstrf

DOUBLE COMPLEX for zpstrf.

Array a, size (lda,*). The array a contains either the upper or the lower triangular part of the matrix A (see uplo). The second dimension of a must be at least max(1, n).

work

REAL for spstrf and cpstrf

DOUBLE PRECISION for dpstrf and zpstrf.

work(*) is a workspace array. The dimension of work is at least max(1,2*n).

tol

REAL for single precision flavors

DOUBLE PRECISION for double precision flavors.

User defined tolerance. If tol < 0, then n*ε*max(Ak,k), where ε is the machine precision, will be used (see Error Analysis for the definition of machine precision). The algorithm terminates at the (k-1)-st step, if the pivot tol.

lda

INTEGER. The leading dimension of a; at least max(1, n).

Output Parameters

a

If info = 0, the factor U or L from the Cholesky factorization is as described in Description.

piv

INTEGER.

Array, size at least max(1, n). The array piv is such that the nonzero entries are Ppiv(k),k (1 kn).

rank

INTEGER.

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

info

INTEGER. If info = 0, the execution is successful.

If info = -k, the k-th argument had an illegal value.

If info > 0, the matrix A is either rank deficient with a computed rank as returned in rank, or is not positive semidefinite.