home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_progs / libs / matlab.lzh / MATLAB / MATLAB.LZH / Source / MatLab / HTRIBK.FOR < prev    next >
Encoding:
Text File  |  1991-04-13  |  2.6 KB  |  85 lines

  1.       SUBROUTINE HTRIBK (NM, N, AR, AI, TAU, M, ZR, ZI)
  2.       IMPLICIT NONE
  3. C
  4. C A TRANSLATION OF A COMPLEX ANALOGUE OF THE ALGOL PROCEDURE TRBAK1,
  5. C   NUM. MATH. 11, 181-195 (1968) BY MARTIN, REINSCH, AND WILKINSON.
  6. C   HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226 (1971).
  7. C
  8. C FORMS THE EIGENVECTORS OF A COMPLEX HERMITIAN MATRIX BY BACK TRANSFORMING
  9. C   THOSE OF THE CORRESPONDING REAL SYMMETRIC TRIDIAGONAL MATRIX DETERMINED
  10. C   BY HTRIDI.
  11. C
  12. C ON INPUT:
  13. C   NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL ARRAY PARAMETERS
  14. C      AS DECLARED IN THE CALLING PROGRAM DIMENSION STATEMENT.
  15. C
  16. C   N IS THE ORDER OF THE MATRIX.
  17. C
  18. C   AR & AI CONTAIN INFORMATION ABOUT THE UNITARY TRANSFORMATIONS USED IN
  19. C      THE REDUCTION BY HTRIDI IN THEIR FULL LOWER TRIANGLES EXCEPT FOR THE
  20. C      DIAGONAL OF AR.
  21. C
  22. C   TAU CONTAINS FURTHER INFORMATION ABOUT THE TRANSFORMATIONS.
  23. C
  24. C   M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
  25. C
  26. C   ZR CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED IN ITS FIRST M COLUMNS.
  27. C
  28. C ON OUTPUT:
  29. C   ZR & ZI CONTAIN THE REAL AND IMAGINARY PARTS, RESPECTIVELY, OF THE
  30. C      TRANSFORMED EIGENVECTORS IN THEIR FIRST M COLUMNS.
  31. C
  32. C   NOTE THAT THE LAST COMPONENT OF EACH RETURNED VECTOR
  33. C      IS REAL AND THAT VECTOR EUCLIDEAN NORMS ARE PRESERVED.
  34. C
  35. C QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO B. S. GARBOW,
  36. C   APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY
  37. C
  38.       INTEGER NM, N, M
  39.       DOUBLE PRECISION AR(NM,N), AI(NM,N), TAU(2,N), ZR(NM,M), ZI(NM,M)
  40. C
  41.       INTEGER I, J, K, L
  42.       DOUBLE PRECISION H, S, SI
  43. C
  44.       DOUBLE PRECISION FLOP
  45. C
  46. C
  47.       IF (M.EQ.0) GO TO 200
  48. C
  49. C ***      TRANSFORM THE EIGENVECTORS OF THE REAL SYMMETRIC TRIDIAGONAL
  50. C           MATRIX TO THOSE OF THE HERMITIAN TRIDIAGONAL MATRIX
  51.       DO 51 K = 1, N
  52.         DO 50 J = 1, M
  53.           ZI(K,J) = FLOP (-ZR(K,J)*TAU(2,K))
  54.           ZR(K,J) = FLOP (ZR(K,J)*TAU(1,K))
  55. 50      CONTINUE
  56. 51    CONTINUE
  57.       IF (N.EQ.1) GO TO 200
  58. C
  59. C ***      RECOVER AND APPLY THE HOUSEHOLDER MATRICES
  60.       DO 140 I = 2, N
  61.         L = I-1
  62.         H = AI(I,I)
  63.         IF (H.EQ.0.0D0) GO TO 140
  64.         DO 130 J = 1, M
  65.           S = 0.0D0
  66.           SI = 0.0D0
  67.           DO 110 K = 1, L
  68.             S = FLOP (S+AR(I,K)*ZR(K,J)-AI(I,K)*ZI(K,J))
  69.             SI = FLOP (SI+AR(I,K)*ZI(K,J)+AI(I,K)*ZR(K,J))
  70. 110       CONTINUE
  71. C
  72. C ***      DOUBLE DIVISIONS AVOID POSSIBLE UNDERFLOW
  73.           S = FLOP ((S/H)/H)
  74.           SI = FLOP ((SI/H)/H)
  75.           DO 120 K = 1, L
  76.             ZR(K,J) = FLOP (ZR(K,J)-S*AR(I,K)-SI*AI(I,K))
  77.             ZI(K,J) = FLOP (ZI(K,J)-SI*AR(I,K)+S*AI(I,K))
  78. 120       CONTINUE
  79. 130     CONTINUE
  80. 140   CONTINUE
  81. C
  82. 200   CONTINUE
  83.       RETURN
  84.       END
  85.