* fichier :  ajuste1.dgibi
************************************************************************
* Section : Mathematiques Fonctions
************************************************************************


graph = faux;
option echo 0;
* fichier :  ajuste.;dgibi
* exemple d'utilisation de la procedure AJUSTE
* on cherche a identifier les parametres  a,b,c,d de la fonctions 
*   y = a * (log ( (b*x) + c) ) + (exp (d*x))
*
* on part d'un jeu de couple yi = f(xi)
* qui sont calcules pour a = 3 b=2  c=1  d=0.1
*les valeurs de xi sont :
*   0.2 pas 0.1  2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
*

debproc FCT xtab*'TABLE' p*LISTREEL ;
  x = xtab . 1;
  n=dime x;
  tbfonc = 'TABLE';
  tbfonc.'F' = 'TABLE';
  b = extr p 1;
  c = extr p 2;
  d = extr p 3;
  progc = prog n * c;
  tbfonc.'F' . 1 = log ( (b*x) + progc);
  tbfonc.'G' = exp (d*x);
finproc tbfonc;

debproc DERI xtab*'TABLE' p*LISTREEL;
  x = xtab . 1;
  n = dime x;
  tbderi = 'TABLE';
  tbderi.'F' = table;
  tbderi.'G' = table;
  tbderi.'F' . 1  = 'TABLE';
  tbderi.'F' . 2  = 'TABLE';
  tbderi.'F' . 3  = 'TABLE';
  b = extr p 1;
  c = extr p 2;
  d = extr p 3;
  progc = prog n * c;
  tbderi . 'F' . 1 . 1 =  x / ((b*x)+progc);
  tbderi . 'F' . 2 . 1 =  (prog n*1.) / ( (b*x) + progc);
  tbderi . 'F' . 3 . 1 =  prog n*0.;
  tbderi . 'G' . 1 = prog n*0;
  tbderi . 'G' . 2 = prog n*0;
  tbderi . 'G' . 3 = x * (exp (d*x) );
finproc tbderi;

debproc fonc x*LISTREEL;
  n = dime x;
  y = 3 * (log ( (2.*x) + (prog n*1.)) ) + (exp (0.1*x));
finproc y;

tab1 = table;
x = prog  0.2 pas 0.1  2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ;
y = fonc x;
xtab=table;
xtab . 1=x;
tab1.'X'=xtab;
tab1.'F'=y;
tab1.'K'=3;
tab1.'L'=1;
pmin=prog 3*0.001;
pmax=prog 3*10.;
prc=prog 3*0.0001;
tab1.'MXTER'=150;
tab1.'PMIN'=pmin;
tab1.'PMAX'=pmax;
tab1.'PRECISION'=prc;
q p=ajuste tab1 ;
n=dime x;
b = extr p 1;
c = extr p 2;
d = extr p 3;
a = extr q 1;
 mess ' a = ' a ' pour 3.  attendu';
 mess ' b = ' b ' pour 2.  attendu';
 mess ' c = ' c ' pour 1.  attendu';
 mess ' d = ' d ' pour 0.1 attendu';

y1 = a * (log ( (b*x) + (prog n*c)) ) + (exp (d*x));
ev = evol roug manu 'X' x 'Y' y ;

era = abs (( 3. - a ) / 3.);
erb = abs (( 2. - b ) / 2.);
erc = abs (( 1. - c ) / 1.);
erd = abs (( 0.1 - d ) / 0.1);
erma = maxi ( prog era erb erc erd);
si (erma > 0.03) ; 
   message ' erreur maxi ' erma ' valeur test 0.03';
   erreur 5;
sinon;
   'ERREUR' 0 ;
finsi;

ev1 = evol bleu manu  'X' x 'Y1' y1;
si graph;
  dess(ev et ev1);
finsi;

fin;
 

 

 

 

 

