* FIABILI PROCEDUR CHLOE 01/10/30 21:17:45 4221 * finsi; tab . npar=2; verbose=faux; S3=-0.7071067811865475d0; repe bou4 nbflim; fin bou4; repe bou5 nbva; fin bou5; finsi; comp1=0; comp2=0; tab . exploration = faux; finsi; si (tab . exploration); it1=0; xdmin=1e6; ndmin=0; xproc=0; xdist2=1e30; mdist2=1e30; xprocb=0; xprocc=0; xdist2=1e30; mdist2b=1e30; mdist2c=1e30; repe bnbx nbx; si (<eg aa 0); si ( < bb xdmin); xdmin=bb; ndmin=&bnbx; finsi; finsi; fin bnbx; * repe bou5 nbva; fin bou5; _tab12 = table; _tab12 . param_va= tab . param_va; _tab12 . noms_des_variables = tab . noms_des_variables; _tab12 . transformation_directe = vrai; _tab12 . points_espace_physique = x; nataf _tab12 ; lr_a1 = _tab12 . matrice_de_decorrelation; u =_tab12 . points_espace_reference; sinon; nataf _tab12; u =_tab12 . points_espace_reference; finsi; repe bnbx nbx; si (non (ega &bnbx ndmin)); repe bou5 nbva; fin bou5; _tab12 . points_espace_physique = x1; nataf _tab12 ; lr_a1 = _tab12 . matrice_de_decorrelation; u1 =_tab12 . points_espace_reference; sinon; nataf _tab12; u1 =_tab12 . points_espace_reference; finsi; u2=u1 - u; aux=0; dist2=0; repe bou5 nbva; * dist2=dist2 + (aa * aa); fin bou5; si (> dist2 0); si (< dist2 mdist2); si (< ee ff); mdist2=dist2; xproc=&bnbx; finsi; finsi; sinon; si (< dist2 mdist2b); mdist2b=dist2; xprocb=&bnbx; finsi; si (> dist2 mdist2b); si (< dist2 mdist2c); mdist2c=dist2; xprocc=&bnbx; finsi; finsi; finsi; finsi; finsi; fin bnbx; * xvar1 = table; xvar2 = table; xvar3 = table; xvar4 = table; repe bou5 nbva ; si (> ndmin 0); finsi; si (> xproc 0); finsi; si (> xprocb 0); finsi; si (> xprocc 0); finsi; si (> ndmin 0); si (> xproc 0); si (< xvar1 . &bou5 xvar2 . &bou5); finsi; si (> xvar1 . &bou5 xvar2 . &bou5); finsi; finsi; si (> xprocb 0); si (< xvar1 . &bou5 xvar3 . &bou5); finsi; si (> xvar1 . &bou5 xvar3 . &bou5); finsi; finsi; si (> xprocc 0); si (< aa xvar4 . &bou5); si (> xvar1 . &bou5 xvar4 . &bou5); finsi; finsi; si (> bb xvar4 . &bou5); si (< xvar1 . &bou5 xvar4 . &bou5); finsi; finsi; finsi; finsi; fin bou5; finsi; repe bou1 nfois1; * ii=&bou1; repe bbou nbflim; repe bbu1 nbva; fin bbu1; fin bbou; repe bou5 nbva; fin bou5; finsi; * *tab1 . vx0 contient les valeurs initiales des variables *dans l espace centre reduit tab1 =table vecteur; tab1 . vx0 =table vecteur; tab1 . vf = table vecteur; tab1 . mc = table vecteur; tab1 . vxmin = table vecteur; tab1 . vxmax = table vecteur; tab1 . vcmax = table vecteur; * repe bouc nbflim ; tab1 . mc . &bouc = table vecteur; fin bouc; tab1 . methode = tab . param_optimisation . methode ; finsi; tab1 . t0 =tab . param_optimisation . t0; finsi; tab1 . s0 =tab . param_optimisation . s0; finsi; tab1 . maxiteration = tab .param_optimisation . maxiteration; finsi; nfois = tab . max_iteration; sinon; nfois=100; finsi; ************************************************************ *initialisation de tab1 . vxo, tab1 . vxmin; tab1 . vxmax ************************************************************ repeter bou5 nbva; tab1 . vxmin . &bou5 tab1 . vxmax . &bou5 fin bou5; sinon; finsi; repe bou5 nbva; tab1 . vxmin . &bou5 tab1 . vxmax . &bou5 fin bou5; zrepri = vrai; sinon; der=0; zrepri=faux; finsi; ************************************************************ *auxvf contient d(distance) / du ************************************************************ _tab12=table; _tab12 . transformation_directe = vrai; _tab12 . points_espace_physique = tab . points_initiaux . ii; _tab12 . param_va= tab . param_va; _tab12 . noms_des_variables = tab . noms_des_variables; si (existe tab matcov); _tab12 . matcov= tab . matcov; nataf _tab12 ; lr_a= _tab12 . matrice_de_decorrelation; u = _tab12 . points_espace_reference ; sinon; nataf _tab12; u = _tab12 . points_espace_reference ; finsi; ************************************************************ *calcul de la jacobienne de nataf du/dx ************************************************************ *matrice identité dans bb et son équivalent en listreel dans lbb repeter bou7 nbva; j = &bou7 - 1; si (neg j 0); repeter bou8 j; fin bou8; finsi; si (neg &bou7 1); finsi; j=nbva - &bou7; si (neg j 0); repeter bou9 j; fin bou9; finsi; fin bou7; si (EGA cc 2); _p0=0 0; sinon; _p0=0 0 0; finsi; aa=tab . noms_des_variables; *bb jamais utilise lbb=aux * 1.; *lbb pas tres utile non plus *fin matrice identite ** * **bb1 matrice triangulaire qui contient sur sa diagonale ** les dui/dxi du cas independant ************************************************************ *initialisation de tab1 . mc et tab1 . vcmax ************************************************************ ************************************************************ *initialisation des tableaux resultats ************************************************************ ************************************************************ *initialisation de , tab1 . vxmin; tab1 . vxmax ************************************************************ tmin=table; dmin=1e6; dproc=1e50; zstrat=faux; zstra1=faux; zstra2=faux; si (zrepri); zbouc=vrai; prem=faux; sinon; zbouc=faux; prem=vrai; finsi; detect=faux; iproc=0; oldidmin=0; oldiproc=0; xder=1; xder1=0; xder2=0; xder3 = 0; ************************************************************ repe bou10 nfois ; ************************************************************ * * tab1 = exce tab1; * ************************************************************ * on essaye de reperer le flip-flop *recuperation des variables dans tab1; *on remplit les valeurs des fonctions et de leurs derivees * *d 'abord la distance * * repe bou25 nbva; fin bou25; x=_aux; _tab12 . transformation_directe = vrai; _tab12 . points_espace_physique = x; nataf _tab12 ; lr_a1 = _tab12 . matrice_de_decorrelation; u =_tab12 . points_espace_reference; sinon; nataf _tab12; u =_tab12 . points_espace_reference; finsi; * aux=0; repeter bou2 nbva; aux=aux+ (auxx * auxx); fin bou2; * calcul de la distance aux=aux ** 0.5; tab1 . vf . 0 =aux ; * * on recherche si on a deja trouve cette distance * si (> (&bou10 + der) (xder + 1 )); repe xb11 ((&bou10 + der) - (xder + 1)); si (< (abs((aux - aux1)/aux)) 1e-50); xtab=table; xnor=0; repe bou5 nbva; xnor=xnor + (abs( (xtab . &bou5 - tab1 . vx0 . &bou5)/tab1 . vx0 . &bou5)); fin bou5; si (< xnor 1e-50); xbouc=( &xb11); zbouc=vrai; detect=vrai; quitter xb11; finsi; finsi; fin xb11; finsi; * si (zbouc); zbouc=faux; xtab1=table; repe bou5 nbva; xtab1 . &bou5 = 0; fin bou5; si ( (<eg idmin xder ) *et (ega xder1 1) et (ega xder2 1) ); repe xb12 ((&bou10 + der) - 1 ) ; dist2=0; repe bou5 nbva; - fin bou5; si (< dist2 dproc); dproc=dist2; iproc=&xb12; finsi; finsi; fin xb12; si ((> iproc 0 ) et (non ((ega oldidmin idmin) et (ega oldiproc iproc))) *et (faux) *ou (ega xbouc 1) ); * repe bou5 nbva; + (extr iproc fin bou5; oldidmin=idmin; oldiproc=iproc; repe bou5 nbva; si (< tab1 . vx0 . &bou5 tab1 . vxmin . &bou5); tab1 . vxmin . &bou5 = tab1 . vx0 . &bou5; finsi; si (> tab1 . vx0 . &bou5 tab1 . vxmax . &bou5); tab1 . vxmax . &bou5 = tab1 . vx0 . &bou5; finsi; fin bou5; si (> xder1 1); si (< tab1 . t0 0.9); sinon; si (>eg tab1 . t0 0.95); mess 'on a du mal a converger'; quitter bou10; finsi; finsi; tab1 . t0 =tt; tab . param_optimisation . t0 =tt ; xder1 = 1; finsi; xder1=xder1 + 1; xder=(&bou10 + der); sinon; repe xb1 xbouc; repe bou5 nbva; xtab1 . &bou5=xtab1 . &bou5 + (xtab . &bou5 / xbouc); fin bou5; fin xb1; repe bou5 nbva; tab1 . vx0 . &bou5 = xtab1 . &bou5; fin bou5; xder=(&bou10 + der); si (> xder2 1); si (< tab1 . t0 0.9); sinon; si (>eg tab1 . t0 0.95); mess 'on a du mal a converger'; quitter bou10; finsi; finsi; tab1 . t0 =tt; tab . param_optimisation . t0 =tt ; xder2 = 0; finsi; xder2=xder2 + 1; finsi; sinon; repe bou5 nbva; fin bou5; xder=(&bou10 + der); * si (> xder3 1); si (< tab1 . t0 0.9); sinon; si (>eg tab1 . t0 0.95); mess 'on a du mal a converger'; quitter bou10; finsi; finsi; tab1 . t0 =tt; tab . param_optimisation . t0 =tt ; xder3 = 1; finsi; xder3=xder3 + 1; xder1 = 0; xder2 = 0; finsi; * tab . param_optimisation . methode = mov; repe bou25 nbva; fin bou25; x=_aux; _tab12 . transformation_directe = vrai; _tab12 . points_espace_physique = x; nataf _tab12 ; lr_a1 = _tab12 . matrice_de_decorrelation; u =_tab12 . points_espace_reference; sinon; nataf _tab12; u =_tab12 . points_espace_reference; finsi; * aux=0; repeter bou2 nbva; aux=aux+ (auxx * auxx); fin bou2; * calcul de la distance aux=aux ** 0.5; tab1 . vf . 0 =aux ; finsi; * repeter bou3 nbva; si (ega (tab1 . vf . 0) 0.); sinon; finsi; fin bou3; si (neg nbva 1); repe bou12 (nbva - 1); aux2 = aux2 et nature discret); fin bou12; finsi; u1 = bb_a1 * aux2; repe bou13 nbva; fin bou13; sinon; u2=u ; finsi; repeter bou6 nbva; tabz=tab . param_va . &bou6; tabz1=table; tabz1 . typva = loi_normale_standard; fin bou6; ************************************************************ si (neg nbva 1); repe bou12 (nbva - 1); aux2 = aux2 et nature discret); fin bou12; finsi; ************************************************************ repe bo40 nbva; repe bo41 nbva; fin bo41; fin bo40; ************************************************************ *calcul des derivees de la distance ************************************************************ si (neg nbva 1); repe bou12 (nbva - 1); aux4 = aux4 et nature discret); fin bou12; finsi; aux5b=bb1 * aux4; si (existe tab matcov); aux5= resou bb_a1 aux5b; aux5b=aux5; finsi; repeter bou5 nbva; tab1 . vf . &bou5 = aux6; fin bou5; ************************************************************************ ***************************************************************** repe bou5 nbva; si (ega &bou5 1); comp1=comp1 + 1; finsi; = fin bou5; si (non (existe tab grad_fct_limite )); h1=0.00001; REPETER bou5 nbva; lrx2=lrx1 * 1.; var = tab1 . vx0 . &bou5; var1=abs (var * h1); x1 =x + lrx2; si (ega &bou5 1); comp1=comp1 + 1; finsi; repe bou5b nbva; = fin bou5b; _tab12 . transformation_directe = vrai; _tab12 . points_espace_physique = x1; nataf _tab12 ; lr_a1 = _tab12 . matrice_de_decorrelation; u =_tab12 . points_espace_reference; sinon; nataf _tab12; u =_tab12 . points_espace_reference; finsi; * aux=0; repeter bou2 nbva; aux=aux+ (auxx * auxx); fin bou2; * calcul de la distance aux=aux ** 0.5; fin bou5; finsi; **************************************************************** repeter bou4 nbflim; aux = texte (tab . fct_limite . &bou4) ; auxl= aux (x) ; tab1 . mc . &bou4 . 0=auxl; si (ega &bou10 1); tmin . &bou4=abs(auxl); indmin=1; finsi; si (ega (&bou10 + der) 1); tmin . &bou4=abs(auxl); indmin=1; idmin= 0; si (< auxl 0); dmin = tab1 . vf . 0; idmin=1 ; finsi; finsi; si (< auxl 0); si (< tab1 . vf . 0 dmin); dmin = tab1 . vf . 0; idmin= (&bou10 + der); finsi; finsi; si (< (abs(auxl)) tmin . &bou4); tmin . &bou4 = abs(auxl); indmin= (&bou10 + der); finsi; si (non (existe tab grad_fct_limite )); h1=0.00001; REPETER bou5 nbva; lrx2=lrx1 * 1.; var = tab1 . vx0 . &bou5; var1=abs (var * h1); x1 =x + lrx2; auxl1=aux ( x1); fin bou5; lisr2=lr2; sinon; aux = texte (tab . grad_fct_limite . &bou4) ; lisr2 = aux (x) ; finsi; repeter bou5 nbva; fin bou5; si (> ny (tab . npar )); (non (ega (&bou10 + der) (indmin + 2))) ); *si ((> idmin 1) et (> ny (idmin + 2) ) *); zstrat=vrai; zstra1=vrai; zstra2=vrai; finsi; finsi; fin bou4 ; si (EGA (&bou10 + der) 1); repeter bou11 nbva; fin bou11; sinon; repeter bou11 nbva; fin bou11; finsi; * ************************************************************ *mise en oeuvre du changement de strategie * * mise a jour , tab1 . vxmin; tab1 . vxmax ************************************************************ si (zstrat); si (prem); xder=(&bou10 + der); nx1=idmin - 1; nx2=idmin; si (ega nx1 0); nx1=(&bou10 + der) - 1; nx2=(&bou10 + der); finsi; prem=faux; toto=1; tab1 . vf . 0 = dmin; repe bou5 nbva; (&bou10 + der) tab1 . vf . &bou5 ; (&bou10 + der) tab1 . vx0 .&bou5 ; fin bou5; repe bou4 nbflim; tab1 . mc . &bou4 . 0; repe bou5 nbva; tab1 . mc . &bou4 . &bou5; fin bou5; fin bou4; sinon; si (ega toto 1); nx1=nx2; nx2=(&bou10 + der); toto=toto + 1; sinon; nx1=(&bou10 + der) - 1; nx2=(&bou10 + der) ; finsi; finsi; nlim=1; xvar1 = table; xvar2 = table; xvar3=table; repe bou5 nbva; fin bou5; si (>eg 0 (xlim1 * xlim2)); si (< xlim1 0); si (< xdist1 xdist2); repe bou5 nbva; si (< xvar1 . &bou5 xvar2 . &bou5); **** tab1 . vxmax . &bou5 =xvar2 . &bou5; sinon; **** tab1 . vxmin . &bou5 =xvar2 . &bou5; finsi; fin bou5; sinon; repe bou5 nbva; si (< xvar1 . &bou5 xvar2 . &bou5); si (> xvar3 . &bou5 xvar1 . &bou5); tab1 . vxmin . &bou5 =xvar1 . &bou5; finsi; sinon; si (< xvar3 . &bou5 xvar1 . &bou5); tab1 . vxmax . &bou5 =xvar1 . &bou5; finsi; finsi; fin bou5; finsi; sinon; si (< xdist1 xdist2); repe bou5 nbva; si (< xvar1 . &bou5 xvar2 . &bou5); si (> xvar3 . &bou5 xvar1 . &bou5); tab1 . vxmin . &bou5 =xvar1 . &bou5; finsi; sinon; si (< xvar3 . &bou5 xvar1 . &bou5); tab1 . vxmax . &bou5 =xvar1 . &bou5; finsi; finsi; fin bou5; sinon; repe bou5 nbva; si (< xvar1 . &bou5 xvar2 . &bou5); **** tab1 . vxmax . &bou5 =xvar2 . &bou5; sinon; **** tab1 . vxmin . &bou5 =xvar2 . &bou5; finsi; fin bou5; finsi; finsi; sinon; * les points sont de part et d autre de la frontiere si (< xlim1 0); si (< xdist1 xdist2); repe bou5 nbva; si (< xvar1 . &bou5 xvar2 . &bou5); **** tab1 . vxmax . &bou5 =xvar2 . &bou5; sinon; **** tab1 . vxmin . &bou5 =xvar2 . &bou5; finsi; fin bou5; sinon; repe bou5 nbva; si (< xvar1 . &bou5 xvar2 . &bou5); si (> xvar3 . &bou5 xvar1 . &bou5); tab1 . vxmin . &bou5 =xvar1 . &bou5; finsi; sinon; si (< xvar3 . &bou5 xvar1 . &bou5); tab1 . vxmax . &bou5 =xvar1 . &bou5; finsi; finsi; fin bou5; finsi; sinon; si (< xdist1 xdist2); repe bou5 nbva; si (< xvar1 . &bou5 xvar2 . &bou5); si (> xvar3 . &bou5 xvar1 . &bou5); tab1 . vxmin . &bou5 =xvar1 . &bou5; finsi; sinon; si (< xvar3 . &bou5 xvar1 . &bou5); tab1 . vxmax . &bou5 =xvar1 . &bou5; finsi; finsi; fin bou5; sinon; repe bou5 nbva; si (< xvar1 . &bou5 xvar2 . &bou5); **** tab1 . vxmax . &bou5 =xvar2 . &bou5; sinon; **** tab1 . vxmin . &bou5 =xvar2 . &bou5; finsi; fin bou5; finsi; finsi; finsi; finsi; ************************************************************ ************************************************************ ************************************************************ ** si( (> (&bou10 + der) 1) et( non (detect))); si (ega (tab1 . vf . 0) 0.); - (tab1 . vf . 0)); sinon; crit= - (tab1 . vf . 0) / (tab1 . vf . 0)); finsi; sinon; finsi; ax1 =-1 * (tab1 . vf . 0) * S3; * u / (tab1 . vf . 0); repe bac1 nbva; aux3=0; repe bac2 nbva; aux3=aux3+((auxa * auxb)*(auxa * auxb)); fin bac2; fin bac1; tib=table; repe bac1 nbva; si (ega &bac1 1); sinon; finsi; repe bou12 (nbva - 1); si (ega &bac1 (&bou12 + 1)); au2 = au2 et sinon; au2 = au2 et nature discret); finsi; fin bou12; au3 = resou bb_1 au2; tib . &bac1 = au3; fin bac1; ax=0; repe bggf nbva; aux=0; repe bgf nbva; aux=aux + (auxc * auxb); fin bgf; ax=ax + (aux**2); fin bggf; ax1 = ax**0.5; vgam=vgam / ax1; finsi; * si (non (ega xder ((&bou10 + der) - 1))); si (existe tab critere); si (non (ega idmin ((&bou10 + der) - 1))) ; finsi; finsi; sinon; si (non (ega idmin ((&bou10 + der) - 1))) ; finsi; finsi; finsi; finsi; detect=faux; repe bou5 nbva; fin bou5; si (> idmin 0); finsi; ************************************************************ * 'limite = ' tab1 . mc . 1 . 0 ; si (verbose); repe bou5 nbva; 'tab1 . vx0 . &bou5=' tab1 . vx0 . &bou5 'tab1 . vxmax . &bou5=' tab1 . vxmax . &bou5; fin bou5; finsi; * ************************************************************ fin bou10; fin bou1; finproc tab;
© Cast3M 2003 - Tous droits réservés.
Mentions légales