rs.f
59 lines
| 1.9 KiB
| text/x-fortran
|
FortranFixedLexer
r1601 | subroutine rs(nm,n,a,w,matz,z,fv1,fv2,ierr) | |||
c | ||||
integer n,nm,ierr,matz | ||||
double precision a(nm,n),w(n),z(nm,n),fv1(n),fv2(n) | ||||
c | ||||
c this subroutine calls the recommended sequence of | ||||
c subroutines from the eigensystem subroutine package (eispack) | ||||
c to find the eigenvalues and eigenvectors (if desired) | ||||
c of a real symmetric matrix. | ||||
c | ||||
c on input | ||||
c | ||||
c nm must be set to the row dimension of the two-dimensional | ||||
c array parameters as declared in the calling program | ||||
c dimension statement. | ||||
c | ||||
c n is the order of the matrix a. | ||||
c | ||||
c a contains the real symmetric matrix. | ||||
c | ||||
c matz is an integer variable set equal to zero if | ||||
c only eigenvalues are desired. otherwise it is set to | ||||
c any non-zero integer for both eigenvalues and eigenvectors. | ||||
c | ||||
c on output | ||||
c | ||||
c w contains the eigenvalues in ascending order. | ||||
c | ||||
c z contains the eigenvectors if matz is not zero. | ||||
c | ||||
c ierr is an integer output variable set equal to an error | ||||
c completion code described in the documentation for tqlrat | ||||
c and tql2. the normal completion code is zero. | ||||
c | ||||
c fv1 and fv2 are temporary storage arrays. | ||||
c | ||||
c questions and comments should be directed to burton s. garbow, | ||||
c mathematics and computer science div, argonne national laboratory | ||||
c | ||||
c this version dated august 1983. | ||||
c | ||||
c ------------------------------------------------------------------ | ||||
c | ||||
if (n .le. nm) go to 10 | ||||
ierr = 10 * n | ||||
go to 50 | ||||
c | ||||
10 if (matz .ne. 0) go to 20 | ||||
c .......... find eigenvalues only .......... | ||||
call tred1(nm,n,a,w,fv1,fv2) | ||||
* tqlrat encounters catastrophic underflow on the Vax | ||||
* call tqlrat(n,w,fv2,ierr) | ||||
call tql1(n,w,fv1,ierr) | ||||
go to 50 | ||||
c .......... find both eigenvalues and eigenvectors .......... | ||||
20 call tred2(nm,n,a,w,fv1,z) | ||||
call tql2(nm,n,w,fv1,z,ierr) | ||||
50 return | ||||
end | ||||