qform.f 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. *DECK QFORM
  2. SUBROUTINE QFORM (M, N, Q, LDQ, WA)
  3. C***BEGIN PROLOGUE QFORM
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to SNSQ and SNSQE
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (QFORM-S, DQFORM-D)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C This subroutine proceeds from the computed QR factorization of
  12. C an M by N matrix A to accumulate the M by M orthogonal matrix
  13. C Q from its factored form.
  14. C
  15. C The subroutine statement is
  16. C
  17. C SUBROUTINE QFORM(M,N,Q,LDQ,WA)
  18. C
  19. C where
  20. C
  21. C M is a positive integer input variable set to the number
  22. C of rows of A and the order of Q.
  23. C
  24. C N is a positive integer input variable set to the number
  25. C of columns of A.
  26. C
  27. C Q is an M by M array. On input the full lower trapezoid in
  28. C the first min(M,N) columns of Q contains the factored form.
  29. C On output Q has been accumulated into a square matrix.
  30. C
  31. C LDQ is a positive integer input variable not less than M
  32. C which specifies the leading dimension of the array Q.
  33. C
  34. C WA is a work array of length M.
  35. C
  36. C***SEE ALSO SNSQ, SNSQE
  37. C***ROUTINES CALLED (NONE)
  38. C***REVISION HISTORY (YYMMDD)
  39. C 800301 DATE WRITTEN
  40. C 890531 Changed all specific intrinsics to generic. (WRB)
  41. C 890831 Modified array declarations. (WRB)
  42. C 891214 Prologue converted to Version 4.0 format. (BAB)
  43. C 900326 Removed duplicate information from DESCRIPTION section.
  44. C (WRB)
  45. C 900328 Added TYPE section. (WRB)
  46. C***END PROLOGUE QFORM
  47. INTEGER M,N,LDQ
  48. REAL Q(LDQ,*),WA(*)
  49. INTEGER I,J,JM1,K,L,MINMN,NP1
  50. REAL ONE,SUM,TEMP,ZERO
  51. SAVE ONE, ZERO
  52. DATA ONE,ZERO /1.0E0,0.0E0/
  53. C***FIRST EXECUTABLE STATEMENT QFORM
  54. MINMN = MIN(M,N)
  55. IF (MINMN .LT. 2) GO TO 30
  56. DO 20 J = 2, MINMN
  57. JM1 = J - 1
  58. DO 10 I = 1, JM1
  59. Q(I,J) = ZERO
  60. 10 CONTINUE
  61. 20 CONTINUE
  62. 30 CONTINUE
  63. C
  64. C INITIALIZE REMAINING COLUMNS TO THOSE OF THE IDENTITY MATRIX.
  65. C
  66. NP1 = N + 1
  67. IF (M .LT. NP1) GO TO 60
  68. DO 50 J = NP1, M
  69. DO 40 I = 1, M
  70. Q(I,J) = ZERO
  71. 40 CONTINUE
  72. Q(J,J) = ONE
  73. 50 CONTINUE
  74. 60 CONTINUE
  75. C
  76. C ACCUMULATE Q FROM ITS FACTORED FORM.
  77. C
  78. DO 120 L = 1, MINMN
  79. K = MINMN - L + 1
  80. DO 70 I = K, M
  81. WA(I) = Q(I,K)
  82. Q(I,K) = ZERO
  83. 70 CONTINUE
  84. Q(K,K) = ONE
  85. IF (WA(K) .EQ. ZERO) GO TO 110
  86. DO 100 J = K, M
  87. SUM = ZERO
  88. DO 80 I = K, M
  89. SUM = SUM + Q(I,J)*WA(I)
  90. 80 CONTINUE
  91. TEMP = SUM/WA(K)
  92. DO 90 I = K, M
  93. Q(I,J) = Q(I,J) - TEMP*WA(I)
  94. 90 CONTINUE
  95. 100 CONTINUE
  96. 110 CONTINUE
  97. 120 CONTINUE
  98. RETURN
  99. C
  100. C LAST CARD OF SUBROUTINE QFORM.
  101. C
  102. END