NAME

dstevd - compute all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix


SYNOPSIS

  SUBROUTINE DSTEVD( JOBZ, N, D, E, Z, LDZ, WORK, LWORK, IWORK, 
 *      LIWORK, INFO)
  CHARACTER * 1 JOBZ
  INTEGER N, LDZ, LWORK, LIWORK, INFO
  INTEGER IWORK(*)
  DOUBLE PRECISION D(*), E(*), Z(LDZ,*), WORK(*)
  SUBROUTINE DSTEVD_64( JOBZ, N, D, E, Z, LDZ, WORK, LWORK, IWORK, 
 *      LIWORK, INFO)
  CHARACTER * 1 JOBZ
  INTEGER*8 N, LDZ, LWORK, LIWORK, INFO
  INTEGER*8 IWORK(*)
  DOUBLE PRECISION D(*), E(*), Z(LDZ,*), WORK(*)

F95 INTERFACE

  SUBROUTINE STEVD( JOBZ, [N], D, E, Z, [LDZ], [WORK], [LWORK], [IWORK], 
 *       [LIWORK], [INFO])
  CHARACTER(LEN=1) :: JOBZ
  INTEGER :: N, LDZ, LWORK, LIWORK, INFO
  INTEGER, DIMENSION(:) :: IWORK
  REAL(8), DIMENSION(:) :: D, E, WORK
  REAL(8), DIMENSION(:,:) :: Z
  SUBROUTINE STEVD_64( JOBZ, [N], D, E, Z, [LDZ], [WORK], [LWORK], 
 *       [IWORK], [LIWORK], [INFO])
  CHARACTER(LEN=1) :: JOBZ
  INTEGER(8) :: N, LDZ, LWORK, LIWORK, INFO
  INTEGER(8), DIMENSION(:) :: IWORK
  REAL(8), DIMENSION(:) :: D, E, WORK
  REAL(8), DIMENSION(:,:) :: Z

C INTERFACE

#include <sunperf.h>

void dstevd(char jobz, int n, double *d, double *e, double *z, int ldz, int *info);

void dstevd_64(char jobz, long n, double *d, double *e, double *z, long ldz, long *info);


PURPOSE

dstevd computes all eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix. If eigenvectors are desired, it uses a divide and conquer algorithm.

The divide and conquer algorithm makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none.


ARGUMENTS