(S|D)SYEVD

Single and double SYEVD.

Description

Computes the eigenvalues and (optionally) eigenvectors of a symmetric matrix using a divide-and-conquer algorithm.

Right eigenvectors satisfy:

\fvar{A} \mult v_i = \lambda_i v_i

Left eigenvectors satisfy:

\trans{u_i} \mult \fvar{A} = \lambda \trans{u_i}

Computed eigenvectors are normalized.

LAPACK Interface

void ssyevd(const char *JOBZ, const char *UPLO, const qml_long *N, float *A,
    const qml_long *LDA, float *W, float *WORK, const qml_long *LWORK,
    qml_long *IWORK, const qml_long *LIWORK, qml_long *INFO);

void dsyevd(const char *JOBZ, const char *UPLO, const qml_long *N, double *A,
    const qml_long *LDA, double *W, double *WORK, const qml_long *LWORK,
    qml_long *IWORK, const qml_long *LIWORK, qml_long *INFO);

Arguments

JOBZ Compute eigenvectors and store in A if ‘V’, otherwise do not compute
UPLO Specify whether to use ‘U’ upper triangular or ‘L’ lower triangular part of A
N Number of rows and columns of A
A Matrix of size N x N, overwritten on exit
LDA Leading dimension of A
W Array of size N containing eigenvalues on exit
WORK Work space of size at least LWORK
LWORK Size of work space (-1 to query)
IWORK Integer work space of size at least LIWORK
LIWORK Size of integer work space (-1 to query)
INFO 0 on success, <0 for illegal arguments, >0 if convergence failed