dogleg.f 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. *DECK DOGLEG
  2. SUBROUTINE DOGLEG (N, R, LR, DIAG, QTB, DELTA, X, WA1, WA2)
  3. C***BEGIN PROLOGUE DOGLEG
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to SNSQ and SNSQE
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (DOGLEG-S, DDOGLG-D)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C Given an M by N matrix A, an N by N nonsingular DIAGONAL
  12. C matrix D, an M-vector B, and a positive number DELTA, the
  13. C problem is to determine the convex combination X of the
  14. C Gauss-Newton and scaled gradient directions that minimizes
  15. C (A*X - B) in the least squares sense, subject to the
  16. C restriction that the Euclidean norm of D*X be at most DELTA.
  17. C
  18. C This subroutine completes the solution of the problem
  19. C if it is provided with the necessary information from the
  20. C QR factorization of A. That is, if A = Q*R, where Q has
  21. C orthogonal columns and R is an upper triangular matrix,
  22. C then DOGLEG expects the full upper triangle of R and
  23. C the first N components of (Q TRANSPOSE)*B.
  24. C
  25. C The subroutine statement is
  26. C
  27. C SUBROUTINE DOGLEG(N,R,LR,DIAG,QTB,DELTA,X,WA1,WA2)
  28. C
  29. C where
  30. C
  31. C N is a positive integer input variable set to the order of R.
  32. C
  33. C R is an input array of length LR which must contain the upper
  34. C triangular matrix R stored by rows.
  35. C
  36. C LR is a positive integer input variable not less than
  37. C (N*(N+1))/2.
  38. C
  39. C DIAG is an input array of length N which must contain the
  40. C diagonal elements of the matrix D.
  41. C
  42. C QTB is an input array of length N which must contain the first
  43. C N elements of the vector (Q TRANSPOSE)*B.
  44. C
  45. C DELTA is a positive input variable which specifies an upper
  46. C bound on the Euclidean norm of D*X.
  47. C
  48. C X is an output array of length N which contains the desired
  49. C convex combination of the Gauss-Newton direction and the
  50. C scaled gradient direction.
  51. C
  52. C WA1 and WA2 are work arrays of length N.
  53. C
  54. C***SEE ALSO SNSQ, SNSQE
  55. C***ROUTINES CALLED ENORM, R1MACH
  56. C***REVISION HISTORY (YYMMDD)
  57. C 800301 DATE WRITTEN
  58. C 890531 Changed all specific intrinsics to generic. (WRB)
  59. C 890831 Modified array declarations. (WRB)
  60. C 891214 Prologue converted to Version 4.0 format. (BAB)
  61. C 900326 Removed duplicate information from DESCRIPTION section.
  62. C (WRB)
  63. C 900328 Added TYPE section. (WRB)
  64. C***END PROLOGUE DOGLEG
  65. INTEGER N,LR
  66. REAL DELTA
  67. REAL R(LR),DIAG(*),QTB(*),X(*),WA1(*),WA2(*)
  68. INTEGER I,J,JJ,JP1,K,L
  69. REAL ALPHA,BNORM,EPSMCH,GNORM,ONE,QNORM,SGNORM,SUM,TEMP,ZERO
  70. REAL R1MACH,ENORM
  71. SAVE ONE, ZERO
  72. DATA ONE,ZERO /1.0E0,0.0E0/
  73. C***FIRST EXECUTABLE STATEMENT DOGLEG
  74. EPSMCH = R1MACH(4)
  75. C
  76. C FIRST, CALCULATE THE GAUSS-NEWTON DIRECTION.
  77. C
  78. JJ = (N*(N + 1))/2 + 1
  79. DO 50 K = 1, N
  80. J = N - K + 1
  81. JP1 = J + 1
  82. JJ = JJ - K
  83. L = JJ + 1
  84. SUM = ZERO
  85. IF (N .LT. JP1) GO TO 20
  86. DO 10 I = JP1, N
  87. SUM = SUM + R(L)*X(I)
  88. L = L + 1
  89. 10 CONTINUE
  90. 20 CONTINUE
  91. TEMP = R(JJ)
  92. IF (TEMP .NE. ZERO) GO TO 40
  93. L = J
  94. DO 30 I = 1, J
  95. TEMP = MAX(TEMP,ABS(R(L)))
  96. L = L + N - I
  97. 30 CONTINUE
  98. TEMP = EPSMCH*TEMP
  99. IF (TEMP .EQ. ZERO) TEMP = EPSMCH
  100. 40 CONTINUE
  101. X(J) = (QTB(J) - SUM)/TEMP
  102. 50 CONTINUE
  103. C
  104. C TEST WHETHER THE GAUSS-NEWTON DIRECTION IS ACCEPTABLE.
  105. C
  106. DO 60 J = 1, N
  107. WA1(J) = ZERO
  108. WA2(J) = DIAG(J)*X(J)
  109. 60 CONTINUE
  110. QNORM = ENORM(N,WA2)
  111. IF (QNORM .LE. DELTA) GO TO 140
  112. C
  113. C THE GAUSS-NEWTON DIRECTION IS NOT ACCEPTABLE.
  114. C NEXT, CALCULATE THE SCALED GRADIENT DIRECTION.
  115. C
  116. L = 1
  117. DO 80 J = 1, N
  118. TEMP = QTB(J)
  119. DO 70 I = J, N
  120. WA1(I) = WA1(I) + R(L)*TEMP
  121. L = L + 1
  122. 70 CONTINUE
  123. WA1(J) = WA1(J)/DIAG(J)
  124. 80 CONTINUE
  125. C
  126. C CALCULATE THE NORM OF THE SCALED GRADIENT DIRECTION,
  127. C NORMALIZE, AND RESCALE THE GRADIENT.
  128. C
  129. GNORM = ENORM(N,WA1)
  130. SGNORM = ZERO
  131. ALPHA = DELTA/QNORM
  132. IF (GNORM .EQ. ZERO) GO TO 120
  133. DO 90 J = 1, N
  134. WA1(J) = (WA1(J)/GNORM)/DIAG(J)
  135. 90 CONTINUE
  136. C
  137. C CALCULATE THE POINT ALONG THE SCALED GRADIENT
  138. C AT WHICH THE QUADRATIC IS MINIMIZED.
  139. C
  140. L = 1
  141. DO 110 J = 1, N
  142. SUM = ZERO
  143. DO 100 I = J, N
  144. SUM = SUM + R(L)*WA1(I)
  145. L = L + 1
  146. 100 CONTINUE
  147. WA2(J) = SUM
  148. 110 CONTINUE
  149. TEMP = ENORM(N,WA2)
  150. SGNORM = (GNORM/TEMP)/TEMP
  151. C
  152. C TEST WHETHER THE SCALED GRADIENT DIRECTION IS ACCEPTABLE.
  153. C
  154. ALPHA = ZERO
  155. IF (SGNORM .GE. DELTA) GO TO 120
  156. C
  157. C THE SCALED GRADIENT DIRECTION IS NOT ACCEPTABLE.
  158. C FINALLY, CALCULATE THE POINT ALONG THE DOGLEG
  159. C AT WHICH THE QUADRATIC IS MINIMIZED.
  160. C
  161. BNORM = ENORM(N,QTB)
  162. TEMP = (BNORM/GNORM)*(BNORM/QNORM)*(SGNORM/DELTA)
  163. TEMP = TEMP - (DELTA/QNORM)*(SGNORM/DELTA)**2
  164. 1 + SQRT((TEMP-(DELTA/QNORM))**2
  165. 2 +(ONE-(DELTA/QNORM)**2)*(ONE-(SGNORM/DELTA)**2))
  166. ALPHA = ((DELTA/QNORM)*(ONE - (SGNORM/DELTA)**2))/TEMP
  167. 120 CONTINUE
  168. C
  169. C FORM APPROPRIATE CONVEX COMBINATION OF THE GAUSS-NEWTON
  170. C DIRECTION AND THE SCALED GRADIENT DIRECTION.
  171. C
  172. TEMP = (ONE - ALPHA)*MIN(SGNORM,DELTA)
  173. DO 130 J = 1, N
  174. X(J) = TEMP*WA1(J) + ALPHA*X(J)
  175. 130 CONTINUE
  176. 140 CONTINUE
  177. RETURN
  178. C
  179. C LAST CARD OF SUBROUTINE DOGLEG.
  180. C
  181. END