Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 11/07/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

?sptri

Computes the inverse of a symmetric matrix using U*D*UT or L*D*LT Bunch-Kaufman factorization of matrix in packed storage.

Syntax

lapack_int LAPACKE_ssptri (int matrix_layout , char uplo , lapack_int n , float * ap , const lapack_int * ipiv );

lapack_int LAPACKE_dsptri (int matrix_layout , char uplo , lapack_int n , double * ap , const lapack_int * ipiv );

lapack_int LAPACKE_csptri (int matrix_layout , char uplo , lapack_int n , lapack_complex_float * ap , const lapack_int * ipiv );

lapack_int LAPACKE_zsptri (int matrix_layout , char uplo , lapack_int n , lapack_complex_double * ap , const lapack_int * ipiv );

Include Files

  • mkl.h

Description

The routine computes the inverse inv(A) of a packed symmetric matrix A. Before calling this routine, call ?sptrf to factorize A.

Input Parameters

matrix_layout

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

uplo

Must be 'U' or 'L'.

Indicates how the input matrix A has been factored:

If uplo = 'U', the array ap stores the Bunch-Kaufman factorization A = U*D*UT.

If uplo = 'L', the array ap stores the Bunch-Kaufman factorization A = L*D*LT.

n

The order of the matrix A; n 0.

ap

Arrays ap (size max(1,n(n+1)/2)) contains the factorization of the matrix A, as returned by ?sptrf.

ipiv

Array, size at least max(1, n). The ipiv array, as returned by ?sptrf.

Output Parameters

ap

Overwritten by the matrix inv(A) in packed form.

Return Values

This function returns a value info.

If info = 0, the execution is successful.

If info = -i, parameter i had an illegal value.

If info = i, the i-th diagonal element of D is zero, D is singular, and the inversion could not be completed.

Application Notes

The computed inverse X satisfies the following error bounds:

|D*UT*PT*X*P*U - I|  c(n)ε(|D||UT|PT|X|P|U| + |D||D-1|)

for uplo = 'U', and

|D*LT*PT*X*P*L - I|  c(n)ε(|D||LT|PT|X|P|L| + |D||D-1|)

for uplo = 'L'. Here c(n) is a modest linear function of n, and ε is the machine precision; I denotes the identity matrix.

The total number of floating-point operations is approximately (2/3)n3 for real flavors and (8/3)n3 for complex flavors.