* fichier : excel1.dgibi ************************************************************************ ************************************************************************ * excel1.dgibi * * deux methode sont proposees dans l'opérateur exce : * la methode standard ( minimisation convexe) avec t0 = 0.6; * la methode move limite; * on trace aussi sur une grille la valeur de la fonction et la * condition * * min de ((X1 - mx1)*(X1-mx1)/sx1/sx1 + * (X2 - mx2)*(X2-mx2)/sx2/sx2)**0.5) * * sachant que X1 -X2/A =<0 * graph = faux; xx1 = 10.; xx2 = 10.; * * donnée des constantes * mx1=272.72; sx1=16.36; mx2=70.; sx2=15.; A=0.42; * * petite procedur pour calculer les conditions et les derivees * les inconnues X1 et X2 sont dans la table tvx0 debproc intmci tmci txv0; tmci . 0 = txv0 . 1 - ( txv0 . 2 / A); tmci . 1 = 1.; tmci . 2 = -1./ A; finproc; * * procedur pour calculer la fonction et ses derivees * les inconnues X1 et X2 sont dans la table tvx0 * debpro intvf tvf*table tvx0*table; xx = ( tvx0 . 1 - mx1 )*( tvx0 . 1 - mx1 ) /sx1 /sx1 +( ( tvx0 . 2 - mx2 )*( tvx0 . 2 - mx2 ) /sx2 /sx2); yy = 2. * ( tvx0 . 1 - mx1 )/ SX1/SX1; zz = 2. * ( tvx0 . 2 - mx2 )/ SX2 / sx2; tvf . 0 = xx ** 0.5; tvf . 1 = 0.5 * yy / tvf . 0; tvf. 2 = zz * 0.5 / tvf . 0; finproc; * traitement annexe * calcul de la fonction,de la condition et visualisation * on regarde dans un interval predefini xdep-(xdep + nx*ax) * ydep-( ydep + ny*ay) ax = 5 ; ay = 3;xdep = 220; ydep = 80; nx = 12; ny=15; pa = xdep ydep; pb = (nx*ax + xdep) ydep; su = liab trans ny ( 0 (ny*ay)); mtot = 0; repe ii (nx + 1); x = xdep + ( (&ii - 1) * ax); repe jj ( ny + 1); y = ydep + ( (&jj - 1) * ay); pp = x y; pp = point su proche pp ; f = ( x - mx1 )*( x - mx1 ) /sx1 /sx1 +( ( y - mx2 )*( y - mx2 ) /sx2 /sx2); f = f ** 0.5; si ( mtot ega 0) ; mtit = mm;mtot = 1; sinon; mtit = mtit et mm; finsi; fin jj; fin ii; ch = chain 'CAS 1 -- XDEP: ' xdep ' DX: ' ax ' YDEP: ' ydep ' DY: ' ay; titre ch; si graph; finsi; * * fin du dessin de la fonction et debut de l'optimisation * boucle pour les 2 methodes repeter met 2; ta = table; * definition d'un point de depart tvx0 = table vecteur; tvx0.1 = xx1; tvx0 . 2 = xx2; * * tvf contiendra la valeur de la fonction et les derivees * calculées au point de depart * tvf = table vecteur; * * tmci contient la ieme condition et les derivees calculees * au point de départ * tmc = table ; tmci=table vecteur; tmc . 1 = tmci; * * def de la valeur min des variables dans tvxmin * tvxmin = table vecteur; tvxmin . 1 =1.; tvxmin . 2 = 1.; * * def de la valeur max des variables dans tvxmax * tvxmax = table vecteur; tvxmax. 1 = 1000.; tvxmax . 2 = 1000.; * * definition des valeurs au second membre des conditions * tvcmax= table vecteur; tvcmax . 1 = 0.; * * choix de la méthode et remplissage de la table argument de exce * ta . mc = tmc; ta.vxmin = tvxmin; ta . vxmax = tvxmax; ta.vcmax = tvcmax; si (ega &met 1) ; ta . methode = sta; ta . t0 = 0.6; sinon; ta.methode = mov; finsi; * calcul de la fonction et de ses derivees intvf tvf tvx0; * calcul des conditions et de leurs dérivées intmci tmci tvx0; * * preparation des listreel pour stocker les résultats * intermediaires de la fonction est des variables * * boucle d'optimisation * repeter bouc 30; * on remplit la partie changeante de ta ta . vx0 = tvx0; ta. vf = tvf; ta . mc . 1 = tmci; * * appel à exce * * * recuperation des variables dans ta.VX0 tvx0 = ta . vx0; * calcul de la fonction et des dérivées intvf tvf tvx0; * calcul des conditions et de leurs dérivées intmci tmci tvx0; * remplissage des listreels pour visualition des itérations fin bouc; * * visualisation des résultats * titre ch; si graph; dess ev1; finsi; si ((( aa - 2.6997) / 2.6997 ) > 0.001 ); erreur 5; sinon; message ' le cas test est correct'; finsi; fin met; fin;
© Cast3M 2003 - Tous droits réservés.
Mentions légales