1 : * FIABILI PROCEDUR CHLOE 01/10/30 21:17:45 4221 2 : debproc fiabili tab*table; 3 : * 4 : nfois1=dime tab . points_initiaux; 5 : si (non (exis tab resu)); 6 : tab . resu =table; 7 : finsi; 8 : tab . npar=2; 9 : verbose=faux; 10 : nbflim = dime (tab . fct_limite); 11 : nbva = dime (tab . param_va); 12 : S3=-0.7071067811865475d0; 13 : si (non (exis tab . resu limite)); 14 : tab . resu . limite = table; 15 : repe bou4 nbflim; 16 : tab . resu . limite . &bou4 = prog; 17 : fin bou4; 18 : repe bou5 nbva; 19 : tab . resu . (extr &bou5 (tab . noms_des_variables)) 20 : =prog; 21 : fin bou5; 22 : tab . resu . distance = prog; 23 : finsi; 24 : 25 : comp1=0; 26 : comp2=0; 27 : si (non (exis tab exploration)); 28 : tab . exploration = faux; 29 : finsi; 30 : si (tab . exploration); 31 : nbx = dime tab . resu . limite . 1; 32 : it1=0; 33 : xdmin=1e6; 34 : ndmin=0; 35 : xproc=0; 36 : xdist2=1e30; 37 : mdist2=1e30; 38 : xprocb=0; 39 : xprocc=0; 40 : xdist2=1e30; 41 : mdist2b=1e30; 42 : mdist2c=1e30; 43 : 44 : repe bnbx nbx; 45 : aa=extr &bnbx tab . resu . limite . 1; 46 : si (dist2 0); 99 : si (> (extr &bnbx tab . resu . limite . 1) 0); 100 : si (< dist2 mdist2); 101 : ee=extr &bnbx tab . resu . distance; 102 : ff=extr ndmin tab . resu . distance; 103 : si (< ee ff); 104 : mdist2=dist2; 105 : xproc=&bnbx; 106 : finsi; 107 : finsi; 108 : sinon; 109 : si (< dist2 mdist2b); 110 : mdist2b=dist2; 111 : xprocb=&bnbx; 112 : finsi; 113 : si (> dist2 mdist2b); 114 : si (< dist2 mdist2c); 115 : mdist2c=dist2; 116 : xprocc=&bnbx; 117 : finsi; 118 : finsi; 119 : finsi; 120 : finsi; 121 : finsi; 122 : fin bnbx; 123 : * 124 : xvar1 = table; 125 : xvar2 = table; 126 : xvar3 = table; 127 : xvar4 = table; 128 : 129 : repe bou5 nbva ; 130 : si (> ndmin 0); 131 : xvar1 . &bou5 = extr ndmin 132 : tab . resu . (extr &bou5 tab . noms_des_variables); 133 : finsi; 134 : si (> xproc 0); 135 : xvar2 . &bou5 = extr xproc 136 : tab . resu . (extr &bou5 tab . noms_des_variables); 137 : finsi; 138 : si (> xprocb 0); 139 : xvar3 . &bou5 = extr xprocb 140 : tab . resu . (extr &bou5 tab . noms_des_variables); 141 : finsi; 142 : si (> xprocc 0); 143 : xvar4 . &bou5 = extr xprocc 144 : tab . resu . (extr &bou5 tab . noms_des_variables); 145 : finsi; 146 : si (> ndmin 0); 147 : si (> xproc 0); 148 : si (< xvar1 . &bou5 xvar2 . &bou5); 149 : remp &bou5 tab . param_optimisation . vxmax (xvar2 . &bou5); 150 : tab . resu . reprise . vxmax . &bou5 =xvar2 . &bou5; 151 : finsi; 152 : si (> xvar1 . &bou5 xvar2 . &bou5); 153 : remp &bou5 tab . param_optimisation . vxmin (xvar2 . &bou5); 154 : tab . resu . reprise . vxmin . &bou5 =xvar2 . &bou5; 155 : finsi; 156 : finsi; 157 : si (> xprocb 0); 158 : si (< xvar1 . &bou5 xvar3 . &bou5); 159 : remp &bou5 tab . param_optimisation . vxmax (xvar3 . &bou5); 160 : tab . resu . reprise . vxmax . &bou5 =xvar3 . &bou5; 161 : finsi; 162 : si (> xvar1 . &bou5 xvar3 . &bou5); 163 : remp &bou5 tab . param_optimisation . vxmin (xvar3 . &bou5); 164 : tab . resu . reprise . vxmin . &bou5 =xvar3 . &bou5; 165 : finsi; 166 : finsi; 167 : aa = extr &bou5 tab . param_optimisation . vxmin; 168 : bb = extr &bou5 tab . param_optimisation . vxmax; 169 : si (> xprocc 0); 170 : si (< aa xvar4 . &bou5); 171 : si (> xvar1 . &bou5 xvar4 . &bou5); 172 : remp &bou5 tab . param_optimisation . vxmin (xvar4 . &bou5); 173 : tab . resu . reprise . vxmin . &bou5 =xvar4 . &bou5; 174 : finsi; 175 : finsi; 176 : si (> bb xvar4 . &bou5); 177 : si (< xvar1 . &bou5 xvar4 . &bou5); 178 : remp &bou5 tab . param_optimisation . vxmax (xvar4 . &bou5); 179 : tab . resu . reprise . vxmax . &bou5 =xvar4 . &bou5; 180 : finsi; 181 : finsi; 182 : finsi; 183 : finsi; 184 : fin bou5; 185 : tab . resu . reprise . dernier =entier (ndmin / (nbva + 1)); 186 : finsi; 187 : 188 : 189 : 190 : 191 : 192 : 193 : repe bou1 nfois1; 194 : * 195 : ii=&bou1; 196 : si (non (exis tab . resu reprise)); 197 : tab . resu . ii = table; 198 : tab . resu . ii . indfiab=prog; 199 : tab . resu . ii . proba_defaillance = prog; 200 : repe bbou nbflim; 201 : tab . resu . ii . &bbou =table; 202 : tab . resu . ii . &bbou . limite =prog; 203 : tab . resu . ii . &bbou . grad_limite =table; 204 : repe bbu1 nbva; 205 : tab . resu . ii . &bbou . grad_limite . &bbu1 =prog; 206 : fin bbu1; 207 : fin bbou; 208 : tab . resu . grad_distance =table; 209 : repe bou5 nbva; 210 : tab . resu . grad_distance . &bou5 = prog ; 211 : fin bou5; 212 : finsi; 213 : 214 : * 215 : *tab1 . vx0 contient les valeurs initiales des variables 216 : *dans l espace centre reduit 217 : tab1 =table vecteur; 218 : tab1 . vx0 =table vecteur; 219 : tab1 . vf = table vecteur; 220 : tab1 . mc = table vecteur; 221 : tab1 . vxmin = table vecteur; 222 : tab1 . vxmax = table vecteur; 223 : tab1 . vcmax = table vecteur; 224 : * 225 : repe bouc nbflim ; 226 : tab1 . mc . &bouc = table vecteur; 227 : fin bouc; 228 : si (exis (tab . param_optimisation) methode); 229 : tab1 . methode = tab . param_optimisation . methode ; 230 : finsi; 231 : si (exis (tab . param_optimisation) t0); 232 : tab1 . t0 =tab . param_optimisation . t0; 233 : finsi; 234 : si (exis (tab . param_optimisation) s0); 235 : tab1 . s0 =tab . param_optimisation . s0; 236 : finsi; 237 : si (exis tab max_iteration); 238 : tab1 . maxiteration = tab .param_optimisation . maxiteration; 239 : finsi; 240 : si (exis tab max_iteration); 241 : nfois = tab . max_iteration; 242 : sinon; 243 : nfois=100; 244 : finsi; 245 : ************************************************************ 246 : *initialisation de tab1 . vxo, tab1 . vxmin; tab1 . vxmax 247 : ************************************************************ 248 : repeter bou5 nbva; 249 : tab1 . vx0 . &bou5 = extr &bou5 (tab . points_initiaux . ii); 250 : tab1 . vxmin . &bou5 251 : = extr &bou5 (tab . param_optimisation . vxmin); 252 : tab1 . vxmax . &bou5 253 : = extr &bou5 (tab . param_optimisation . vxmax); 254 : fin bou5; 255 : si (exis (tab . resu) 'REPRISE'); 256 : si (ega tab . resu . reprise . dernier 0); 257 : der = entier ( (dime tab . resu . limite . 1) / (nbva + 1)); 258 : sinon; 259 : der = tab . resu . reprise . dernier; 260 : finsi; 261 : repe bou5 nbva; 262 : 263 : tab1 . vx0 . &bou5 = extr der 264 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables)); 265 : tab1 . vxmin . &bou5 266 : = tab . resu . reprise . vxmin . &bou5; 267 : tab1 . vxmax . &bou5 268 : = tab . resu . reprise . vxmax . &bou5; 269 : fin bou5; 270 : idmin = tab . resu . ii . atteint_en; 271 : zrepri = vrai; 272 : 273 : sinon; 274 : 275 : tab . resu . reprise = table ; 276 : tab . resu . reprise . vxmin = table; 277 : tab . resu . reprise . vxmax = table; 278 : der=0; 279 : zrepri=faux; 280 : finsi; 281 : 282 : ************************************************************ 283 : *auxvf contient d(distance) / du 284 : ************************************************************ 285 : _tab12=table; 286 : _tab12 . transformation_directe = vrai; 287 : _tab12 . points_espace_physique = tab . points_initiaux . ii; 288 : _tab12 . param_va= tab . param_va; 289 : _tab12 . noms_des_variables = tab . noms_des_variables; 290 : si (existe tab matcov); 291 : _tab12 . matcov= tab . matcov; 292 : nataf _tab12 ; 293 : lr_a= _tab12 . matrice_de_decorrelation; 294 : u = _tab12 . points_espace_reference ; 295 : sinon; 296 : nataf _tab12; 297 : u = _tab12 . points_espace_reference ; 298 : finsi; 299 : ************************************************************ 300 : *calcul de la jacobienne de nataf du/dx 301 : ************************************************************ 302 : *matrice identité dans bb et son équivalent en listreel dans lbb 303 : aux = prog 1; 304 : repeter bou7 nbva; 305 : j = &bou7 - 1; 306 : si (neg j 0); 307 : repeter bou8 j; 308 : aux = aux et (prog 0); 309 : fin bou8; 310 : finsi; 311 : si (neg &bou7 1); 312 : aux= aux et (prog 1); 313 : finsi; 314 : j=nbva - &bou7; 315 : si (neg j 0); 316 : repeter bou9 j; 317 : aux= aux et (prog 0); 318 : fin bou9; 319 : finsi; 320 : fin bou7; 321 : cc = vale dime; 322 : si (EGA cc 2); 323 : _p0=0 0; 324 : sinon; 325 : opti dime 3; 326 : _p0=0 0 0; 327 : finsi; 328 : _mp0=manu poi1 _p0; 329 : aa=tab . noms_des_variables; 330 : *bb jamais utilise 331 : bb=manu rigidite _mp0 aa dual aa aux ; 332 : lbb=aux * 1.; 333 : *lbb pas tres utile non plus 334 : *fin matrice identite 335 : ** 336 : * 337 : 338 : 339 : 340 : 341 : **bb1 matrice triangulaire qui contient sur sa diagonale 342 : ** les dui/dxi du cas independant 343 : 344 : ************************************************************ 345 : *initialisation de tab1 . mc et tab1 . vcmax 346 : ************************************************************ 347 : 348 : ************************************************************ 349 : *initialisation des tableaux resultats 350 : ************************************************************ 351 : 352 : ************************************************************ 353 : *initialisation de , tab1 . vxmin; tab1 . vxmax 354 : ************************************************************ 355 : tmin=table; 356 : dmin=1e6; 357 : dproc=1e50; 358 : zstrat=faux; 359 : zstra1=faux; 360 : zstra2=faux; 361 : si (zrepri); 362 : zbouc=vrai; 363 : prem=faux; 364 : sinon; 365 : zbouc=faux; 366 : prem=vrai; 367 : finsi; 368 : detect=faux; 369 : iproc=0; 370 : oldidmin=0; 371 : oldiproc=0; 372 : xder=1; 373 : xder1=0; 374 : xder2=0; 375 : xder3 = 0; 376 : ************************************************************ 377 : repe bou10 nfois ; 378 : ************************************************************ 379 : * 380 : * tab1 = exce tab1; 381 : * 382 : ************************************************************ 383 : * on essaye de reperer le flip-flop 384 : *recuperation des variables dans tab1; 385 : *on remplit les valeurs des fonctions et de leurs derivees 386 : * 387 : *d 'abord la distance 388 : * 389 : * 390 : _aux=prog; 391 : repe bou25 nbva; 392 : _aux=_aux et (prog ( tab1 . vx0 . &bou25)); 393 : fin bou25; 394 : x=_aux; 395 : _tab12 . transformation_directe = vrai; 396 : _tab12 . points_espace_physique = x; 397 : si (exis tab matcov); 398 : nataf _tab12 ; 399 : lr_a1 = _tab12 . matrice_de_decorrelation; 400 : u =_tab12 . points_espace_reference; 401 : sinon; 402 : nataf _tab12; 403 : u =_tab12 . points_espace_reference; 404 : finsi; 405 : * 406 : aux=0; 407 : repeter bou2 nbva; 408 : auxx=extr &bou2 u; 409 : aux=aux+ (auxx * auxx); 410 : fin bou2; 411 : * calcul de la distance 412 : aux=aux ** 0.5; 413 : tab1 . vf . 0 =aux ; 414 : * 415 : * on recherche si on a deja trouve cette distance 416 : * 417 : si (> (&bou10 + der) (xder + 1 )); 418 : repe xb11 ((&bou10 + der) - (xder + 1)); 419 : aux1=extr ((&bou10 + der) - &xb11) tab . resu . ii . indfiab ; 420 : si (< (abs((aux - aux1)/aux)) 1e-50); 421 : xtab=table; 422 : xnor=0; 423 : repe bou5 nbva; 424 : xtab . &bou5 =extr ((&bou10 + der) - &xb11) 425 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables)); 426 : xnor=xnor + 427 : (abs( (xtab . &bou5 - tab1 . vx0 . &bou5)/tab1 . vx0 . &bou5)); 428 : fin bou5; 429 : si (< xnor 1e-50); 430 : xbouc=( &xb11); 431 : zbouc=vrai; 432 : detect=vrai; 433 : quitter xb11; 434 : finsi; 435 : finsi; 436 : fin xb11; 437 : finsi; 438 : * 439 : si (zbouc); 440 : zbouc=faux; 441 : xtab1=table; 442 : 443 : repe bou5 nbva; 444 : xtab1 . &bou5 = 0; 445 : fin bou5; 446 : si ( ( (extr &xb12 tab . resu . ii . 1 . limite) 0); 451 : dist2=0; 452 : repe bou5 nbva; 453 : dist2=dist2 + ((extr idmin 454 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables))) 455 : - 456 : (extr &xb12 457 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables)))) ** 2; 458 : fin bou5; 459 : si (< dist2 dproc); 460 : dproc=dist2; 461 : iproc=&xb12; 462 : finsi; 463 : finsi; 464 : fin xb12; 465 : si ((> iproc 0 ) et 466 : (non ((ega oldidmin idmin) et (ega oldiproc iproc))) 467 : *et (faux) 468 : *ou (ega xbouc 1) 469 : ); 470 : * 471 : repe bou5 nbva; 472 : tab1 . vx0 . &bou5 =((extr idmin 473 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables))) 474 : + 475 : (extr iproc 476 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables)))) * 0.5; 477 : fin bou5; 478 : oldidmin=idmin; 479 : oldiproc=iproc; 480 : repe bou5 nbva; 481 : si (< tab1 . vx0 . &bou5 tab1 . vxmin . &bou5); 482 : tab1 . vxmin . &bou5 = tab1 . vx0 . &bou5; 483 : finsi; 484 : si (> tab1 . vx0 . &bou5 tab1 . vxmax . &bou5); 485 : tab1 . vxmax . &bou5 = tab1 . vx0 . &bou5; 486 : finsi; 487 : fin bou5; 488 : si (> xder1 1); 489 : si (< tab1 . t0 0.9); 490 : tt=mini (prog (tab1 . t0 + 0.1) 1); 491 : sinon; 492 : si (>eg tab1 . t0 0.95); 493 : mess 'on a du mal a converger'; 494 : quitter bou10; 495 : finsi; 496 : tt=mini (prog (tab1 . t0 + 0.1) 1); 497 : finsi; 498 : 499 : tab1 . t0 =tt; 500 : tab . param_optimisation . t0 =tt ; 501 : xder1 = 1; 502 : finsi; 503 : xder1=xder1 + 1; 504 : xder=(&bou10 + der); 505 : sinon; 506 : repe xb1 xbouc; 507 : repe bou5 nbva; 508 : xtab . &bou5 = extr ( (&bou10 + der) - (&xb1 )) 509 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables)); 510 : xtab1 . &bou5=xtab1 . &bou5 + (xtab . &bou5 / xbouc); 511 : fin bou5; 512 : fin xb1; 513 : repe bou5 nbva; 514 : tab1 . vx0 . &bou5 = xtab1 . &bou5; 515 : fin bou5; 516 : xder=(&bou10 + der); 517 : si (> xder2 1); 518 : si (< tab1 . t0 0.9); 519 : tt=mini (prog (tab1 . t0 + 0.1) 1); 520 : sinon; 521 : si (>eg tab1 . t0 0.95); 522 : mess 'on a du mal a converger'; 523 : quitter bou10; 524 : finsi; 525 : tt=mini (prog (tab1 . t0 + 0.1) 1); 526 : finsi; 527 : 528 : tab1 . t0 =tt; 529 : tab . param_optimisation . t0 =tt ; 530 : xder2 = 0; 531 : finsi; 532 : xder2=xder2 + 1; 533 : finsi; 534 : sinon; 535 : repe bou5 nbva; 536 : tab1 . vx0 . &bou5 = extr idmin 537 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables)); 538 : fin bou5; 539 : xder=(&bou10 + der); 540 : * 541 : si (> xder3 1); 542 : si (< tab1 . t0 0.9); 543 : tt=mini (prog (tab1 . t0 + 0.1) 1); 544 : sinon; 545 : si (>eg tab1 . t0 0.95); 546 : mess 'on a du mal a converger'; 547 : quitter bou10; 548 : finsi; 549 : tt=mini (prog (tab1 . t0 + 0.1) 1); 550 : finsi; 551 : 552 : tab1 . t0 =tt; 553 : tab . param_optimisation . t0 =tt ; 554 : xder3 = 1; 555 : finsi; 556 : xder3=xder3 + 1; 557 : xder1 = 0; 558 : xder2 = 0; 559 : finsi; 560 : * tab . param_optimisation . methode = mov; 561 : 562 : 563 : _aux=prog; 564 : repe bou25 nbva; 565 : _aux=_aux et (prog ( tab1 . vx0 . &bou25)); 566 : fin bou25; 567 : x=_aux; 568 : _tab12 . transformation_directe = vrai; 569 : _tab12 . points_espace_physique = x; 570 : si (exis tab matcov); 571 : nataf _tab12 ; 572 : lr_a1 = _tab12 . matrice_de_decorrelation; 573 : u =_tab12 . points_espace_reference; 574 : sinon; 575 : nataf _tab12; 576 : u =_tab12 . points_espace_reference; 577 : finsi; 578 : * 579 : aux=0; 580 : repeter bou2 nbva; 581 : auxx=extr &bou2 u; 582 : aux=aux+ (auxx * auxx); 583 : fin bou2; 584 : * calcul de la distance 585 : aux=aux ** 0.5; 586 : tab1 . vf . 0 =aux ; 587 : finsi; 588 : 589 : * 590 : auxvf=prog; 591 : repeter bou3 nbva; 592 : auxx=extr &bou3 u; 593 : si (ega (tab1 . vf . 0) 0.); 594 : auxvf= auxvf et (prog 1); 595 : sinon; 596 : auxvf=auxvf et (prog ( (auxx) / (tab1 . vf . 0))); 597 : finsi; 598 : fin bou3; 599 : 600 : si (exis tab matcov); 601 : bb_a1=manu rigidite _mp0 aa dual aa quel lr_a1 ; 602 : aux2 = manu chpo _mp0 1 (extr 1 aa) (extr 1 u) nature discret; 603 : si (neg nbva 1); 604 : repe bou12 (nbva - 1); 605 : aux2 = aux2 et 606 : ( manu chpo _mp0 1 (extr (&bou12 + 1) aa) (extr (&bou12 + 1) u) 607 : nature discret); 608 : fin bou12; 609 : finsi; 610 : u1 = bb_a1 * aux2; 611 : u2 =prog; 612 : repe bou13 nbva; 613 : u2=u2 et (prog (extr u1 _p0 (extr &bou13 aa))) ; 614 : fin bou13; 615 : sinon; 616 : u2=u ; 617 : finsi; 618 : 619 : aux1 =prog; 620 : repeter bou6 nbva; 621 : aab=extr &bou6 x; 622 : tabz=tab . param_va . &bou6; 623 : tamp1 = fdens aab tabz; 624 : aab=extr &bou6 u2; 625 : tabz1=table; 626 : tabz1 . typva = loi_normale_standard; 627 : tamp2 = fdens aab tabz1; 628 : aux1=aux1 et (prog (tamp1/tamp2)); 629 : fin bou6; 630 : 631 : ************************************************************ 632 : aux2 = manu chpo _mp0 1 (extr 1 aa) (extr 1 aux1) nature discret; 633 : si (neg nbva 1); 634 : repe bou12 (nbva - 1); 635 : aux2 = aux2 et 636 : ( manu chpo _mp0 1 (extr (&bou12 + 1) aa) (extr (&bou12 + 1) aux1) 637 : nature discret); 638 : fin bou12; 639 : finsi; 640 : ************************************************************ 641 : aux3=prog; 642 : repe bo40 nbva; 643 : repe bo41 nbva; 644 : toto = (extr (nbva * (&bo40 - 1) + &bo41) lbb) * 645 : (extr &bo40 aux1); 646 : aux3 = aux3 et (prog toto); 647 : fin bo41; 648 : fin bo40; 649 : bb1=manu rigidite _mp0 aa dual aa aux3 ; 650 : ************************************************************ 651 : *calcul des derivees de la distance 652 : ************************************************************ 653 : aux4 = manu chpo _mp0 1 (extr 1 aa) (extr 1 auxvf) nature discret; 654 : si (neg nbva 1); 655 : repe bou12 (nbva - 1); 656 : aux4 = aux4 et 657 : (manu chpo _mp0 1 (extr (&bou12 + 1) aa) (extr (&bou12 + 1) auxvf) 658 : nature discret); 659 : fin bou12; 660 : finsi; 661 : aux5b=bb1 * aux4; 662 : si (existe tab matcov); 663 : aux5= resou bb_a1 aux5b; 664 : aux5b=aux5; 665 : finsi; 666 : repeter bou5 nbva; 667 : aux6 = extr aux5b _p0 (extr &bou5 tab . noms_des_variables) ; 668 : tab1 . vf . &bou5 = aux6; 669 : tab . resu . grad_distance . &bou5 = 670 : tab . resu . grad_distance . &bou5 et (prog aux6); 671 : fin bou5; 672 : ************************************************************************ 673 : ***************************************************************** 674 : tab . resu . distance = tab . resu . distance et 675 : ( prog tab1 . vf . 0) ; 676 : repe bou5 nbva; 677 : si (ega &bou5 1); 678 : comp1=comp1 + 1; 679 : finsi; 680 : tab . resu . (extr &bou5 (tab . noms_des_variables)) 681 : = 682 : tab . resu . (extr &bou5 (tab . noms_des_variables)) 683 : et (prog (extr &bou5 x)); 684 : fin bou5; 685 : si (non (existe tab grad_fct_limite )); 686 : h1=0.00001; 687 : lrx1=prog nbva * 0.; 688 : lr2=prog; 689 : REPETER bou5 nbva; 690 : lrx2=lrx1 * 1.; 691 : var = tab1 . vx0 . &bou5; 692 : var1=abs (var * h1); 693 : remp lrx2 &bou5 var1; 694 : x1 =x + lrx2; 695 : si (ega &bou5 1); 696 : comp1=comp1 + 1; 697 : finsi; 698 : repe bou5b nbva; 699 : tab . resu . (extr &bou5b (tab . noms_des_variables)) 700 : = 701 : tab . resu . (extr &bou5b (tab . noms_des_variables)) 702 : et (prog (extr &bou5b x1)); 703 : fin bou5b; 704 : 705 : _tab12 . transformation_directe = vrai; 706 : _tab12 . points_espace_physique = x1; 707 : si (exis tab matcov); 708 : nataf _tab12 ; 709 : lr_a1 = _tab12 . matrice_de_decorrelation; 710 : u =_tab12 . points_espace_reference; 711 : sinon; 712 : nataf _tab12; 713 : u =_tab12 . points_espace_reference; 714 : finsi; 715 : * 716 : aux=0; 717 : repeter bou2 nbva; 718 : auxx=extr &bou2 u; 719 : aux=aux+ (auxx * auxx); 720 : fin bou2; 721 : * calcul de la distance 722 : aux=aux ** 0.5; 723 : tab . resu . distance = tab . resu . distance et 724 : (prog aux); 725 : fin bou5; 726 : finsi; 727 : **************************************************************** 728 : repeter bou4 nbflim; 729 : aux = texte (tab . fct_limite . &bou4) ; 730 : auxl= aux (x) ; 731 : tab1 . mc . &bou4 . 0=auxl; 732 : tab .resu . ii . &bou4 . limite 733 : =tab . resu . ii . &bou4 . limite et (prog auxl); 734 : 735 : tab . resu . limite . &bou4 = 736 : tab . resu . limite . &bou4 et (prog auxl); 737 : 738 : si (ega &bou10 1); 739 : tmin . &bou4=abs(auxl); 740 : indmin=1; 741 : finsi; 742 : si (ega (&bou10 + der) 1); 743 : tmin . &bou4=abs(auxl); 744 : indmin=1; 745 : idmin= 0; 746 : si (< auxl 0); 747 : dmin = tab1 . vf . 0; 748 : idmin=1 ; 749 : finsi; 750 : finsi; 751 : si (< auxl 0); 752 : si (< tab1 . vf . 0 dmin); 753 : dmin = tab1 . vf . 0; 754 : idmin= (&bou10 + der); 755 : finsi; 756 : finsi; 757 : si (< (abs(auxl)) tmin . &bou4); 758 : tmin . &bou4 = abs(auxl); 759 : indmin= (&bou10 + der); 760 : finsi; 761 : si (non (existe tab grad_fct_limite )); 762 : h1=0.00001; 763 : lrx1=prog nbva * 0.; 764 : lr2=prog; 765 : REPETER bou5 nbva; 766 : lrx2=lrx1 * 1.; 767 : var = tab1 . vx0 . &bou5; 768 : var1=abs (var * h1); 769 : remp lrx2 &bou5 var1; 770 : x1 =x + lrx2; 771 : auxl1=aux ( x1); 772 : tab . resu . limite . &bou4 = 773 : tab . resu . limite . &bou4 et (prog auxl1); 774 : lr2=lr2 et ( prog ((auxl1 - auxl)/var1)); 775 : fin bou5; 776 : lisr2=lr2; 777 : sinon; 778 : aux = texte (tab . grad_fct_limite . &bou4) ; 779 : lisr2 = aux (x) ; 780 : finsi; 781 : repeter bou5 nbva; 782 : tab1 . mc . &bou4 . &bou5 = extr &bou5 lisr2; 783 : tab . resu . ii . &bou4 . grad_limite . &bou5 = 784 : tab . resu . ii . &bou4 . grad_limite . &bou5 et 785 : (prog (extr &bou5 lisr2)); 786 : fin bou5; 787 : tab1 . vcmax . &bou4 = extr (tab . param_optimisation . vcmax) &bou4; 788 : ny=dime (tab .resu . ii . &bou4 . limite); 789 : si (> ny (tab . npar )); 790 : si ( (> auxl (abs(extr (ny - (tab . npar)) 791 : tab .resu . ii . &bou4 . limite))) et 792 : (non (ega (&bou10 + der) (indmin + 2))) 793 : ); 794 : *si ((> idmin 1) et (> ny (idmin + 2) ) 795 : *); 796 : zstrat=vrai; 797 : zstra1=vrai; 798 : zstra2=vrai; 799 : finsi; 800 : finsi; 801 : fin bou4 ; 802 : 803 : 804 : 805 : tab . resu . ii . indfiab =tab . resu . ii . indfiab 806 : et (prog (tab1 . vf . 0)); 807 : si (EGA (&bou10 + der) 1); 808 : repeter bou11 nbva; 809 : tab . resu . ii . (extr &bou11 (tab . noms_des_variables)) 810 : = prog (tab1 . vx0 . &bou11); 811 : fin bou11; 812 : sinon; 813 : repeter bou11 nbva; 814 : tab . resu . ii . (extr &bou11 (tab . noms_des_variables)) 815 : =tab . resu . ii . (extr &bou11 (tab . noms_des_variables)) 816 : et ( prog (tab1 . vx0 . &bou11)); 817 : fin bou11; 818 : finsi; 819 : * 820 : 821 : ************************************************************ 822 : *mise en oeuvre du changement de strategie 823 : * 824 : * mise a jour , tab1 . vxmin; tab1 . vxmax 825 : ************************************************************ 826 : si (zstrat); 827 : si (prem); 828 : xder=(&bou10 + der); 829 : nx1=idmin - 1; 830 : nx2=idmin; 831 : si (ega nx1 0); 832 : nx1=(&bou10 + der) - 1; 833 : nx2=(&bou10 + der); 834 : finsi; 835 : prem=faux; 836 : toto=1; 837 : tab1 . vf . 0 = dmin; 838 : remp (tab . resu . ii . indfiab) (&bou10 + der) dmin; 839 : repe bou5 nbva; 840 : tab1 . vf . &bou5 =extr idmin 841 : tab . resu . grad_distance . &bou5; 842 : remp (tab . resu . grad_distance . &bou5) 843 : (&bou10 + der) tab1 . vf . &bou5 ; 844 : tab1 . vx0 .&bou5 =extr idmin 845 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables)); 846 : remp (tab . resu . ii . (extr &bou5 (tab . noms_des_variables))) 847 : (&bou10 + der) tab1 . vx0 .&bou5 ; 848 : fin bou5; 849 : repe bou4 nbflim; 850 : tab1 . mc . &bou4 . 0=extr idmin 851 : tab .resu . ii . &bou4 . limite; 852 : remp (tab .resu . ii . &bou4 . limite) (&bou10 + der) 853 : tab1 . mc . &bou4 . 0; 854 : repe bou5 nbva; 855 : tab1 . mc . &bou4 . &bou5 = extr idmin 856 : tab . resu . ii . &bou4 . grad_limite . &bou5; 857 : remp (tab . resu . ii . &bou4 . grad_limite . &bou5) (&bou10 + der) 858 : tab1 . mc . &bou4 . &bou5; 859 : fin bou5; 860 : fin bou4; 861 : sinon; 862 : si (ega toto 1); 863 : nx1=nx2; 864 : nx2=(&bou10 + der); 865 : toto=toto + 1; 866 : sinon; 867 : nx1=(&bou10 + der) - 1; 868 : nx2=(&bou10 + der) ; 869 : finsi; 870 : finsi; 871 : nlim=1; 872 : xlim1=extr nx1 tab . resu . ii . nlim . limite; 873 : xlim2=extr nx2 tab . resu . ii . nlim . limite; 874 : xdist1=extr nx1 tab . resu . ii . indfiab; 875 : xdist2=extr nx2 tab . resu . ii . indfiab; 876 : xvar1 = table; 877 : xvar2 = table; 878 : xvar3=table; 879 : repe bou5 nbva; 880 : xvar1 . &bou5 = extr nx1 881 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables)); 882 : xvar2 . &bou5 = extr nx2 883 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables)); 884 : xvar3 . &bou5 = extr idmin 885 : tab . resu . ii . (extr &bou5 (tab . noms_des_variables)); 886 : fin bou5; 887 : si (>eg 0 (xlim1 * xlim2)); 888 : si (< xlim1 0); 889 : si (< xdist1 xdist2); 890 : repe bou5 nbva; 891 : si (< xvar1 . &bou5 xvar2 . &bou5); 892 : **** tab1 . vxmax . &bou5 =xvar2 . &bou5; 893 : sinon; 894 : **** tab1 . vxmin . &bou5 =xvar2 . &bou5; 895 : finsi; 896 : fin bou5; 897 : sinon; 898 : repe bou5 nbva; 899 : si (< xvar1 . &bou5 xvar2 . &bou5); 900 : si (> xvar3 . &bou5 xvar1 . &bou5); 901 : tab1 . vxmin . &bou5 =xvar1 . &bou5; 902 : finsi; 903 : sinon; 904 : si (< xvar3 . &bou5 xvar1 . &bou5); 905 : tab1 . vxmax . &bou5 =xvar1 . &bou5; 906 : finsi; 907 : finsi; 908 : fin bou5; 909 : finsi; 910 : sinon; 911 : si (< xdist1 xdist2); 912 : repe bou5 nbva; 913 : si (< xvar1 . &bou5 xvar2 . &bou5); 914 : si (> xvar3 . &bou5 xvar1 . &bou5); 915 : tab1 . vxmin . &bou5 =xvar1 . &bou5; 916 : finsi; 917 : sinon; 918 : si (< xvar3 . &bou5 xvar1 . &bou5); 919 : tab1 . vxmax . &bou5 =xvar1 . &bou5; 920 : finsi; 921 : finsi; 922 : fin bou5; 923 : sinon; 924 : repe bou5 nbva; 925 : si (< xvar1 . &bou5 xvar2 . &bou5); 926 : **** tab1 . vxmax . &bou5 =xvar2 . &bou5; 927 : sinon; 928 : **** tab1 . vxmin . &bou5 =xvar2 . &bou5; 929 : finsi; 930 : fin bou5; 931 : finsi; 932 : finsi; 933 : sinon; 934 : * les points sont de part et d autre de la frontiere 935 : si (< xlim1 0); 936 : si (< xdist1 xdist2); 937 : repe bou5 nbva; 938 : si (< xvar1 . &bou5 xvar2 . &bou5); 939 : **** tab1 . vxmax . &bou5 =xvar2 . &bou5; 940 : sinon; 941 : **** tab1 . vxmin . &bou5 =xvar2 . &bou5; 942 : finsi; 943 : fin bou5; 944 : sinon; 945 : repe bou5 nbva; 946 : si (< xvar1 . &bou5 xvar2 . &bou5); 947 : si (> xvar3 . &bou5 xvar1 . &bou5); 948 : tab1 . vxmin . &bou5 =xvar1 . &bou5; 949 : finsi; 950 : sinon; 951 : si (< xvar3 . &bou5 xvar1 . &bou5); 952 : tab1 . vxmax . &bou5 =xvar1 . &bou5; 953 : finsi; 954 : finsi; 955 : fin bou5; 956 : finsi; 957 : sinon; 958 : si (< xdist1 xdist2); 959 : repe bou5 nbva; 960 : si (< xvar1 . &bou5 xvar2 . &bou5); 961 : si (> xvar3 . &bou5 xvar1 . &bou5); 962 : tab1 . vxmin . &bou5 =xvar1 . &bou5; 963 : finsi; 964 : sinon; 965 : si (< xvar3 . &bou5 xvar1 . &bou5); 966 : tab1 . vxmax . &bou5 =xvar1 . &bou5; 967 : finsi; 968 : finsi; 969 : fin bou5; 970 : sinon; 971 : repe bou5 nbva; 972 : si (< xvar1 . &bou5 xvar2 . &bou5); 973 : **** tab1 . vxmax . &bou5 =xvar2 . &bou5; 974 : sinon; 975 : **** tab1 . vxmin . &bou5 =xvar2 . &bou5; 976 : finsi; 977 : fin bou5; 978 : finsi; 979 : finsi; 980 : finsi; 981 : finsi; 982 : 983 : ************************************************************ 984 : ************************************************************ 985 : ************************************************************ 986 : 987 : 988 : 989 : ** 990 : si( (> (&bou10 + der) 1) et( non (detect))); 991 : si (ega (tab1 . vf . 0) 0.); 992 : crit=abs ((extr ((&bou10 + der) - 1) (tab . resu . ii . indfiab)) 993 : - (tab1 . vf . 0)); 994 : sinon; 995 : crit= 996 : abs ((extr ((&bou10 + der) - 1 ) (tab . resu . ii . indfiab)) 997 : - (tab1 . vf . 0) / (tab1 . vf . 0)); 998 : finsi; 999 : sinon; 1000 : crit=1; 1001 : finsi; 1002 : ax1 =-1 * (tab1 . vf . 0) * S3; 1003 : tab . resu . ii . proba_defaillance = 1004 : tab . resu . ii . proba_defaillance et (prog ((1 - (erf ax1))*0.5d0 )); 1005 : * 1006 : tab . resu . ii . facteurs_de_sensibilite= 1007 : u / (tab1 . vf . 0); 1008 : si (exis tab matcov); 1009 : aux2=prog; 1010 : aux4=prog; 1011 : repe bac1 nbva; 1012 : aux3=0; 1013 : repe bac2 nbva; 1014 : auxa=extr ((&bac1 - 1) * (nbva) + &bac2) lr_a1; 1015 : auxb=1. / (extr ( &bac1) aux1); 1016 : aux2= aux2 et (prog (auxa * auxb)); 1017 : aux3=aux3+((auxa * auxb)*(auxa * auxb)); 1018 : fin bac2; 1019 : aux4=aux4 et (prog (aux3**0.5)); 1020 : fin bac1; 1021 : bb_1=manu rigidite _mp0 aa dual aa aux2 ; 1022 : aux5=prog; 1023 : tib=table; 1024 : repe bac1 nbva; 1025 : si (ega &bac1 1); 1026 : au2 = manu chpo _mp0 1 1027 : (extr 1 aa) (extr 1 aux4) nature discret; 1028 : sinon; 1029 : au2 = manu chpo _mp0 1 (extr 1 aa) (0.) nature discret; 1030 : finsi; 1031 : repe bou12 (nbva - 1); 1032 : si (ega &bac1 (&bou12 + 1)); 1033 : au2 = au2 et 1034 : ( manu chpo _mp0 1 (extr (&bou12 + 1) aa) 1035 : (extr (&bou12 + 1) aux4) nature discret); 1036 : sinon; 1037 : au2 = au2 et 1038 : ( manu chpo _mp0 1 (extr (&bou12 + 1) aa) (0.) 1039 : nature discret); 1040 : finsi; 1041 : fin bou12; 1042 : au3 = resou bb_1 au2; 1043 : tib . &bac1 = au3; 1044 : fin bac1; 1045 : vgam=prog; 1046 : ax=0; 1047 : repe bggf nbva; 1048 : aux=0; 1049 : repe bgf nbva; 1050 : auxc =extr &bgf tab . resu . ii . facteurs_de_sensibilite; 1051 : auxb = extr (tib . &bgf) _p0 (extr &bggf aa); 1052 : aux=aux + (auxc * auxb); 1053 : fin bgf; 1054 : vgam=vgam et (prog aux); 1055 : ax=ax + (aux**2); 1056 : fin bggf; 1057 : ax1 = ax**0.5; 1058 : vgam=vgam / ax1; 1059 : tab . resu . ii . vecteurs_des_sensibilites=vgam; 1060 : finsi; 1061 : * 1062 : si (non (ega xder ((&bou10 + der) - 1))); 1063 : si (existe tab critere); 1064 : si ( idmin 0); 1084 : tab . resu . ii . indice_fiabilite = extr idmin 1085 : tab . resu . ii . indfiab; 1086 : tab . resu . ii . atteint_en = idmin; 1087 : finsi; 1088 : ************************************************************ 1089 : * 1090 : mess 'iteration ' (&bou10 + der) 'distance = ' tab1 . vf . 0 1091 : 'limite = ' tab1 . mc . 1 . 0 ; 1092 : si (verbose); 1093 : repe bou5 nbva; 1094 : mess '6 tab1 . vxmin . &bou5=' tab1 . vxmin . &bou5 1095 : 'tab1 . vx0 . &bou5=' tab1 . vx0 . &bou5 1096 : 'tab1 . vxmax . &bou5=' tab1 . vxmax . &bou5; 1097 : fin bou5; 1098 : finsi; 1099 : tab1 = exce tab1; 1100 : * 1101 : ************************************************************ 1102 : fin bou10; 1103 : fin bou1; 1104 : 1105 : 1106 : 1107 : finproc tab; 1108 : 1109 : 1110 :
© Cast3M 2003 - All rights reserved.
Disclaimer