Télécharger newton.eso

Retour à la liste

Numérotation des lignes :

newton
  1. C NEWTON SOURCE CHAT 06/06/01 21:18:06 5450
  2. SUBROUTINE NEWTON(XX,YY,DXX,EPSS,NMAX,M,NFIN,nit,niter,x1,y1,
  3. $ x2,y2)
  4. C---------------------------------------------------------------------
  5. C Gestion simultanée de plusieurs Newton imbriqués, la jacobienne
  6. C étant calculée numériquement.
  7. C---------------------------------------------------------------------
  8. C
  9. C---------------------------
  10. C Parametres Entree/Sortie :
  11. C---------------------------
  12. C
  13. C E/S XX : Contient X(I) en entrée et X(I+1) en sortie
  14. C E/ YY : Contient F(X(I))
  15. C E/ DXX : Incrément initial
  16. C E/ EPSS : Test de convergence pour Newton
  17. C E/ NMAX : Nombre d'itérations maximum
  18. C E/ M : Rang des variables à considérer
  19. C /S NFIN : Flag de succès 0=continuer 1=convergence
  20. C 2=non convergence 3=fonction non nulle
  21. C
  22. C---------------------
  23. C Variables internes :
  24. C---------------------
  25. C Pour chaque rang M
  26. C NIT(M) : nombre d'itérations déjà réalisée
  27. C NITER(M) : indicateur de premier passage 1=premier 2=suivant
  28. C X1(M) : valeur de la variable à l'itération précédante
  29. C X2(M) : ibid à l'itération courante
  30. C Y1(M) : valeur de la fonction à l'itération précédante
  31. C Y2(M) : ibid à l'itération courante
  32. C Lorsque le newton du rang M a convergé, on réinitialise NIT(M) à 0
  33. C et NITER(M) à 1 afin de pouvoir réaliser des newtons emboités.
  34. C
  35. C----------------------------------------------------------------------
  36. C Utilisation : Au premier appel, donner X(0), F(X(0)), un incrément et
  37. C le rang à initialiser. Aux appels suivant, fournir X(I), F(X(I)) et
  38. C le rang à considérer. La subroutine renvoie X(I+1) et un indicateur
  39. C de convergence.
  40. C----------------------------------------------------------------------
  41. C
  42. C Langage : FORTRAN
  43. C
  44. C Auteurs : F.DABBENE et E.STUDER 02/99
  45. C
  46. C---------------------------------------------------------------------
  47. IMPLICIT INTEGER(I-N)
  48. IMPLICIT REAL*8 (A-H,O-Z)
  49. DIMENSION X1(*),Y1(*),X2(*),Y2(*)
  50. DIMENSION NIT(*),NITER(*)
  51. * SAVE
  52. * DATA NIT/9*0/
  53. * DATA NITER/9*1/
  54. C
  55. C- Initialisation
  56. C
  57. GOTO (10,20) NITER(M)
  58. 10 CONTINUE
  59. C-> Premier passage
  60. X1(M) = XX
  61. Y1(M) = YY
  62. XX = XX + DXX
  63. NITER(M) = 2
  64. NFIN = 0
  65. RETURN
  66. 20 CONTINUE
  67. C-> Passages suivants
  68. X2(M) = XX
  69. Y2(M) = YY
  70. NIT(M) = NIT(M) + 1
  71. DY21 = YY - Y1(M)
  72. AYY = ABS(YY)
  73. C
  74. C- Test de convergence et gestion ad-hoc
  75. C
  76. EPS2 = 10.D0 * EPSS
  77. IF ((AYY.LE.EPSS).OR.(DY21.EQ.0.D0.AND.AYY.LE.EPS2)) THEN
  78. C-> OK
  79. NFIN = 1
  80. NITER(M) = 1
  81. NIT(M) = 0
  82. ELSE
  83. IF (NIT(M).GT.NMAX) THEN
  84. C-> Iteration max atteint
  85. NFIN = 2
  86. NITER(M) = 1
  87. NIT(M) = 0
  88. ELSE
  89. IF (DY21.EQ.0.D0.AND.AYY.GT.EPS2) THEN
  90. C-> Convergence problématique : on converge mais f(x)>EPS2>0
  91. NFIN = 3
  92. NITER(M) = 1
  93. NIT(M) = 0
  94. ELSE
  95. C-> Calcul du nouvel itéré et mise à jour pour le pas suivant
  96. XX = XX - Y2(M)*(XX-X1(M))/(Y2(M)-Y1(M))
  97. X1(M) = X2(M)
  98. Y1(M) = Y2(M)
  99. NFIN = 0
  100. ENDIF
  101. ENDIF
  102. ENDIF
  103. C
  104. RETURN
  105. END
  106.  
  107.  
  108.  
  109.  
  110.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales