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

  1.       subroutine figi2(nm,n,t,d,e,z,ierr)
  2. c
  3.       integer i,j,n,nm,ierr
  4.       double precision t(nm,3),d(n),e(n),z(nm,n)
  5.       double precision h
  6. c
  7. c     given a nonsymmetric tridiagonal matrix such that the products
  8. c     of corresponding pairs of off-diagonal elements are all
  9. c     non-negative, and zero only when both factors are zero, this
  10. c     subroutine reduces it to a symmetric tridiagonal matrix
  11. c     using and accumulating diagonal similarity transformations.
  12. c
  13. c     on input
  14. c
  15. c        nm must be set to the row dimension of two-dimensional
  16. c          array parameters as declared in the calling program
  17. c          dimension statement.
  18. c
  19. c        n is the order of the matrix.
  20. c
  21. c        t contains the input matrix.  its subdiagonal is
  22. c          stored in the last n-1 positions of the first column,
  23. c          its diagonal in the n positions of the second column,
  24. c          and its superdiagonal in the first n-1 positions of
  25. c          the third column.  t(1,1) and t(n,3) are arbitrary.
  26. c
  27. c     on output
  28. c
  29. c        t is unaltered.
  30. c
  31. c        d contains the diagonal elements of the symmetric matrix.
  32. c
  33. c        e contains the subdiagonal elements of the symmetric
  34. c          matrix in its last n-1 positions.  e(1) is not set.
  35. c
  36. c        z contains the transformation matrix produced in
  37. c          the reduction.
  38. c
  39. c        ierr is set to
  40. c          zero       for normal return,
  41. c          n+i        if t(i,1)*t(i-1,3) is negative,
  42. c          2*n+i      if t(i,1)*t(i-1,3) is zero with
  43. c                     one factor non-zero.
  44. c
  45. c     questions and comments should be directed to burton s. garbow,
  46. c     mathematics and computer science div, argonne national laboratory
  47. c
  48. c     this version dated august 1983.
  49. c
  50. c     ------------------------------------------------------------------
  51. c
  52.       ierr = 0
  53. c
  54.       do 100 i = 1, n
  55. c
  56.          do 50 j = 1, n
  57.    50    z(i,j) = 0.0d0
  58. c
  59.          if (i .eq. 1) go to 70
  60.          h = t(i,1) * t(i-1,3)
  61.          if (h) 900, 60, 80
  62.    60    if (t(i,1) .ne. 0.0d0 .or. t(i-1,3) .ne. 0.0d0) go to 1000
  63.          e(i) = 0.0d0
  64.    70    z(i,i) = 1.0d0
  65.          go to 90
  66.    80    e(i) = dsqrt(h)
  67.          z(i,i) = z(i-1,i-1) * e(i) / t(i-1,3)
  68.    90    d(i) = t(i,2)
  69.   100 continue
  70. c
  71.       go to 1001
  72. c     .......... set error -- product of some pair of off-diagonal
  73. c                elements is negative ..........
  74.   900 ierr = n + i
  75.       go to 1001
  76. c     .......... set error -- product of some pair of off-diagonal
  77. c                elements is zero with one member non-zero ..........
  78.  1000 ierr = 2 * n + i
  79.  1001 return
  80.       end
  81.