Télécharger optimise2.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier optimise2.dgibi
  2. * section : mathematique, optimisation
  3. *----------------------------------------------------------------------*
  4. * O P T I M I S E 2 . D G I B I *
  5. *----------------------------------------------------------------------*
  6. * Objet :
  7. * -------
  8. *
  9. * Exemple d'utilisation de la procedure OPTIMISE avec l'identification
  10. * des parametres d'une fonction, produit d'un polynome d'ordre 3 avec
  11. * une exponentielle decroissante.
  12. *
  13. * La "simulation" est dans ce cas cette fonction, realisee par la
  14. * procedure Gibiane "fonction", definie en debut de fichier.
  15. *
  16. * Puis, on definit une solution de reference a partir d'un jeu de
  17. * parametres donne.
  18. *
  19. * La procedure OPTIMISE est ensuite lancee avec un autre jeu de
  20. * parametres. L'objectif est de determiner des parametres qui donnent
  21. * une solution egale a la solution de reference a la precision pres.
  22. * Les methodes mises en oeuvre ne garantissent pas que les 2 jeux de
  23. * coefficients (reference et donnes par OPTIMISE) sont identiques.
  24. *
  25. * L'identification est menee avec la methode de Levenberg-Marquardt.
  26. * Pour assurer sa convergence, il est necessaire que la valeur du para-
  27. * -metre ponderant la decroissante de la fonction exponentielle ne soit
  28. * pas trop eloignee de sa valeur de reference.
  29. *
  30. * Par ailleurs, on remarquera que certaines valeurs des parametres
  31. * identifies sont relativement eloignees de celles de reference.
  32. *
  33. * Description :
  34. * -------------
  35. *
  36. * Type de calcul : identification des parametres d'une fonction.
  37. * Mode de calcul : sans objet
  38. * Type d'element : sans objet
  39. * Chargement : sans objet
  40. *
  41. *----------------------------------------------------------------------*
  42. *
  43. * Pour dessins, mettre ig1 a VRAI :
  44. ig1 = faux ;
  45.  
  46. *----------------- Definition d'une fonction polynome -----------------*
  47.  
  48. * Procedure Gibiane de simulation :
  49. debp fonction lree0*listreel lree1*listreel ;
  50. a0 = lree1 extr 1 ;
  51. a1 = lree1 extr 2 ;
  52. a2 = lree1 extr 3 ;
  53. a3 = lree1 extr 4 ;
  54. K1 = lree1 extr 5 ;
  55. tau1 = lree1 extr 6 ;
  56. lx1 = lree0 ;
  57. lx0 = prog (dime lx1) * 1. ;
  58. lx2 = lx1 * lx1 ;
  59. lx3 = lx2 * lx1 ;
  60. lree2 = (a0 * lx0) + (a1 * lx1) + (a2 * lx2) + (a3 * lx3) ;
  61. lexp1 = K1 * (exp (lx1 / tau1)) ;
  62. lree2 = lree2 * lexp1 ;
  63. finp lree2 ;
  64.  
  65. *------------------------ Solution de reference -----------------------*
  66.  
  67. lxref1 = prog -5. pas 0.5 10. ;
  68. lpref1 = prog 6. -1. 0. 1. 2. -3. ;
  69. lsref1 = fonction lxref1 lpref1 ;
  70.  
  71. * Affiche :
  72. si ig1 ;
  73. evref1 = evol vert manu 'x' lxref1 'f(x)' lsref1 ;
  74. dess evref1 titr 'Solution de refence' ;
  75. fins ;
  76.  
  77. *-------------------------- Appel a OPTIMISE --------------------------*
  78.  
  79. * Table d'entrees de la procedure OPTIMISE :
  80. tab1 = table ;
  81. tab1 . simulation = mot fonction ;
  82. tab1 . parametres_initiaux = prog 5 * 1. -1.5 ;
  83. tab1 . points_de_mesure = lxref1 ;
  84. tab1 . valeurs_objectif = lsref1 ;
  85. tab1 . bornes_inf = prog 6 * -10. ;
  86. tab1 . bornes_sup = prog 6 * +10. ;
  87. tab1 . precision = 1.e-5 ;
  88. tab1 . dessin_evol = ig1 ;
  89. tab1 . niter_max = 20 ;
  90.  
  91. * Appel a OPTIMISE :
  92. tab2 = optimise tab1 ;
  93.  
  94. * Affichage comparaison solution apres optimisation / reference :
  95. si ig1 ;
  96. evopt1 = evol oran manu styl noli marq rond 'x' lxref1 'f(x)' tab1 . valeurs_solution ;
  97. dess (evref1 et evopt1) titr 'Solution determinee par optimisation (orange) et reference' ;
  98. fins ;
  99.  
  100. *----------------------- Validation optimisation ----------------------*
  101.  
  102. * Critere : racine carre de la somme des ecarts au carre,
  103. * divisee par norme euclidienne du vecteur solution
  104. err1 = (somm (((tab2 . valeurs_solution) - lsref1) ** 2)) ** 0.5 ;
  105. err1 = err1 / ((somm (lsref1 ** 2)) ** 0.5) ;
  106.  
  107. * Test de validation :
  108. si (err1 '>' (tab1 . precision)) ;
  109. erre 5 ;
  110. fins ;
  111.  
  112. *---------------- F I N O P T I M I S E 2 . D G I B I ---------------*
  113. fin ;
  114.  
  115.  
  116.  
  117.  

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