home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / eispack-1.0-src.tgz / tar.out / contrib / eispack / bakvec.f next >
Text File  |  1996-09-28  |  2KB  |  80 lines

  1.       subroutine bakvec(nm,n,t,e,m,z,ierr)
  2. c
  3.       integer i,j,m,n,nm,ierr
  4.       double precision t(nm,3),e(n),z(nm,m)
  5. c
  6. c     this subroutine forms the eigenvectors of a nonsymmetric
  7. c     tridiagonal matrix by back transforming those of the
  8. c     corresponding symmetric matrix determined by  figi.
  9. c
  10. c     on input
  11. c
  12. c        nm must be set to the row dimension of two-dimensional
  13. c          array parameters as declared in the calling program
  14. c          dimension statement.
  15. c
  16. c        n is the order of the matrix.
  17. c
  18. c        t contains the nonsymmetric matrix.  its subdiagonal is
  19. c          stored in the last n-1 positions of the first column,
  20. c          its diagonal in the n positions of the second column,
  21. c          and its superdiagonal in the first n-1 positions of
  22. c          the third column.  t(1,1) and t(n,3) are arbitrary.
  23. c
  24. c        e contains the subdiagonal elements of the symmetric
  25. c          matrix in its last n-1 positions.  e(1) is arbitrary.
  26. c
  27. c        m is the number of eigenvectors to be back transformed.
  28. c
  29. c        z contains the eigenvectors to be back transformed
  30. c          in its first m columns.
  31. c
  32. c     on output
  33. c
  34. c        t is unaltered.
  35. c
  36. c        e is destroyed.
  37. c
  38. c        z contains the transformed eigenvectors
  39. c          in its first m columns.
  40. c
  41. c        ierr is set to
  42. c          zero       for normal return,
  43. c          2*n+i      if e(i) is zero with t(i,1) or t(i-1,3) non-zero.
  44. c                     in this case, the symmetric matrix is not similar
  45. c                     to the original matrix, and the eigenvectors
  46. c                     cannot be found by this program.
  47. c
  48. c     questions and comments should be directed to burton s. garbow,
  49. c     mathematics and computer science div, argonne national laboratory
  50. c
  51. c     this version dated august 1983.
  52. c
  53. c     ------------------------------------------------------------------
  54. c
  55.       ierr = 0
  56.       if (m .eq. 0) go to 1001
  57.       e(1) = 1.0d0
  58.       if (n .eq. 1) go to 1001
  59. c
  60.       do 100 i = 2, n
  61.          if (e(i) .ne. 0.0d0) go to 80
  62.          if (t(i,1) .ne. 0.0d0 .or. t(i-1,3) .ne. 0.0d0) go to 1000
  63.          e(i) = 1.0d0
  64.          go to 100
  65.    80    e(i) = e(i-1) * e(i) / t(i-1,3)
  66.   100 continue
  67. c
  68.       do 120 j = 1, m
  69. c
  70.          do 120 i = 2, n
  71.          z(i,j) = z(i,j) * e(i)
  72.   120 continue
  73. c
  74.       go to 1001
  75. c     .......... set error -- eigenvectors cannot be
  76. c                found by this program ..........
  77.  1000 ierr = 2 * n + i
  78.  1001 return
  79.       end
  80.