dsbtrd - reduce a real symmetric band matrix A to symmetric tridiagonal form T by an orthogonal similarity transformation
SUBROUTINE DSBTRD( VECT, UPLO, N, KD, AB, LDAB, D, E, Q, LDQ, WORK, * INFO) CHARACTER * 1 VECT, UPLO INTEGER N, KD, LDAB, LDQ, INFO DOUBLE PRECISION AB(LDAB,*), D(*), E(*), Q(LDQ,*), WORK(*)
SUBROUTINE DSBTRD_64( VECT, UPLO, N, KD, AB, LDAB, D, E, Q, LDQ, * WORK, INFO) CHARACTER * 1 VECT, UPLO INTEGER*8 N, KD, LDAB, LDQ, INFO DOUBLE PRECISION AB(LDAB,*), D(*), E(*), Q(LDQ,*), WORK(*)
SUBROUTINE SBTRD( VECT, UPLO, [N], KD, AB, [LDAB], D, E, Q, [LDQ], * [WORK], [INFO]) CHARACTER(LEN=1) :: VECT, UPLO INTEGER :: N, KD, LDAB, LDQ, INFO REAL(8), DIMENSION(:) :: D, E, WORK REAL(8), DIMENSION(:,:) :: AB, Q
SUBROUTINE SBTRD_64( VECT, UPLO, [N], KD, AB, [LDAB], D, E, Q, [LDQ], * [WORK], [INFO]) CHARACTER(LEN=1) :: VECT, UPLO INTEGER(8) :: N, KD, LDAB, LDQ, INFO REAL(8), DIMENSION(:) :: D, E, WORK REAL(8), DIMENSION(:,:) :: AB, Q
#include <sunperf.h>
void dsbtrd(char vect, char uplo, int n, int kd, double *ab, int ldab, double *d, double *e, double *q, int ldq, int *info);
void dsbtrd_64(char vect, char uplo, long n, long kd, double *ab, long ldab, double *d, double *e, double *q, long ldq, long *info);
dsbtrd reduces a real symmetric band matrix A to symmetric tridiagonal form T by an orthogonal similarity transformation: Q**T * A * Q = T.
= 'N': do not form Q;
= 'V': form Q;
= 'U': update a matrix X, by forming X*Q.
= 'U': Upper triangle of A is stored;
= 'L': Lower triangle of A is stored.
AB(kd+1+i-j,j)
= A(i,j)
for max(1,j-kd)
< =i < =j;
if UPLO = 'L', AB(1+i-j,j)
= A(i,j)
for j < =i < =min(n,j+kd).
On exit, the diagonal elements of AB are overwritten by the
diagonal elements of the tridiagonal matrix T; if KD > 0, the
elements on the first superdiagonal (if UPLO = 'U') or the
first subdiagonal (if UPLO = 'L') are overwritten by the
off-diagonal elements of T; the rest of AB is overwritten by
values generated during the reduction.
E(i)
= T(i,i+1)
if UPLO = 'U'; E(i)
= T(i+1,i)
if UPLO = 'L'.
On exit: if VECT = 'V', Q contains the N-by-N orthogonal matrix Q; if VECT = 'U', Q contains the product X*Q; if VECT = 'N', the array Q is not referenced.
dimension(N)
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
Modified by Linda Kaufman, Bell Labs.