Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 3/22/2024
Public

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

Document Table of Contents

?hptrd

Reduces a complex Hermitian matrix to tridiagonal form using packed storage.

Syntax

lapack_int LAPACKE_chptrd( int matrix_layout, char uplo, lapack_int n, lapack_complex_float* ap, float* d, float* e, lapack_complex_float* tau );

lapack_int LAPACKE_zhptrd( int matrix_layout, char uplo, lapack_int n, lapack_complex_double* ap, double* d, double* e, lapack_complex_double* tau );

Include Files

  • mkl.h

Description

The routine reduces a packed complex Hermitian matrix A to symmetric tridiagonal form T by a unitary similarity transformation: A = Q*T*QH. The unitary matrix Q is not formed explicitly but is represented as a product of n-1 elementary reflectors. Routines are provided for working with Q in this representation (see Application Notes below).

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'.

If uplo = 'U', ap stores the packed upper triangle of A.

If uplo = 'L', ap stores the packed lower triangle of A.

n

The order of the matrix A (n 0).

ap

Array, size at least max(1, n(n+1)/2). Contains either upper or lower triangle of A (as specified by uplo) in the packed form described in "Matrix Storage Schemes.

Output Parameters

ap

Overwritten by the tridiagonal matrix T and details of the unitary matrix Q, as specified by uplo.

d, e

Arrays:

d contains the diagonal elements of the matrix T.

The size of d must be at least max(1, n).

e contains the off-diagonal elements of T.

The size of e must be at least max(1, n-1).

tau

Array, size at least max(1, n-1). Stores (n-1) scalars that define elementary reflectors in decomposition of the unitary matrix Q in a product of reflectors.

Return Values

This function returns a value info.

If info=0, the execution is successful.

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

Application Notes

The computed matrix T is exactly similar to a matrix A + E, where ||E||2 = c(n)*ε*||A||2, c(n) is a modestly increasing function of n, and ε is the machine precision.

The approximate number of floating-point operations is (16/3)n3.

After calling this routine, you can call the following:

upgtr

to form the computed matrix Q explicitly

upmtr

to multiply a complex matrix by Q.

The real counterpart of this routine is sptrd.