Télécharger fiabili.procedur

Retour à la liste

Numérotation des lignes :

  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 (<eg aa 0);
  47. bb=extr &bnbx tab . resu . distance;
  48. si ( < bb xdmin);
  49. xdmin=bb;
  50. ndmin=&bnbx;
  51. finsi;
  52. finsi;
  53. fin bnbx;
  54. *
  55. x=prog;
  56. repe bou5 nbva;
  57. x=x et (prog (extr ndmin
  58. tab . resu . (extr &bou5 (tab . noms_des_variables))));
  59. fin bou5;
  60. _tab12 = table;
  61. _tab12 . param_va= tab . param_va;
  62. _tab12 . noms_des_variables = tab . noms_des_variables;
  63. _tab12 . transformation_directe = vrai;
  64. _tab12 . points_espace_physique = x;
  65. si (exis tab matcov);
  66. nataf _tab12 ;
  67. lr_a1 = _tab12 . matrice_de_decorrelation;
  68. u =_tab12 . points_espace_reference;
  69. sinon;
  70. nataf _tab12;
  71. u =_tab12 . points_espace_reference;
  72. finsi;
  73. repe bnbx nbx;
  74.  
  75. si (non (ega &bnbx ndmin));
  76. x1=prog;
  77. repe bou5 nbva;
  78. x1=x1 et ( prog (extr &bnbx
  79. tab . resu . (extr &bou5 (tab . noms_des_variables))));
  80. fin bou5;
  81. _tab12 . points_espace_physique = x1;
  82. si (exis tab matcov);
  83. nataf _tab12 ;
  84. lr_a1 = _tab12 . matrice_de_decorrelation;
  85. u1 =_tab12 . points_espace_reference;
  86. sinon;
  87. nataf _tab12;
  88. u1 =_tab12 . points_espace_reference;
  89. finsi;
  90. u2=u1 - u;
  91. aux=0;
  92. dist2=0;
  93. repe bou5 nbva;
  94. aa=extr &bou5 u2;
  95. *
  96. dist2=dist2 + (aa * aa);
  97. fin bou5;
  98. 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. _p0=0 0 0;
  326. finsi;
  327. _mp0=manu poi1 _p0;
  328. aa=tab . noms_des_variables;
  329. *bb jamais utilise
  330. bb=manu rigidite _mp0 aa dual aa aux ;
  331. lbb=aux * 1.;
  332. *lbb pas tres utile non plus
  333. *fin matrice identite
  334. **
  335. *
  336.  
  337.  
  338.  
  339.  
  340. **bb1 matrice triangulaire qui contient sur sa diagonale
  341. ** les dui/dxi du cas independant
  342.  
  343. ************************************************************
  344. *initialisation de tab1 . mc et tab1 . vcmax
  345. ************************************************************
  346.  
  347. ************************************************************
  348. *initialisation des tableaux resultats
  349. ************************************************************
  350.  
  351. ************************************************************
  352. *initialisation de , tab1 . vxmin; tab1 . vxmax
  353. ************************************************************
  354. tmin=table;
  355. dmin=1e6;
  356. dproc=1e50;
  357. zstrat=faux;
  358. zstra1=faux;
  359. zstra2=faux;
  360. si (zrepri);
  361. zbouc=vrai;
  362. prem=faux;
  363. sinon;
  364. zbouc=faux;
  365. prem=vrai;
  366. finsi;
  367. detect=faux;
  368. iproc=0;
  369. oldidmin=0;
  370. oldiproc=0;
  371. xder=1;
  372. xder1=0;
  373. xder2=0;
  374. xder3 = 0;
  375. ************************************************************
  376. repe bou10 nfois ;
  377. ************************************************************
  378. *
  379. * tab1 = exce tab1;
  380. *
  381. ************************************************************
  382. * on essaye de reperer le flip-flop
  383. *recuperation des variables dans tab1;
  384. *on remplit les valeurs des fonctions et de leurs derivees
  385. *
  386. *d 'abord la distance
  387. *
  388. *
  389. _aux=prog;
  390. repe bou25 nbva;
  391. _aux=_aux et (prog ( tab1 . vx0 . &bou25));
  392. fin bou25;
  393. x=_aux;
  394. _tab12 . transformation_directe = vrai;
  395. _tab12 . points_espace_physique = x;
  396. si (exis tab matcov);
  397. nataf _tab12 ;
  398. lr_a1 = _tab12 . matrice_de_decorrelation;
  399. u =_tab12 . points_espace_reference;
  400. sinon;
  401. nataf _tab12;
  402. u =_tab12 . points_espace_reference;
  403. finsi;
  404. *
  405. aux=0;
  406. repeter bou2 nbva;
  407. auxx=extr &bou2 u;
  408. aux=aux+ (auxx * auxx);
  409. fin bou2;
  410. * calcul de la distance
  411. aux=aux ** 0.5;
  412. tab1 . vf . 0 =aux ;
  413. *
  414. * on recherche si on a deja trouve cette distance
  415. *
  416. si (> (&bou10 + der) (xder + 1 ));
  417. repe xb11 ((&bou10 + der) - (xder + 1));
  418. aux1=extr ((&bou10 + der) - &xb11) tab . resu . ii . indfiab ;
  419. si (< (abs((aux - aux1)/aux)) 1e-50);
  420. xtab=table;
  421. xnor=0;
  422. repe bou5 nbva;
  423. xtab . &bou5 =extr ((&bou10 + der) - &xb11)
  424. tab . resu . ii . (extr &bou5 (tab . noms_des_variables));
  425. xnor=xnor +
  426. (abs( (xtab . &bou5 - tab1 . vx0 . &bou5)/tab1 . vx0 . &bou5));
  427. fin bou5;
  428. si (< xnor 1e-50);
  429. xbouc=( &xb11);
  430. zbouc=vrai;
  431. detect=vrai;
  432. quitter xb11;
  433. finsi;
  434. finsi;
  435. fin xb11;
  436. finsi;
  437. *
  438. si (zbouc);
  439. zbouc=faux;
  440. xtab1=table;
  441.  
  442. repe bou5 nbva;
  443. xtab1 . &bou5 = 0;
  444. fin bou5;
  445. si ( (<eg idmin xder )
  446. *et (ega xder1 1) et (ega xder2 1)
  447. );
  448. repe xb12 ((&bou10 + der) - 1 ) ;
  449. si (> (extr &xb12 tab . resu . ii . 1 . limite) 0);
  450. dist2=0;
  451. repe bou5 nbva;
  452. dist2=dist2 + ((extr idmin
  453. tab . resu . ii . (extr &bou5 (tab . noms_des_variables)))
  454. -
  455. (extr &xb12
  456. tab . resu . ii . (extr &bou5 (tab . noms_des_variables)))) ** 2;
  457. fin bou5;
  458. si (< dist2 dproc);
  459. dproc=dist2;
  460. iproc=&xb12;
  461. finsi;
  462. finsi;
  463. fin xb12;
  464. si ((> iproc 0 ) et
  465. (non ((ega oldidmin idmin) et (ega oldiproc iproc)))
  466. *et (faux)
  467. *ou (ega xbouc 1)
  468. );
  469. *
  470. repe bou5 nbva;
  471. tab1 . vx0 . &bou5 =((extr idmin
  472. tab . resu . ii . (extr &bou5 (tab . noms_des_variables)))
  473. +
  474. (extr iproc
  475. tab . resu . ii . (extr &bou5 (tab . noms_des_variables)))) * 0.5;
  476. fin bou5;
  477. oldidmin=idmin;
  478. oldiproc=iproc;
  479. repe bou5 nbva;
  480. si (< tab1 . vx0 . &bou5 tab1 . vxmin . &bou5);
  481. tab1 . vxmin . &bou5 = tab1 . vx0 . &bou5;
  482. finsi;
  483. si (> tab1 . vx0 . &bou5 tab1 . vxmax . &bou5);
  484. tab1 . vxmax . &bou5 = tab1 . vx0 . &bou5;
  485. finsi;
  486. fin bou5;
  487. si (> xder1 1);
  488. si (< tab1 . t0 0.9);
  489. tt=mini (prog (tab1 . t0 + 0.1) 1);
  490. sinon;
  491. si (>eg tab1 . t0 0.95);
  492. mess 'on a du mal a converger';
  493. quitter bou10;
  494. finsi;
  495. tt=mini (prog (tab1 . t0 + 0.1) 1);
  496. finsi;
  497.  
  498. tab1 . t0 =tt;
  499. tab . param_optimisation . t0 =tt ;
  500. xder1 = 1;
  501. finsi;
  502. xder1=xder1 + 1;
  503. xder=(&bou10 + der);
  504. sinon;
  505. repe xb1 xbouc;
  506. repe bou5 nbva;
  507. xtab . &bou5 = extr ( (&bou10 + der) - (&xb1 ))
  508. tab . resu . ii . (extr &bou5 (tab . noms_des_variables));
  509. xtab1 . &bou5=xtab1 . &bou5 + (xtab . &bou5 / xbouc);
  510. fin bou5;
  511. fin xb1;
  512. repe bou5 nbva;
  513. tab1 . vx0 . &bou5 = xtab1 . &bou5;
  514. fin bou5;
  515. xder=(&bou10 + der);
  516. si (> xder2 1);
  517. si (< tab1 . t0 0.9);
  518. tt=mini (prog (tab1 . t0 + 0.1) 1);
  519. sinon;
  520. si (>eg tab1 . t0 0.95);
  521. mess 'on a du mal a converger';
  522. quitter bou10;
  523. finsi;
  524. tt=mini (prog (tab1 . t0 + 0.1) 1);
  525. finsi;
  526.  
  527. tab1 . t0 =tt;
  528. tab . param_optimisation . t0 =tt ;
  529. xder2 = 0;
  530. finsi;
  531. xder2=xder2 + 1;
  532. finsi;
  533. sinon;
  534. repe bou5 nbva;
  535. tab1 . vx0 . &bou5 = extr idmin
  536. tab . resu . ii . (extr &bou5 (tab . noms_des_variables));
  537. fin bou5;
  538. xder=(&bou10 + der);
  539. *
  540. si (> xder3 1);
  541. si (< tab1 . t0 0.9);
  542. tt=mini (prog (tab1 . t0 + 0.1) 1);
  543. sinon;
  544. si (>eg tab1 . t0 0.95);
  545. mess 'on a du mal a converger';
  546. quitter bou10;
  547. finsi;
  548. tt=mini (prog (tab1 . t0 + 0.1) 1);
  549. finsi;
  550.  
  551. tab1 . t0 =tt;
  552. tab . param_optimisation . t0 =tt ;
  553. xder3 = 1;
  554. finsi;
  555. xder3=xder3 + 1;
  556. xder1 = 0;
  557. xder2 = 0;
  558. finsi;
  559. * tab . param_optimisation . methode = mov;
  560.  
  561.  
  562. _aux=prog;
  563. repe bou25 nbva;
  564. _aux=_aux et (prog ( tab1 . vx0 . &bou25));
  565. fin bou25;
  566. x=_aux;
  567. _tab12 . transformation_directe = vrai;
  568. _tab12 . points_espace_physique = x;
  569. si (exis tab matcov);
  570. nataf _tab12 ;
  571. lr_a1 = _tab12 . matrice_de_decorrelation;
  572. u =_tab12 . points_espace_reference;
  573. sinon;
  574. nataf _tab12;
  575. u =_tab12 . points_espace_reference;
  576. finsi;
  577. *
  578. aux=0;
  579. repeter bou2 nbva;
  580. auxx=extr &bou2 u;
  581. aux=aux+ (auxx * auxx);
  582. fin bou2;
  583. * calcul de la distance
  584. aux=aux ** 0.5;
  585. tab1 . vf . 0 =aux ;
  586. finsi;
  587.  
  588. *
  589. auxvf=prog;
  590. repeter bou3 nbva;
  591. auxx=extr &bou3 u;
  592. si (ega (tab1 . vf . 0) 0.);
  593. auxvf= auxvf et (prog 1);
  594. sinon;
  595. auxvf=auxvf et (prog ( (auxx) / (tab1 . vf . 0)));
  596. finsi;
  597. fin bou3;
  598.  
  599. si (exis tab matcov);
  600. bb_a1=manu rigidite _mp0 aa dual aa quel lr_a1 ;
  601. aux2 = manu chpo _mp0 1 (extr 1 aa) (extr 1 u) nature discret;
  602. si (neg nbva 1);
  603. repe bou12 (nbva - 1);
  604. aux2 = aux2 et
  605. ( manu chpo _mp0 1 (extr (&bou12 + 1) aa) (extr (&bou12 + 1) u)
  606. nature discret);
  607. fin bou12;
  608. finsi;
  609. u1 = bb_a1 * aux2;
  610. u2 =prog;
  611. repe bou13 nbva;
  612. u2=u2 et (prog (extr u1 _p0 (extr &bou13 aa))) ;
  613. fin bou13;
  614. sinon;
  615. u2=u ;
  616. finsi;
  617.  
  618. aux1 =prog;
  619. repeter bou6 nbva;
  620. aab=extr &bou6 x;
  621. tabz=tab . param_va . &bou6;
  622. tamp1 = fdens aab tabz;
  623. aab=extr &bou6 u2;
  624. tabz1=table;
  625. tabz1 . typva = loi_normale_standard;
  626. tamp2 = fdens aab tabz1;
  627. aux1=aux1 et (prog (tamp1/tamp2));
  628. fin bou6;
  629.  
  630. ************************************************************
  631. aux2 = manu chpo _mp0 1 (extr 1 aa) (extr 1 aux1) nature discret;
  632. si (neg nbva 1);
  633. repe bou12 (nbva - 1);
  634. aux2 = aux2 et
  635. ( manu chpo _mp0 1 (extr (&bou12 + 1) aa) (extr (&bou12 + 1) aux1)
  636. nature discret);
  637. fin bou12;
  638. finsi;
  639. ************************************************************
  640. aux3=prog;
  641. repe bo40 nbva;
  642. repe bo41 nbva;
  643. toto = (extr (nbva * (&bo40 - 1) + &bo41) lbb) *
  644. (extr &bo40 aux1);
  645. aux3 = aux3 et (prog toto);
  646. fin bo41;
  647. fin bo40;
  648. bb1=manu rigidite _mp0 aa dual aa aux3 ;
  649. ************************************************************
  650. *calcul des derivees de la distance
  651. ************************************************************
  652. aux4 = manu chpo _mp0 1 (extr 1 aa) (extr 1 auxvf) nature discret;
  653. si (neg nbva 1);
  654. repe bou12 (nbva - 1);
  655. aux4 = aux4 et
  656. (manu chpo _mp0 1 (extr (&bou12 + 1) aa) (extr (&bou12 + 1) auxvf)
  657. nature discret);
  658. fin bou12;
  659. finsi;
  660. aux5b=bb1 * aux4;
  661. si (existe tab matcov);
  662. aux5= resou bb_a1 aux5b;
  663. aux5b=aux5;
  664. finsi;
  665. repeter bou5 nbva;
  666. aux6 = extr aux5b _p0 (extr &bou5 tab . noms_des_variables) ;
  667. tab1 . vf . &bou5 = aux6;
  668. tab . resu . grad_distance . &bou5 =
  669. tab . resu . grad_distance . &bou5 et (prog aux6);
  670. fin bou5;
  671. ************************************************************************
  672. *****************************************************************
  673. tab . resu . distance = tab . resu . distance et
  674. ( prog tab1 . vf . 0) ;
  675. repe bou5 nbva;
  676. si (ega &bou5 1);
  677. comp1=comp1 + 1;
  678. finsi;
  679. tab . resu . (extr &bou5 (tab . noms_des_variables))
  680. =
  681. tab . resu . (extr &bou5 (tab . noms_des_variables))
  682. et (prog (extr &bou5 x));
  683. fin bou5;
  684. si (non (existe tab grad_fct_limite ));
  685. h1=0.00001;
  686. lrx1=prog nbva * 0.;
  687. lr2=prog;
  688. REPETER bou5 nbva;
  689. lrx2=lrx1 * 1.;
  690. var = tab1 . vx0 . &bou5;
  691. var1=abs (var * h1);
  692. remp lrx2 &bou5 var1;
  693. x1 =x + lrx2;
  694. si (ega &bou5 1);
  695. comp1=comp1 + 1;
  696. finsi;
  697. repe bou5b nbva;
  698. tab . resu . (extr &bou5b (tab . noms_des_variables))
  699. =
  700. tab . resu . (extr &bou5b (tab . noms_des_variables))
  701. et (prog (extr &bou5b x1));
  702. fin bou5b;
  703.  
  704. _tab12 . transformation_directe = vrai;
  705. _tab12 . points_espace_physique = x1;
  706. si (exis tab matcov);
  707. nataf _tab12 ;
  708. lr_a1 = _tab12 . matrice_de_decorrelation;
  709. u =_tab12 . points_espace_reference;
  710. sinon;
  711. nataf _tab12;
  712. u =_tab12 . points_espace_reference;
  713. finsi;
  714. *
  715. aux=0;
  716. repeter bou2 nbva;
  717. auxx=extr &bou2 u;
  718. aux=aux+ (auxx * auxx);
  719. fin bou2;
  720. * calcul de la distance
  721. aux=aux ** 0.5;
  722. tab . resu . distance = tab . resu . distance et
  723. (prog aux);
  724. fin bou5;
  725. finsi;
  726. ****************************************************************
  727. repeter bou4 nbflim;
  728. aux = texte (tab . fct_limite . &bou4) ;
  729. auxl= aux (x) ;
  730. tab1 . mc . &bou4 . 0=auxl;
  731. tab .resu . ii . &bou4 . limite
  732. =tab . resu . ii . &bou4 . limite et (prog auxl);
  733.  
  734. tab . resu . limite . &bou4 =
  735. tab . resu . limite . &bou4 et (prog auxl);
  736.  
  737. si (ega &bou10 1);
  738. tmin . &bou4=abs(auxl);
  739. indmin=1;
  740. finsi;
  741. si (ega (&bou10 + der) 1);
  742. tmin . &bou4=abs(auxl);
  743. indmin=1;
  744. idmin= 0;
  745. si (< auxl 0);
  746. dmin = tab1 . vf . 0;
  747. idmin=1 ;
  748. finsi;
  749. finsi;
  750. si (< auxl 0);
  751. si (< tab1 . vf . 0 dmin);
  752. dmin = tab1 . vf . 0;
  753. idmin= (&bou10 + der);
  754. finsi;
  755. finsi;
  756. si (< (abs(auxl)) tmin . &bou4);
  757. tmin . &bou4 = abs(auxl);
  758. indmin= (&bou10 + der);
  759. finsi;
  760. si (non (existe tab grad_fct_limite ));
  761. h1=0.00001;
  762. lrx1=prog nbva * 0.;
  763. lr2=prog;
  764. REPETER bou5 nbva;
  765. lrx2=lrx1 * 1.;
  766. var = tab1 . vx0 . &bou5;
  767. var1=abs (var * h1);
  768. remp lrx2 &bou5 var1;
  769. x1 =x + lrx2;
  770. auxl1=aux ( x1);
  771. tab . resu . limite . &bou4 =
  772. tab . resu . limite . &bou4 et (prog auxl1);
  773. lr2=lr2 et ( prog ((auxl1 - auxl)/var1));
  774. fin bou5;
  775. lisr2=lr2;
  776. sinon;
  777. aux = texte (tab . grad_fct_limite . &bou4) ;
  778. lisr2 = aux (x) ;
  779. finsi;
  780. repeter bou5 nbva;
  781. tab1 . mc . &bou4 . &bou5 = extr &bou5 lisr2;
  782. tab . resu . ii . &bou4 . grad_limite . &bou5 =
  783. tab . resu . ii . &bou4 . grad_limite . &bou5 et
  784. (prog (extr &bou5 lisr2));
  785. fin bou5;
  786. tab1 . vcmax . &bou4 = extr (tab . param_optimisation . vcmax) &bou4;
  787. ny=dime (tab .resu . ii . &bou4 . limite);
  788. si (> ny (tab . npar ));
  789. si ( (> auxl (abs(extr (ny - (tab . npar))
  790. tab .resu . ii . &bou4 . limite))) et
  791. (non (ega (&bou10 + der) (indmin + 2)))
  792. );
  793. *si ((> idmin 1) et (> ny (idmin + 2) )
  794. *);
  795. zstrat=vrai;
  796. zstra1=vrai;
  797. zstra2=vrai;
  798. finsi;
  799. finsi;
  800. fin bou4 ;
  801.  
  802.  
  803.  
  804. tab . resu . ii . indfiab =tab . resu . ii . indfiab
  805. et (prog (tab1 . vf . 0));
  806. si (EGA (&bou10 + der) 1);
  807. repeter bou11 nbva;
  808. tab . resu . ii . (extr &bou11 (tab . noms_des_variables))
  809. = prog (tab1 . vx0 . &bou11);
  810. fin bou11;
  811. sinon;
  812. repeter bou11 nbva;
  813. tab . resu . ii . (extr &bou11 (tab . noms_des_variables))
  814. =tab . resu . ii . (extr &bou11 (tab . noms_des_variables))
  815. et ( prog (tab1 . vx0 . &bou11));
  816. fin bou11;
  817. finsi;
  818. *
  819.  
  820. ************************************************************
  821. *mise en oeuvre du changement de strategie
  822. *
  823. * mise a jour , tab1 . vxmin; tab1 . vxmax
  824. ************************************************************
  825. si (zstrat);
  826. si (prem);
  827. xder=(&bou10 + der);
  828. nx1=idmin - 1;
  829. nx2=idmin;
  830. si (ega nx1 0);
  831. nx1=(&bou10 + der) - 1;
  832. nx2=(&bou10 + der);
  833. finsi;
  834. prem=faux;
  835. toto=1;
  836. tab1 . vf . 0 = dmin;
  837. remp (tab . resu . ii . indfiab) (&bou10 + der) dmin;
  838. repe bou5 nbva;
  839. tab1 . vf . &bou5 =extr idmin
  840. tab . resu . grad_distance . &bou5;
  841. remp (tab . resu . grad_distance . &bou5)
  842. (&bou10 + der) tab1 . vf . &bou5 ;
  843. tab1 . vx0 .&bou5 =extr idmin
  844. tab . resu . ii . (extr &bou5 (tab . noms_des_variables));
  845. remp (tab . resu . ii . (extr &bou5 (tab . noms_des_variables)))
  846. (&bou10 + der) tab1 . vx0 .&bou5 ;
  847. fin bou5;
  848. repe bou4 nbflim;
  849. tab1 . mc . &bou4 . 0=extr idmin
  850. tab .resu . ii . &bou4 . limite;
  851. remp (tab .resu . ii . &bou4 . limite) (&bou10 + der)
  852. tab1 . mc . &bou4 . 0;
  853. repe bou5 nbva;
  854. tab1 . mc . &bou4 . &bou5 = extr idmin
  855. tab . resu . ii . &bou4 . grad_limite . &bou5;
  856. remp (tab . resu . ii . &bou4 . grad_limite . &bou5) (&bou10 + der)
  857. tab1 . mc . &bou4 . &bou5;
  858. fin bou5;
  859. fin bou4;
  860. sinon;
  861. si (ega toto 1);
  862. nx1=nx2;
  863. nx2=(&bou10 + der);
  864. toto=toto + 1;
  865. sinon;
  866. nx1=(&bou10 + der) - 1;
  867. nx2=(&bou10 + der) ;
  868. finsi;
  869. finsi;
  870. nlim=1;
  871. xlim1=extr nx1 tab . resu . ii . nlim . limite;
  872. xlim2=extr nx2 tab . resu . ii . nlim . limite;
  873. xdist1=extr nx1 tab . resu . ii . indfiab;
  874. xdist2=extr nx2 tab . resu . ii . indfiab;
  875. xvar1 = table;
  876. xvar2 = table;
  877. xvar3=table;
  878. repe bou5 nbva;
  879. xvar1 . &bou5 = extr nx1
  880. tab . resu . ii . (extr &bou5 (tab . noms_des_variables));
  881. xvar2 . &bou5 = extr nx2
  882. tab . resu . ii . (extr &bou5 (tab . noms_des_variables));
  883. xvar3 . &bou5 = extr idmin
  884. tab . resu . ii . (extr &bou5 (tab . noms_des_variables));
  885. fin bou5;
  886. si (>eg 0 (xlim1 * xlim2));
  887. si (< xlim1 0);
  888. si (< xdist1 xdist2);
  889. repe bou5 nbva;
  890. si (< xvar1 . &bou5 xvar2 . &bou5);
  891. **** tab1 . vxmax . &bou5 =xvar2 . &bou5;
  892. sinon;
  893. **** tab1 . vxmin . &bou5 =xvar2 . &bou5;
  894. finsi;
  895. fin bou5;
  896. sinon;
  897. repe bou5 nbva;
  898. si (< xvar1 . &bou5 xvar2 . &bou5);
  899. si (> xvar3 . &bou5 xvar1 . &bou5);
  900. tab1 . vxmin . &bou5 =xvar1 . &bou5;
  901. finsi;
  902. sinon;
  903. si (< xvar3 . &bou5 xvar1 . &bou5);
  904. tab1 . vxmax . &bou5 =xvar1 . &bou5;
  905. finsi;
  906. finsi;
  907. fin bou5;
  908. finsi;
  909. sinon;
  910. si (< xdist1 xdist2);
  911. repe bou5 nbva;
  912. si (< xvar1 . &bou5 xvar2 . &bou5);
  913. si (> xvar3 . &bou5 xvar1 . &bou5);
  914. tab1 . vxmin . &bou5 =xvar1 . &bou5;
  915. finsi;
  916. sinon;
  917. si (< xvar3 . &bou5 xvar1 . &bou5);
  918. tab1 . vxmax . &bou5 =xvar1 . &bou5;
  919. finsi;
  920. finsi;
  921. fin bou5;
  922. sinon;
  923. repe bou5 nbva;
  924. si (< xvar1 . &bou5 xvar2 . &bou5);
  925. **** tab1 . vxmax . &bou5 =xvar2 . &bou5;
  926. sinon;
  927. **** tab1 . vxmin . &bou5 =xvar2 . &bou5;
  928. finsi;
  929. fin bou5;
  930. finsi;
  931. finsi;
  932. sinon;
  933. * les points sont de part et d autre de la frontiere
  934. si (< xlim1 0);
  935. si (< xdist1 xdist2);
  936. repe bou5 nbva;
  937. si (< xvar1 . &bou5 xvar2 . &bou5);
  938. **** tab1 . vxmax . &bou5 =xvar2 . &bou5;
  939. sinon;
  940. **** tab1 . vxmin . &bou5 =xvar2 . &bou5;
  941. finsi;
  942. fin bou5;
  943. sinon;
  944. repe bou5 nbva;
  945. si (< xvar1 . &bou5 xvar2 . &bou5);
  946. si (> xvar3 . &bou5 xvar1 . &bou5);
  947. tab1 . vxmin . &bou5 =xvar1 . &bou5;
  948. finsi;
  949. sinon;
  950. si (< xvar3 . &bou5 xvar1 . &bou5);
  951. tab1 . vxmax . &bou5 =xvar1 . &bou5;
  952. finsi;
  953. finsi;
  954. fin bou5;
  955. finsi;
  956. sinon;
  957. si (< xdist1 xdist2);
  958. repe bou5 nbva;
  959. si (< xvar1 . &bou5 xvar2 . &bou5);
  960. si (> xvar3 . &bou5 xvar1 . &bou5);
  961. tab1 . vxmin . &bou5 =xvar1 . &bou5;
  962. finsi;
  963. sinon;
  964. si (< xvar3 . &bou5 xvar1 . &bou5);
  965. tab1 . vxmax . &bou5 =xvar1 . &bou5;
  966. finsi;
  967. finsi;
  968. fin bou5;
  969. sinon;
  970. repe bou5 nbva;
  971. si (< xvar1 . &bou5 xvar2 . &bou5);
  972. **** tab1 . vxmax . &bou5 =xvar2 . &bou5;
  973. sinon;
  974. **** tab1 . vxmin . &bou5 =xvar2 . &bou5;
  975. finsi;
  976. fin bou5;
  977. finsi;
  978. finsi;
  979. finsi;
  980. finsi;
  981.  
  982. ************************************************************
  983. ************************************************************
  984. ************************************************************
  985.  
  986.  
  987.  
  988. **
  989. si( (> (&bou10 + der) 1) et( non (detect)));
  990. si (ega (tab1 . vf . 0) 0.);
  991. crit=abs ((extr ((&bou10 + der) - 1) (tab . resu . ii . indfiab))
  992. - (tab1 . vf . 0));
  993. sinon;
  994. abs ((extr ((&bou10 + der) - 1 ) (tab . resu . ii . indfiab))
  995. - (tab1 . vf . 0) / (tab1 . vf . 0));
  996. finsi;
  997. sinon;
  998. crit=1;
  999. finsi;
  1000. ax1 =-1 * (tab1 . vf . 0) * S3;
  1001. tab . resu . ii . proba_defaillance =
  1002. tab . resu . ii . proba_defaillance et (prog ((1 - (erf ax1))*0.5d0 ));
  1003. *
  1004. tab . resu . ii . facteurs_de_sensibilite=
  1005. u / (tab1 . vf . 0);
  1006. si (exis tab matcov);
  1007. aux2=prog;
  1008. aux4=prog;
  1009. repe bac1 nbva;
  1010. aux3=0;
  1011. repe bac2 nbva;
  1012. auxa=extr ((&bac1 - 1) * (nbva) + &bac2) lr_a1;
  1013. auxb=1. / (extr ( &bac1) aux1);
  1014. aux2= aux2 et (prog (auxa * auxb));
  1015. aux3=aux3+((auxa * auxb)*(auxa * auxb));
  1016. fin bac2;
  1017. aux4=aux4 et (prog (aux3**0.5));
  1018. fin bac1;
  1019. bb_1=manu rigidite _mp0 aa dual aa aux2 ;
  1020. aux5=prog;
  1021. tib=table;
  1022. repe bac1 nbva;
  1023. si (ega &bac1 1);
  1024. au2 = manu chpo _mp0 1
  1025. (extr 1 aa) (extr 1 aux4) nature discret;
  1026. sinon;
  1027. au2 = manu chpo _mp0 1 (extr 1 aa) (0.) nature discret;
  1028. finsi;
  1029. repe bou12 (nbva - 1);
  1030. si (ega &bac1 (&bou12 + 1));
  1031. au2 = au2 et
  1032. ( manu chpo _mp0 1 (extr (&bou12 + 1) aa)
  1033. (extr (&bou12 + 1) aux4) nature discret);
  1034. sinon;
  1035. au2 = au2 et
  1036. ( manu chpo _mp0 1 (extr (&bou12 + 1) aa) (0.)
  1037. nature discret);
  1038. finsi;
  1039. fin bou12;
  1040. au3 = resou bb_1 au2;
  1041. tib . &bac1 = au3;
  1042. fin bac1;
  1043. vgam=prog;
  1044. ax=0;
  1045. repe bggf nbva;
  1046. aux=0;
  1047. repe bgf nbva;
  1048. auxc =extr &bgf tab . resu . ii . facteurs_de_sensibilite;
  1049. auxb = extr (tib . &bgf) _p0 (extr &bggf aa);
  1050. aux=aux + (auxc * auxb);
  1051. fin bgf;
  1052. vgam=vgam et (prog aux);
  1053. ax=ax + (aux**2);
  1054. fin bggf;
  1055. ax1 = ax**0.5;
  1056. vgam=vgam / ax1;
  1057. tab . resu . ii . vecteurs_des_sensibilites=vgam;
  1058. finsi;
  1059. *
  1060. si (non (ega xder ((&bou10 + der) - 1)));
  1061. si (existe tab critere);
  1062. si (<eg crit tab . critere) ;
  1063. si (non (ega idmin ((&bou10 + der) - 1))) ;
  1064. quitter fiabili;
  1065. finsi;
  1066. finsi;
  1067. sinon;
  1068. si (<eg crit 1e-6);
  1069. si (non (ega idmin ((&bou10 + der) - 1))) ;
  1070. quitter fiabili;
  1071. finsi;
  1072. finsi;
  1073. finsi;
  1074. finsi;
  1075. detect=faux;
  1076. tab . resu . reprise . dernier = (&bou10 + der);
  1077. repe bou5 nbva;
  1078. tab . resu . reprise . vxmin . &bou5 = tab1 . vxmin . &bou5;
  1079. tab . resu . reprise . vxmax . &bou5 = tab1 . vxmax . &bou5;
  1080. fin bou5;
  1081. si (> idmin 0);
  1082. tab . resu . ii . indice_fiabilite = extr idmin
  1083. tab . resu . ii . indfiab;
  1084. tab . resu . ii . atteint_en = idmin;
  1085. finsi;
  1086. ************************************************************
  1087. *
  1088. mess 'iteration ' (&bou10 + der) 'distance = ' tab1 . vf . 0
  1089. 'limite = ' tab1 . mc . 1 . 0 ;
  1090. si (verbose);
  1091. repe bou5 nbva;
  1092. mess '6 tab1 . vxmin . &bou5=' tab1 . vxmin . &bou5
  1093. 'tab1 . vx0 . &bou5=' tab1 . vx0 . &bou5
  1094. 'tab1 . vxmax . &bou5=' tab1 . vxmax . &bou5;
  1095. fin bou5;
  1096. finsi;
  1097. tab1 = exce tab1;
  1098. *
  1099. ************************************************************
  1100. fin bou10;
  1101. fin bou1;
  1102.  
  1103.  
  1104.  
  1105. finproc tab;
  1106.  
  1107.  
  1108.  
  1109.  

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