MODIFICATION OF EISPACK COMQR2 TO ADD JOB PARAMETER
JOB = 0 OUTPUT H = SCHUR TRIANGULAR FORM, Z NOT USED
= 1 OUTPUT H = SCHUR FORM, Z = UNITARY SIMILARITY
= 2 SAME AS COMQR2
= 3 OUTPUT H = HESSENBERG FORM, Z = UNITARY SIMILARITY
ALSO ELIMINATE MACHEP
C. MOLER, 11/22/78 AND 09/14/80
OVERFLOW CONTROL IN EIGENVECTOR BACKSUBSTITUTION, 3/16/82
THIS SUBROUTINE IS A TRANSLATION OF A UNITARY ANALOGUE OF THE
ALGOL PROCEDURE COMLR2, NUM. MATH. 16, 181-204(1970) BY PETERS
AND WILKINSON.
HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971).
THE UNITARY ANALOGUE SUBSTITUTES THE QR ALGORITHM OF FRANCIS
(COMP. JOUR. 4, 332-345(1962)) FOR THE LR ALGORITHM.
THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS
OF A COMPLEX UPPER HESSENBERG MATRIX BY THE QR
METHOD. THE EIGENVECTORS OF A COMPLEX GENERAL MATRIX
CAN ALSO BE FOUND IF CORTH HAS BEEN USED TO REDUCE
THIS GENERAL MATRIX TO HESSENBERG FORM.
ON INPUT.
NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
DIMENSION STATEMENT.
N IS THE ORDER OF THE MATRIX.
LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
SUBROUTINE ML_CBAL. IF CBAL HAS NOT BEEN USED,
SET LOW=1, IGH=N.
ORTR AND ORTI CONTAIN INFORMATION ABOUT THE UNITARY TRANS-
FORMATIONS USED IN THE REDUCTION BY CORTH, IF PERFORMED.
ONLY ELEMENTS LOW THROUGH IGH ARE USED. IF THE EIGENVECTORS
OF THE HESSENBERG MATRIX ARE DESIRED, SET ORTR(J) AND
ORTI(J) TO 0.0D0 FOR THESE ELEMENTS.
HR AND HI CONTAIN THE REAL AND IMAGINARY PARTS,
RESPECTIVELY, OF THE COMPLEX UPPER HESSENBERG MATRIX.
THEIR LOWER TRIANGLES BELOW THE SUBDIAGONAL CONTAIN FURTHER
INFORMATION ABOUT THE TRANSFORMATIONS WHICH WERE USED IN THE
REDUCTION BY CORTH, IF PERFORMED. IF THE EIGENVECTORS OF
THE HESSENBERG MATRIX ARE DESIRED, THESE ELEMENTS MAY BE
ARBITRARY.
ON OUTPUT.
ORTR, ORTI, AND THE UPPER HESSENBERG PORTIONS OF HR AND HI
HAVE BEEN DESTROYED.
WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
RESPECTIVELY, OF THE EIGENVALUES. IF AN ERROR
EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
FOR INDICES IERR+1,...,N.
ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
RESPECTIVELY, OF THE EIGENVECTORS. THE EIGENVECTORS
ARE UNNORMALIZED. IF AN ERROR EXIT IS MADE, NONE OF
THE EIGENVECTORS HAS BEEN FOUND.
IERR IS SET TO
ZERO FOR NORMAL RETURN,
J IF THE J-TH EIGENVALUE HAS NOT BEEN
DETERMINED AFTER A TOTAL OF 30*N ITERATIONS.
MODIFIED TO GET RID OF ALL COMPLEX ARITHMETIC, C. MOLER, 6/27/79.
QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO B. S. GARBOW,
APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY
------------------------------------------------------------------
.......... INITIALIZE EIGENVECTOR MATRIX ..........
.......... CREATE REAL SUBDIAGONAL ELEMENTS ..........
**** THE FOLLOWING SECTION CHANGED FOR OVERFLOW CONTROL C. MOLER, 3/16/82
.......... END BACKSUBSTITUTION ..........
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer | :: | nm | ||||
integer | :: | n | ||||
integer | :: | low | ||||
integer | :: | igh | ||||
double precision | :: | ortr(igh) | ||||
double precision | :: | orti(igh) | ||||
double precision | :: | hr(nm,n) | ||||
double precision | :: | hi(nm,n) | ||||
double precision | :: | wr(n) | ||||
double precision | :: | wi(n) | ||||
double precision | :: | zr(nm,n) | ||||
double precision | :: | zi(nm,n) | ||||
integer | :: | ierr | ||||
integer | :: | job |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | en | ||||
integer, | public | :: | enm1 | ||||
integer, | public | :: | i | ||||
integer, | public | :: | iend | ||||
integer, | public | :: | ii | ||||
integer, | public | :: | ip1 | ||||
integer, | public | :: | itn | ||||
integer, | public | :: | its | ||||
integer, | public | :: | j | ||||
integer, | public | :: | jj | ||||
integer, | public | :: | k | ||||
integer, | public | :: | l | ||||
integer, | public | :: | ll | ||||
integer, | public | :: | lp1 | ||||
integer, | public | :: | m | ||||
integer, | public | :: | nn | ||||
double precision, | public | :: | norm | ||||
double precision, | public | :: | si | ||||
integer, | public | :: | spag_nextblock_1 | ||||
double precision, | public | :: | sr | ||||
double precision, | public | :: | ti | ||||
double precision, | public | :: | tr | ||||
double precision, | public | :: | xi | ||||
double precision, | public | :: | xr | ||||
double precision, | public | :: | yi | ||||
double precision, | public | :: | yr | ||||
double precision, | public | :: | zzi | ||||
double precision, | public | :: | zzr |
subroutine ml_comqr3(nm, n, low, igh, ortr, orti, hr, hi, wr, wi, zr, zi, ierr, job) import int32, real64 integer(kind=int32) :: igh integer(kind=int32) :: n integer(kind=int32) :: nm integer(kind=int32) :: low real(kind=real64) :: ortr(igh) real(kind=real64) :: orti(igh) real(kind=real64) :: hr(nm, n) real(kind=real64) :: hi(nm, n) real(kind=real64) :: wr(n) real(kind=real64) :: wi(n) real(kind=real64) :: zr(nm, n) real(kind=real64) :: zi(nm, n) integer(kind=int32) :: ierr integer(kind=int32) :: job end subroutine ml_comqr3