NAME

sggbal - balance a pair of general real matrices (A,B)


SYNOPSIS

  SUBROUTINE SGGBAL( JOB, N, A, LDA, B, LDB, ILO, IHI, LSCALE, RSCALE, 
 *      WORK, INFO)
  CHARACTER * 1 JOB
  INTEGER N, LDA, LDB, ILO, IHI, INFO
  REAL A(LDA,*), B(LDB,*), LSCALE(*), RSCALE(*), WORK(*)
  SUBROUTINE SGGBAL_64( JOB, N, A, LDA, B, LDB, ILO, IHI, LSCALE, 
 *      RSCALE, WORK, INFO)
  CHARACTER * 1 JOB
  INTEGER*8 N, LDA, LDB, ILO, IHI, INFO
  REAL A(LDA,*), B(LDB,*), LSCALE(*), RSCALE(*), WORK(*)

F95 INTERFACE

  SUBROUTINE GGBAL( JOB, [N], A, [LDA], B, [LDB], ILO, IHI, LSCALE, 
 *       RSCALE, [WORK], [INFO])
  CHARACTER(LEN=1) :: JOB
  INTEGER :: N, LDA, LDB, ILO, IHI, INFO
  REAL, DIMENSION(:) :: LSCALE, RSCALE, WORK
  REAL, DIMENSION(:,:) :: A, B
  SUBROUTINE GGBAL_64( JOB, [N], A, [LDA], B, [LDB], ILO, IHI, LSCALE, 
 *       RSCALE, [WORK], [INFO])
  CHARACTER(LEN=1) :: JOB
  INTEGER(8) :: N, LDA, LDB, ILO, IHI, INFO
  REAL, DIMENSION(:) :: LSCALE, RSCALE, WORK
  REAL, DIMENSION(:,:) :: A, B

C INTERFACE

#include <sunperf.h>

void sggbal(char job, int n, float *a, int lda, float *b, int ldb, int *ilo, int *ihi, float *lscale, float *rscale, int *info);

void sggbal_64(char job, long n, float *a, long lda, float *b, long ldb, long *ilo, long *ihi, float *lscale, float *rscale, long *info);


PURPOSE

sggbal balances a pair of general real matrices (A,B). This involves, first, permuting A and B by similarity transformations to isolate eigenvalues in the first 1 to ILO$-$1 and last IHI+1 to N elements on the diagonal; and second, applying a diagonal similarity transformation to rows and columns ILO to IHI to make the rows and columns as close in norm as possible. Both steps are optional.

Balancing may reduce the 1-norm of the matrices, and improve the accuracy of the computed eigenvalues and/or eigenvectors in the generalized eigenvalue problem A*x = lambda*B*x.


ARGUMENTS


FURTHER DETAILS

See R.C. WARD, Balancing the generalized eigenvalue problem, SIAM J. Sci. Stat. Comp. 2 (1981), 141-152.