* NATAF PROCEDUR AM 09/12/07 21:15:54 6578 *------------------------------------------------------------------------------- * Operateur NATAF complete et modifie par F. Duprat le 12/05/05 * Correlations fictives : Liu & Der Kiureghian, PEM, vol.1 1986, p-105-112 *------------------------------------------------------------------------------- * *sortie y listreel contenant l'image de X * dans l'espace de reference si TAB1 . 'TRANSFORMATION_DIRECTE'=vrai * dans l'espace physique si TAB1 . 'TRANSFORMATION_DIRECTE'=faux * si (non (tab1 . transformation_directe)); x = tab1 . points_espace_reference; sinon; x=tab1 . points_espace_physique; finsi; tab2=tab1 . param_va; si (existe tab1 noms_des_variables); lm1=tab1 . noms_des_variables; finsi; si (existe tab1 matcov); si (existe tab1 matrice_de_decorrelation); lr2=tab1 . matrice_de_decorrelation; sinon; lrx=tab1 . matcov; *- * procedure qui calcule une matrice auxiliaire pour nataf *-lisree1 = listreel qui contient la partie triangulaire inferieure * de la matrice de covariance * *- loi pour lesquelles le calcul approche est actuellement disponible: * Uniforme, Normal, Lognormale, Exponentielle, Weibull * * tab2 : tab . i . typva = type de la ieme va * tab . i . ? =param de la ieme va * * sortie : * lr2 listreel qui contient la matrice triangulaire inferieure ******************************************************************** * *calcul de la matrice de correlation equivalente * repe bou1 nbva; repe bou2 &bou1; *1 remplace par *2 *1 si (ega &bou1 &bou2); *1 laux=laux et (prog (extr (&bou1 + 1 * &bou1 / 2) lrx)); *1 iterer bou2; *1 finsi; *2 si (ega &bou1 &bou2); *2 sinon; finsi; si (ega baux 0.); iterer bou2; finsi; *determination du type des va typ1= tab2 . &bou1 . typva; typ2= tab2 . &bou2 . typva; * traitement des differents cas * Uniforme + Uniforme SI (et (EGA typ1 loi_uniforme) (EGA typ2 loi_uniforme)); iterer bou2; finsi; * normale standard + normale standard SI (et (EGA typ1 loi_normale_standard) (EGA typ2 loi_normale_standard) ); iterer bou2; finsi; * exponentielle + exponentielle SI (et (ega typ1 loi_exponentielle) (ega typ2 loi_exponentielle)); AUX= (1.229 - (0.367*BAUX) + (0.153*BAUX*BAUX))*BAUX; iterer bou2; finsi; * lognormale + lognormale SI (et (ega typ1 loi_lognormale) (ega typ2 loi_lognormale)); MOY1 = Tab2 . &bou1 . MOYENNE ; FSIG1= Tab2 . &bou1 . ECART_TYPE; MOY2 = Tab2 . &bou2 . MOYENNE ; FSIG2= Tab2 . &bou2 . ECART_TYPE; CV1 = FSIG1 /MOY1; CV2 = FSIG2 /MOY2; A0 = (LOG (BAUX * CV1 * CV2 + 1.)); A2 = (LOG (CV1*CV1+1.))*(LOG (CV2*CV2+1.)); AUX = (A0 / (BAUX * (A2**0.5)))*BAUX; iterer bou2; finsi; * normale + normale SI (et (ega typ1 loi_normale)(ega typ2 loi_normale)); iterer bou2; finsi; * Weibull + Weibull SI (et (ega typ1 loi_weibull_min) (ega typ2 loi_weibull_min)); TAU1=tab2 . &bou1 . tau; K1=tab2 . &bou1 . K; W1=tab2 . &bou1 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv1 = va1 / mo1; TAU1=tab2 . &bou2 . tau; K1=tab2 . &bou2 . K; W1=tab2 . &bou2 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv2 = va1 / mo1; aux = (1.063 - (0.004*baux) - (0.001*baux*baux) - (0.2*(cv1+cv2)) + (0.337*((cv1*cv1)+(cv2*cv2))) + (0.007*baux*(cv1+cv2)) - (0.007*cv1*cv2))*baux; iterer bou2; finsi; * gumbel + gumbel SI (et (ega typ1 loi_gumbel_max) (ega typ2 loi_gumbel_max)); aux = (1.064 - (0.069*baux) + (0.005*baux*baux))*baux; iterer bou2; finsi; * gumbel + normale ou normale standard SI (et (ega typ1 loi_gumbel_max) (ou (ega typ2 loi_normale_standard) (ega typ2 loi_normale))); aux = 1.031*baux; iterer bou2; finsi; * normale ou normale standard + gumbel SI (et (ega typ2 loi_gumbel_max) (ou (ega typ1 loi_normale_standard) (ega typ1 loi_normale))); aux = 1.031*baux; iterer bou2; finsi; * weibull + normale ou normale standard SI (et (ega typ1 loi_weibull_min) (ou (ega typ2 loi_normale_standard) (ega typ2 loi_normale))); TAU1=tab2 . &bou1 . tau; K1=tab2 . &bou1 . K; W1=tab2 . &bou1 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv1 = va1 / mo1; aux = (1.031 - (0.195*cv1) + (0.328*cv1*cv1))*baux; iterer bou2; finsi; * normale ou normale standard + weibull SI (et (ega typ2 loi_weibull_min) (ou (ega typ1 loi_normale_standard) (ega typ1 loi_normale))); TAU1=tab2 . &bou2 . tau; K1=tab2 . &bou2 . K; W1=tab2 . &bou2 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv1 = va1 / mo1; aux = (1.031 - (0.195*cv1) + (0.328*cv1*cv1))*baux; iterer bou2; finsi; * uniforme + normale ou normale standard SI (et (ega typ1 loi_uniforme) (ou (ega typ2 loi_normale_standard) (ega typ2 loi_normale))); AUX = 1.023 * BAUX; iterer bou2; finsi; * normale ou normale standard + uniforme SI (et (ega typ2 loi_uniforme) (ou (ega typ1 loi_normale_standard) (ega typ1 loi_normale))); AUX = 1.023 * BAUX; iterer bou2; finsi; * exponentielle + normale ou normale standard SI (et (ega typ1 loi_exponentielle) (ou (ega typ2 loi_normale_standard) (ega typ2 loi_normale))); AUX = 1.107 * BAUX; iterer bou2; finsi; * normale ou normale standard + exponentielle SI (et (ega typ2 loi_exponentielle) (ou (ega typ1 loi_normale_standard) (ega typ1 loi_normale))); AUX = 1.107 * BAUX; iterer bou2; finsi; * lognormale + normale ou normale standard SI (et (ega typ1 loi_lognormale) (ou (ega typ2 loi_normale_standard) (ega typ2 loi_normale))); MOY1 = Tab2 . &bou1 . MOYENNE ; FSIG1= Tab2 . &bou1 . ECART_TYPE; CV1 = FSIG1 /MOY1; AUX = (CV1/((LOG (CV1*CV1+1.))**0.5))*BAUX; iterer bou2; finsi; * normale ou normale standard + lognormale SI (et (ega typ2 loi_lognormale) (ou (ega typ1 loi_normale_standard) (ega typ1 loi_normale))); MOY1 = Tab2 . &bou2 . MOYENNE ; FSIG1= Tab2 . &bou2 . ECART_TYPE; CV1 = FSIG1 /MOY1; AUX = (CV1/((LOG (CV1*CV1+1.))**0.5))*BAUX; iterer bou2; finsi; * normale standard + normale SI (et (ega typ1 loi_normale_standard) (ega typ2 loi_normale)); iterer bou2; finsi; * normale + normale standard SI (et (ega typ2 loi_normale_standard) (ega typ1 loi_normale)); iterer bou2; finsi; * gumbel + weibull SI (et (ega typ1 loi_gumbel_max) (ega typ2 loi_weibull_min)); TAU1=tab2 . &bou2 . tau; K1=tab2 . &bou2 . K; W1=tab2 . &bou2 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv1 = va1 / mo1; aux = (1.064 + (0.065*baux) + (0.003*baux*baux) - (0.21*cv1) + (0.356*cv1*cv1) - (0.211*baux*cv1))*baux; iterer bou2; finsi; * weibull +gumbel SI (et (ega typ2 loi_gumbel_max) (ega typ1 loi_weibull_min)); TAU1=tab2 . &bou1 . tau; K1=tab2 . &bou1 . K; W1=tab2 . &bou1 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv1 = va1 / mo1; aux = (1.064 + (0.065*baux) + (0.003*baux*baux) - (0.21*cv1) + (0.356*cv1*cv1) - (0.211*baux*cv1))*baux; iterer bou2; finsi; * gumbel + uniforme SI (et (ega typ1 loi_gumbel_max) (ega typ2 loi_uniforme)); aux = (1.055 + (0.015*baux*baux))*baux; iterer bou2; finsi; * uniforme + gumbel SI (et (ega typ2 loi_gumbel_max) (ega typ1 loi_uniforme)); aux = (1.055 + (0.015*baux*baux))*baux; iterer bou2; finsi; * gumbel + exponentielle SI (et (ega typ1 loi_gumbel_max) (ega typ2 loi_exponentielle)); aux = (1.142 - (0.154*baux) + (0.031*baux*baux))*baux; iterer bou2; finsi; * exponentielle + gumbel SI (et (ega typ2 loi_gumbel_max) (ega typ1 loi_exponentielle)); aux = (1.142 - (0.154*baux) + (0.031*baux*baux))*baux; iterer bou2; finsi; * gumbel + lognormale SI (et (ega typ1 loi_gumbel_max) (ega typ2 loi_lognormale)); MOY1 = Tab2 . &bou2 . MOYENNE ; FSIG1= Tab2 . &bou2 . ECART_TYPE; CV1 = FSIG1 /MOY1; aux = (1.029 + (0.001*baux) + (0.004*baux*baux) + (0.014*cv1) + (0.233*cv1*cv1) - (0.197*baux*cv1))*baux; iterer bou2; finsi; * lognormale + gumbel SI (et (ega typ2 loi_gumbel_max) (ega typ1 loi_lognormale)); MOY1 = Tab2 . &bou1 . MOYENNE ; FSIG1= Tab2 . &bou1 . ECART_TYPE; CV1 = FSIG1 /MOY1; aux = (1.029 + (0.001*baux) + (0.004*baux*baux) + (0.014*cv1) + (0.233*cv1*cv1) - (0.197*baux*cv1))*baux; iterer bou2; finsi; * uniforme + weibull SI (et (ega typ1 loi_uniforme) (ega typ2 loi_weibull_min)); TAU1=tab2 . &bou2 . tau; K1=tab2 . &bou2 . K; W1=tab2 . &bou2 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv1 = va1 / mo1; AUX = (1.061 - (0.237*cv1) - (0.005*baux*baux) + (0.379*cv1*cv1))*baux; iterer bou2; finsi; * weibull + uniforme SI (et (ega typ2 loi_uniforme) (ega typ1 loi_weibull_min)); TAU1=tab2 . &bou1 . tau; K1=tab2 . &bou1 . K; W1=tab2 . &bou1 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv1 = va1 / mo1; AUX = (1.061 - (0.237*cv1) - (0.005*baux*baux) + (0.379*cv1*cv1))*baux; iterer bou2; finsi; * exponentielle + weibull SI (et (ega typ1 loi_exponentielle) (ega typ2 loi_weibull_min)); TAU1=tab2 . &bou2 . tau; K1=tab2 . &bou2 . K; W1=tab2 . &bou2 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv1 = va1 / mo1; AUX = (1.147 + (0.145*baux) - (0.271*cv1) + (0.01*baux*baux) + (0.459*cv1*cv1) - (0.467*baux*cv1))*baux; iterer bou2; finsi; * weibull + exponentielle SI (et (ega typ2 loi_exponentielle) (ega typ1 loi_weibull_min)); TAU1=tab2 . &bou1 . tau; K1=tab2 . &bou1 . K; W1=tab2 . &bou1 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv1 = va1 / mo1; AUX = (1.147 + (0.145*baux) - (0.271*cv1) + (0.01*baux*baux) + (0.459*cv1*cv1) - (0.467*baux*cv1))*baux; iterer bou2; finsi; * lognormale + weibull SI (et (ega typ1 loi_lognormale) (ega typ2 loi_weibull_min)); TAU1=tab2 . &bou2 . tau; K1=tab2 . &bou2 . K; W1=tab2 . &bou2 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv2 = va1 / mo1; MOY1 = Tab2 . &bou1 . MOYENNE ; FSIG1= Tab2 . &bou1 . ECART_TYPE; CV1 = FSIG1 /MOY1; AUX = (1.031 + (0.052*baux) + (0.011*cv1) - (0.21*cv2) + (0.002*baux*baux) + (0.22*cv1*cv1) + (0.35*cv2*cv2) - (0.005*baux*cv1) -(0.174*baux*cv2) + (0.009*cv1*cv2))*baux; iterer bou2; finsi; * weibull + lognormale SI (et (ega typ2 loi_lognormale) (ega typ1 loi_weibull_min)); TAU1=tab2 . &bou1 . tau; K1=tab2 . &bou1 . K; W1=tab2 . &bou1 . W; AUX = W1 - TAU1; MO1 = (AUX*MAUX + TAU1); VA1 = (AUX*(VAUX**0.5)); cv2 = va1 / mo1; MOY1 = Tab2 . &bou2 . MOYENNE ; FSIG1= Tab2 . &bou2 . ECART_TYPE; CV1 = FSIG1 /MOY1; AUX = (1.031 + (0.052*baux) + (0.011*cv1) - (0.21*cv2) + (0.002*baux*baux) + (0.22*cv1*cv1) + (0.35*cv2*cv2) - (0.005*baux*cv1) -(0.174*baux*cv2) + (0.009*cv1*cv2))*baux; iterer bou2; finsi; * uniforme + exponentielle SI (et (ega typ1 loi_uniforme) (ega typ2 loi_exponentielle)); AUX = (1.133 + (0.029*BAUX*BAUX))*BAUX; iterer bou2; finsi; * exponentielle + uniforme SI (et (ega typ2 loi_uniforme) (ega typ1 loi_exponentielle)); AUX = (1.133 + (0.029*BAUX*BAUX))*BAUX; iterer bou2; finsi; * Uniforme + lognormale SI (et (ega typ1 loi_uniforme) (ega typ2 loi_lognormale)); MOY1 = Tab2 . &bou2 . MOYENNE ; FSIG1= Tab2 . &bou2 . ECART_TYPE; CV1 = FSIG1 /MOY1; AU = 1.019+(0.014*CV1)+(0.01*BAUX*BAUX)+(0.249*CV1*CV1); AUX = AU * BAUX; iterer bou2; finsi; * lognormale + uniforme SI (et (ega typ2 loi_uniforme) (ega typ1 loi_lognormale)); MOY1 = Tab2 . &bou1 . MOYENNE ; FSIG1= Tab2 . &bou1 . ECART_TYPE; CV1 = FSIG1 /MOY1; AU = 1.019+(0.014*CV1)+(0.01*BAUX*BAUX)+(0.249*CV1*CV1); AUX = AU * BAUX; iterer bou2; finsi; * exponentielle + lognormale SI (et (ega typ1 loi_exponentielle ) (ega typ2 loi_lognormale)); MOY1 = Tab2 . &bou2 . MOYENNE ; FSIG1= Tab2 . &bou2 . ECART_TYPE; CV1 = FSIG1 /MOY1; AX = 1.098+(0.003*BAUX)+(0.019*CV1)+(0.025*BAUX*BAUX); AX = AX+(0.303*CV1*CV1) - (0.437*BAUX*CV1); AUX = AX * BAUX; iterer bou2; finsi; * lognormale + exponentielle SI (et (ega typ2 loi_exponentielle )(ega typ1 loi_lognormale)); MOY1 = Tab2 . &bou1 . MOYENNE ; FSIG1= Tab2 . &bou1 . ECART_TYPE; CV1 = FSIG1 /MOY1; AX = 1.098+(0.003*BAUX)+(0.019*CV1)+(0.025*BAUX*BAUX); AX = AX+(0.303*CV1*CV1) - (0.437*BAUX*CV1); AUX = AX * BAUX; iterer bou2; finsi; fin bou2; fin bou1; * calcul de la matrice triangulaire inferieure * par la methode de cholesky lr1=laux;; tab= table; repe bou1 nbva; tab . &bou1=table; repe bou2 &bou1; si (ega &bou1 &bou2); sinon; finsi; fin bou2; fin bou1; tab_2=table; repe bou1 nbva; repe bou2 (nbva); baux =tab . &bou1 . &bou2; si (ega &bou1 &bou2); si (ega &bou1 1); tab_2 . &bou2=table; tab_2 . &bou2 . &bou1 = (baux ** 0.5); iterer bou2; sinon; aux1=0; repe bou3 (&bou1 - 1); aux2 = tab_2 . &bou1 . &bou3; aux1 = aux1 + (aux2 * aux2); fin bou3; aux3= (baux -aux1) ** 0.5; tab_2 . &bou2 . &bou1 = aux3; iterer bou2; finsi; finsi; aux1=0; si (ega &bou1 1); tab_2 . &bou2 = table; aux1 = baux / tab_2 . 1 . 1; tab_2 . &bou2 . 1 = aux1; iterer bou2; sinon; si (< &bou2 &bou1); iterer bou2; finsi; repe bou4 (&bou1 - 1); aux2 = tab_2 . (&bou1) . &bou4; aux3 = tab_2 . &bou2 . &bou4; aux1 = aux1 + (aux2 * aux3); fin bou4; aux5 = tab_2 . (&bou1 ). (&bou1 ); aux4 = baux - aux1 / aux5; tab_2 . &bou2 . &bou1 = aux4; iterer bou2; finsi; fin bou2; fin bou1; repeter bou1 nbva; repeter bou2 nbva; si (<eg &bou2 &bou1); sinon; finsi; fin bou2; fin bou1; tab1 . matrice_de_decorrelation =lr2; finsi; finsi; *Transformation de X vers U SI ( tab1 . transformation_directe); REPE BOU1 NBVA; TVAI=tab2 . &bou1 . typva; TPARI=tab2 . &bou1; *loi normale centree reduite SI (EGA TVAI loi_normale_standard); ITERER bou1; FINSI; *loi normale SI (EGA TVAI loi_normale); MOY = TPARI . MOYENNE ; FSIG= TPARI . ECART_TYPE; AUX=(XI-MOY)/FSIG; ITERER bou1; FINSI; *loi lognormale SI (EGA TVAI loi_lognormale); SI (> XI 0.); MOY = TPARI . MOYENNE ; FSIG= TPARI . ECART_TYPE; MOY2 = MOY * MOY; FSIG2=FSIG * FSIG; *N pour ecart-type et moyenne de la loi normale associe NSIG2=log((MOY2+FSIG2)/MOY2); NSIG = NSIG2 ** 0.5; NMOY = log(moy2/((MOY2+FSIG2)** 0.5)); aux=(log xi - NMOY) / NSIG; finsi; ITERER bou1; finsi; * cas general tpar2=table; tpar2 . typva = loi_normale_standard; fin bou1; si (existe tab1 matcov); lry=tab1 . matrice_de_decorrelation; si (EGA cc 2); _p0=0 0; sinon; _p0=0 0 0; finsi; si (neg nbva 1); repe bou12 (nbva - 1); aux2 = aux2 et nature discret); fin bou12; finsi; y1 = resou bb aux2; repe bou13 nbva; fin bou13; y=y2; finsi; tab1 . points_espace_reference =y; finsi; *transformation de U vers X; SI ( non (tab1 . transformation_directe)); si (existe tab1 matcov); lry=tab1 . matrice_de_decorrelation; si (EGA cc 2); _p0=0 0; sinon; _p0=0 0 0; finsi; si (neg nbva 1); repe bou12 (nbva - 1); aux2 = aux2 et nature discret); fin bou12; finsi; y1 = bb * aux2; repe bou13 nbva; fin bou13; x=y2; finsi; REPE BOU2 NBVA; TVAI=tab2 . &bou2 . typva; TPARI=tab2 . &bou2; *loi normale centree reduite SI (EGA TVAI loi_normale_standard); ITERER bou2; FINSI ; *loi normale SI (EGA TVAI loi_normale) ; MOY = TPARI . MOYENNE ; FSIG= TPARI . ECART_TYPE; AUX=XI * FSIG + MOY ; ITERER bou2 ; FINSI ; *loi lognormale SI (EGA TVAI loi_lognormale); MOY = TPARI . MOYENNE ; FSIG= TPARI . ECART_TYPE; MOY2 = MOY * MOY; FSIG2=FSIG * FSIG; *N pour ecarttype et moyenne de la loi normale associe NSIG2=log((MOY2+FSIG2)/MOY2); NSIG = NSIG2 ** 0.5; NMOY = log(moy2/((MOY2+FSIG2)** 0.5)); aux=exp (XI * NSIG + NMOY) ; ITERER bou2; finsi; tpar2=table; tpar2 . typva = loi_normale_standard; fin bou2; tab1 . points_espace_physique=y; finsi; finproc;
© Cast3M 2003 - Tous droits réservés.
Mentions légales