# ?potrf2

Computes Cholesky factorization using a recursive algorithm.

## Syntax

lapack_int LAPACKE_spotrf2 (int matrix_layout, char uplo, lapack_int n, float * a, lapack_int lda);

lapack_int LAPACKE_dpotrf2 (int matrix_layout, char uplo, lapack_int n, double * a, lapack_int lda);

lapack_int LAPACKE_cpotrf2 (int matrix_layout, char uplo, lapack_int n, lapack_complex_float * a, lapack_int lda);

lapack_int LAPACKE_zpotrf2 (int matrix_layout, char uplo, lapack_int n, lapack_complex_double * a, lapack_int lda);

• mkl.h

## Description

?potrf2 computes the Cholesky factorization of a real or complex symmetric positive definite matrix A using the recursive algorithm.

The factorization has the form

for real flavors:

A = UT * U, if uplo = 'U', or

A = L * LT, if uplo = 'L',

for complex flavors:

A = UH * U, if uplo = 'U',

or A = L * LH, if uplo = 'L',

where U is an upper triangular matrix and L is lower triangular.

This is the recursive version of the algorithm. It divides the matrix into four submatrices:

where A11 is n1 by n1 and A22 is n2 by n2, with n1 = n/2 and n2 = n-n1.

The subroutine calls itself to factor A11. Update and scale A21 or A12, update A22 then call itself to factor A22.

## Input Parameters

matrix_layout

Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).

uplo

= 'U': Upper triangle of A is stored;

= 'L': Lower triangle of A is stored.

n

The order of the matrix A.

n 0.

a

Array, size (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.

lda

The leading dimension of the array a.

lda max(1,n).

## Output Parameters

 a On exit, if info = 0, the factor U or L from the Cholesky factorization. For real flavors: A = UT*U or A = L*LT; For complex flavors: A = UH*U or A = L*LH.

## Return Values

This function returns a value info.

= 0: successful exit

< 0: if info = -i, the i-th argument had an illegal value

> 0: if info = i, the leading minor of order i is not positive definite, and the factorization could not be completed.

For more complete information about compiler optimizations, see our Optimization Notice.