Télécharger mma_07.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : mma_07.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4.  
  5. ************************************************************************
  6. * Test de la procedure MOCA_MMA et de l'operateur MMA *
  7. * Application au fit d'une fonction afin de *
  8. * passer au mieux par une serie de points *
  9. * *
  10. * On cherche a optimiser les parametres p=(p1,p2,p3,p4,p5) de la *
  11. * fonction h (fonction a 2 pentes p2 et p3) : *
  12. * p2 + p3 p2 - p3 *
  13. * h(x,p) = ------- (x-p1) + ------- sqrt((x-p1)^2 + p4^2) + p5 *
  14. * 2 2 *
  15. * passant au mieux par une serie de P points (Xi ; Hi) connus *
  16. * *
  17. * Sous contraintes que : *
  18. * - cas 1 : -50 < p1 < 50 -50 < p2 < 50 *
  19. * -50 < p3 < 50 -50 < p4 < 50 *
  20. * -50 < p5 < 50 *
  21. *
  22. * - cas 2 : 7 < p1 < 50 -50 < p2 < 50 *
  23. * 0 < p3 < 50 0 < p4 < 1 *
  24. * -50 < p5 < 50 p2 > p3 + 5 *
  25. * la 1ere pente (p2) doit etre superieure *
  26. * a la 2nde pente (p3) *
  27. ************************************************************************
  28.  
  29. * Options
  30. OPTI 'ECHO' 0 ;
  31. itrac = FAUX ;
  32.  
  33. * Procedure pour calculer la fonction h(x,p) ainsi que les
  34. * derivees partielles de h selon chaque composante de p (en option)
  35. DEBP H x*'LISTREEL' p*'LISTREEL' mot1/'MOT' ;
  36. ideri = VRAI ;
  37. p1 = EXTR p 1 ;
  38. p2 = EXTR p 2 ;
  39. p3 = EXTR p 3 ;
  40. p4 = EXTR p 4 ;
  41. p5 = EXTR p 5 ;
  42. h0 = ((p2 + p3) * (x - p1) / 2.)
  43. + ((p3 - p2) * ((((x - p1) ** 2) + (p4 ** 2)) ** 0.5) / 2.)
  44. + p5 ;
  45. SI (EGA (TYPE mot1) 'MOT') ;
  46. SI (EGA mot1 'VISU') ;
  47. ideri = FAUX ;
  48. FINSI ;
  49. FINSI ;
  50. SI ideri ;
  51. dval = ENUM ;
  52. REPE b1 (DIME x) ;
  53. x1 = EXTR x &b1 ;
  54. dhdp = PROG (-0.5 * (p2 + p3 + ((p3 - p2) * ((x1 - p1) / ((((x1 - p1) ** 2) + (p4 ** 2)) ** 0.5)))))
  55. (0.5 * ((x1 - p1) - ((((x1 - p1) ** 2) + (p4 ** 2)) ** 0.5)))
  56. (0.5 * ((x1 - p1) + ((((x1 - p1) ** 2) + (p4 ** 2)) ** 0.5)))
  57. (0.5 * (p3 - p2) * p4 / ((((x1 - p1) ** 2) + (p4 ** 2)) ** 0.5))
  58. 1. ;
  59. dval = dval ET dhdp ;
  60. FIN b1 ;
  61. RESP h0 dval ;
  62. SINON ;
  63. RESP h0 ;
  64. FINSI ;
  65. FINP ;
  66.  
  67. * Choix des points connus (Xi,Hi)
  68. * ici on prend des points definits exactement par la fonction h
  69. * avec comme parametres pref
  70. pref = PROG 8. 1. 6. 1. 14. ;
  71. xmes = PROG 2. 'PAS' 2. 20. ;
  72. hmes = H xmes pref 'VISU' ;
  73.  
  74.  
  75. **************** Cas n°1 : optimisation sans contrainte ****************
  76.  
  77. SAUT 2 'LIGNE' ;
  78. MESS '***** OPTIMISATION SANS CONTRAINTE *****' ;
  79. * Valeurs initiales p0
  80. p0 = PROG 0.1 0.1 0.1 0.1 0.1 ;
  81.  
  82. * Bornes min/max pour p (ici on ne contraint pas vraiment)
  83. pmin = PROG -50. -50. -50. 0. -50. ;
  84. pmax = PROG 50. 50. 50. 50. 50. ;
  85.  
  86. * Optimisation
  87. SI itrac ;
  88. xplot = PROG 0. 'PAS' 0.01 25. ;
  89. p mse lp = MOCA_MMA 'X0' p0 'ABSC' xmes 'ORDO' hmes 'PROC' (MOT 'H')
  90. 'XMIN' pmin 'XMAX' pmax 'ECHO' 2 'VISU' xplot ;
  91. SINON ;
  92. p mse lp = MOCA_MMA 'X0' p0 'ABSC' xmes 'ORDO' hmes 'PROC' (MOT 'H')
  93. 'XMIN' pmin 'XMAX' pmax 'ECHO' 2 ;
  94. FINSI ;
  95.  
  96. * Historique des parametres
  97. SI itrac ;
  98. l1hist = PROG ;
  99. l2hist = PROG ;
  100. l3hist = PROG ;
  101. l4hist = PROG ;
  102. l5hist = PROG ;
  103. lp1 = EXTR lp 1 ;
  104. REPE b1 (DIME lp) ;
  105. lp1 = EXTR lp &b1 ;
  106. l1hist = l1hist ET (EXTR lp1 1) ;
  107. l2hist = l2hist ET (EXTR lp1 2) ;
  108. l3hist = l3hist ET (EXTR lp1 3) ;
  109. l4hist = l4hist ET (EXTR lp1 4) ;
  110. l5hist = l5hist ET (EXTR lp1 5) ;
  111. FIN b1 ;
  112. SI itrac ;
  113. nit = (DIME l1hist) - 1 ;
  114. lit = LECT 0 'PAS' 1 nit ;
  115. evmse = EVOL 'ROUG' 'MANU' 'Iteration' lit 'Erreur S(x)' mse ;
  116. DESS evmse 'TITR' 'Erreur quadratique VS Iterations' ;
  117. p1ref = EXTR pref 1 ;
  118. p2ref = EXTR pref 2 ;
  119. p3ref = EXTR pref 3 ;
  120. p4ref = EXTR pref 4 ;
  121. p5ref = EXTR pref 5 ;
  122. ev1 = EVOL 'ROUG' 'MANU' 'LEGE' 'p1 calcule' 'Iteration' lit 'Parametres' l1hist ;
  123. ev2 = EVOL 'ORAN' 'MANU' 'LEGE' 'p2 calcule' 'Iteration' lit 'Parametres' l2hist ;
  124. ev3 = EVOL 'VERT' 'MANU' 'LEGE' 'p3 calcule' 'Iteration' lit 'Parametres' l3hist ;
  125. ev4 = EVOL 'BLEU' 'MANU' 'LEGE' 'p4 calcule' 'Iteration' lit 'Parametres' l4hist ;
  126. ev5 = EVOL 'VIOL' 'MANU' 'LEGE' 'p5 calcule' 'Iteration' lit 'Parametres' l5hist ;
  127. ev1r = EVOL 'ROUG' 'MANU' 'LEGE' 'p1 ref.' 'STYL' 'TIRR' 'Iteration' (PROG 0. nit)
  128. 'Parametres' (PROG p1ref p1ref) ;
  129. ev2r = EVOL 'ORAN' 'MANU' 'LEGE' 'p2 ref.' 'STYL' 'TIRR' 'Iteration' (PROG 0. nit)
  130. 'Parametres' (PROG p2ref p2ref) ;
  131. ev3r = EVOL 'VERT' 'MANU' 'LEGE' 'p3 ref.' 'STYL' 'TIRR' 'Iteration' (PROG 0. nit)
  132. 'Parametres' (PROG p3ref p3ref) ;
  133. ev4r = EVOL 'BLEU' 'MANU' 'LEGE' 'p4 ref.' 'STYL' 'TIRR' 'Iteration' (PROG 0. nit)
  134. 'Parametres' (PROG p4ref p4ref) ;
  135. ev5r = EVOL 'VIOL' 'MANU' 'LEGE' 'p5 ref.' 'STYL' 'TIRR' 'Iteration' (PROG 0. nit)
  136. 'Parametres' (PROG p5ref p5ref) ;
  137. DESS (ev1 ET ev1r ET ev2 ET ev2r ET ev3 ET ev3r ET ev4 ET ev4r ET ev5 ET ev5r)
  138. 'TITR' 'Parametres VS Iterations' 'LEGE' ;
  139. FINSI ;
  140. FINSI ;
  141.  
  142. * Bilan et verification du resultat de l'optimisation
  143. err1 = EXTR mse (DIME mse) ;
  144. err2 = MAXI 'ABS' ((p - pref) / pref) ;
  145. MESS 'Erreur quadratique finale =' err1 ;
  146. MESS 'Erreur sur les parametres finaux =' err2 ;
  147. ierr = (err1 > 1.E-10) OU (err2 > 1.E-7) ;
  148. SI ierr ;
  149. ERRE 'Erreur dans l''optimisation' ;
  150. FINSI ;
  151. SAUT 2 'LIGNE' ;
  152.  
  153.  
  154.  
  155. **************** Cas n°2 : optimisation avec contraintes ***************
  156.  
  157. MESS '***** OPTIMISATION AVEC CONTRAINTE *****' ;
  158. * Procedure pour calculer les fonctions contraintes gi(p) ainsi que les
  159. * derivees partielles des fonctions gi selon chaque composante de p
  160. DEBP G p*'LISTREEL' ;
  161. p2 = EXTR p 2 ;
  162. p3 = EXTR p 3 ;
  163. g0 = PROG (p3 - p2 + 5.) ;
  164. dg0 = ENUM (PROG 0. -1. 1. 0. 0.) ;
  165. FINP g0 dg0 ;
  166.  
  167. * Valeurs initiales p0
  168. p0 = PROG 20. 0. 25. 0.5 0. ;
  169.  
  170. * Bornes min/max pour p
  171. pmin = PROG 7. -50. 0. 0. -50. ;
  172. pmax = PROG 50. 50. 50. 1. 50. ;
  173.  
  174. * Optimisation
  175. SI itrac ;
  176. xplot = PROG 0. 'PAS' 0.01 25. ;
  177. p mse lp = MOCA_MMA 'X0' p0 'ABSC' xmes 'ORDO' hmes 'PROC' (MOT 'H')
  178. 'XMIN' pmin 'XMAX' pmax 'ECHO' 2 'CONT' (MOT 'G') 'VISU' xplot ;
  179. SINON ;
  180. p mse lp = MOCA_MMA 'X0' p0 'ABSC' xmes 'ORDO' hmes 'PROC' (MOT 'H')
  181. 'XMIN' pmin 'XMAX' pmax 'ECHO' 2 'CONT' (MOT 'G') ;
  182. FINSI ;
  183.  
  184. * Historique des parametres
  185. SI itrac ;
  186. l1hist = PROG ;
  187. l2hist = PROG ;
  188. l3hist = PROG ;
  189. l4hist = PROG ;
  190. l5hist = PROG ;
  191. lp1 = EXTR lp 1 ;
  192. REPE b1 (DIME lp) ;
  193. lp1 = EXTR lp &b1 ;
  194. l1hist = l1hist ET (EXTR lp1 1) ;
  195. l2hist = l2hist ET (EXTR lp1 2) ;
  196. l3hist = l3hist ET (EXTR lp1 3) ;
  197. l4hist = l4hist ET (EXTR lp1 4) ;
  198. l5hist = l5hist ET (EXTR lp1 5) ;
  199. FIN b1 ;
  200. SI itrac ;
  201. nit = (DIME l1hist) - 1 ;
  202. lit = LECT 0 'PAS' 1 nit ;
  203. evmse = EVOL 'ROUG' 'MANU' 'Iteration' lit 'Erreur S(x)' mse ;
  204. DESS evmse 'TITR' 'Erreur quadratique VS Iterations' ;
  205. ev1 = EVOL 'ROUG' 'MANU' 'LEGE' 'p1 calcule' 'Iteration' lit 'Parametres' l1hist ;
  206. ev2 = EVOL 'ORAN' 'MANU' 'LEGE' 'p2 calcule' 'Iteration' lit 'Parametres' l2hist ;
  207. ev3 = EVOL 'VERT' 'MANU' 'LEGE' 'p3 calcule' 'Iteration' lit 'Parametres' l3hist ;
  208. ev4 = EVOL 'BLEU' 'MANU' 'LEGE' 'p4 calcule' 'Iteration' lit 'Parametres' l4hist ;
  209. ev5 = EVOL 'VIOL' 'MANU' 'LEGE' 'p5 calcule' 'Iteration' lit 'Parametres' l5hist ;
  210. DESS (ev1 ET ev2 ET ev3 ET ev4 ET ev5) 'TITR' 'Parametres VS Iterations' 'LEGE' ;
  211. FINSI ;
  212. FINSI ;
  213.  
  214. * Bilan et verification du resultat de l'optimisation
  215. err1 = EXTR mse (DIME mse) ;
  216. MESS 'Erreur quadratique finale =' err1 ;
  217. SAUT 2 'LIGNE' ;
  218.  
  219. * Fin du cas test
  220. SI (NON ierr) ;
  221. MESS 'Cas test passe avec succes !' ;
  222. FINSI ;
  223.  
  224. FIN ;
  225.  
  226.  
  227.  

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