MATH_LoiNormale [Statistiques]
Par Teddy Linet (Math4D v1)
Nouvelle recherche
Si (Faux)
` MATH_LoiNormale [Teddy Linet 10/02]
` ---------------------------------------------
` ATTENTION : Méthode récursive
` ---------------------------------------------
` Rappels mathématiques :
` Loi normale (ou loi de Gauss ou de Laplace-Gauss)
` La méthode calcule la probabilité d'une loi normale centrée réduite
` entre O et x
` La méthode utilise une approximation d'environ 10^-5
` Som:=x+(((-x^2/2)/1)*(x/3))+((((-x^2)^2/2)/2)*(x/5))+;;;
` P:=Som*((2*Pi)^0;5)
` Pour calculer un alpha entre -x et +x :
` alpha:=1-(MATH_LoiNormale(x)*2)
` alpha représente la probabilité que la variable ne se trouve pas entre -x et+x
` ---------------------------------------------
` MATH_LoiNormale admet deux syntaxes :
`
` Pour calculer P
` MATH_LoiNormale(x;"P" {;Moyenne {;EcartType}}}) -> Numérique
` x (Numérique) Valeur du x
` "P" (Chaine fixe) Option calcul de P ou constante Normale_p
` Moyenne (Numérique) Valeur de la moyenne, par défaut =0
` EcartType (Numérique) Valeur de l'écart type, par défaut =1
` Résultat (Numérique) Probabilité que la variable se trouve entre 0 et x
`
` Pour calculer Z
` MATH_LoiNormale(alpha;"Z" {;Moyenne {;EcartType}}) -> Numérique
` alpha (Numérique) Valeur de alpha
` "Z" (Chaine fixe) Option calcul de Z ou constante Normale_Z
` Moyenne (Numérique optionnel) Valeur de la moyenne, par défaut =0
` EcartType (Numérique optionnel) Valeur de l'écart type, par défaut =1
` Résultat (Numérique) Ualpha, abscisse sur la ligne en fonction de alpha
` ---------------------------------------------
` MATHERROR
` 0 -> Pas d'erreur
` -1 -> Alpha n'est pas correct (pas une proportion)
` +1 -> Alpha trop petit, rectifié automatiquement
Fin de si
C_ENTIER LONG(MATHERROR)
MATHERROR:=0
C_ENTIER($i)
C_REEL($0;$1;$3;$4;$t;$vFact_F;$vSomme_F;$vCalc_F;$vMoyenne_F;$vEcartType_F)
C_REEL($vUalpha_F;$vAlpha_F;$vMin_F;$vMax_F)
C_ALPHA(32;$2)
$0:=0 ` Par défaut
Au cas ou
: (Nombre de parametres<=2) ` Centré et réduit (par défaut)
$vMoyenne_F:=0
$vEcartType_F:=1
: (Nombre de parametres<=3) ` Réduit, pas centré => On centre
$vMoyenne_F:=$3
$vEcartType_F:=1
: (Nombre de parametres<=4) ` Ni réduit, ni centré => On centre et on réduit
$vMoyenne_F:=$3
$vEcartType_F:=Abs($4) ` Evitons les erreurs de calcul (toujour positif normalement)
Fin de cas
Si ($2#"@z@") ` Il ne s'agit pas de l'option Z => option P
` Calcul de $t, centré et réduit en fonction de x ($1), la moyenne et l'écarttype
$t:=Abs(($1-$vMoyenne_F)/$vEcartType_F)
$vSomme_F:=$t
$vFact_F:=$t
$i:=0
$vCalc_F:=-($t^2)/2
Tant que (Abs($vFact_F)>(10^-7))
$i:=$i+1
$vFact_F:=$vFact_F*$vCalc_F*(2*$i-1)/(2*$i+1)/$i
$vSomme_F:=$vSomme_F+$vFact_F
Fin tant que
$0:=Arrondi($vSomme_F/((2*Pi )^0,5);4) ` Arrondi à 4 décimales car limites de l'approximation
Sinon ` Option Z => calcul de Ualpha par dichotomie (utilise l'option P)
$vAlpha_F:=$1 ` Un alpha doit toujours être positif
Au cas ou
: (($vAlpha_F>1) | ($vAlpha_F<0))
MATHERROR:=-1 ` Alpha doit être compris entre 0 et 1
: ($vAlpha_F<0,0001)
MATHERROR:=1 ` "Alpha trop petit"
$vAlpha_F:=0,0001
Fin de cas
Si (MATHERROR>=0)
$vUalpha_F:=3,89059 ` Soit supérieur à un alpha à 0,0001
$vMin_F:=0
$vMax_F:=$vUalpha_F
Repeter
$vCalc_F:=1-(MATH_LoiNormale ($vUalpha_F;"P";$vMoyenne_F;$vEcartType_F)*2)
Si ($vAlpha_F>$vCalc_F) ` Dichotomie car fonction linéairement croissante
$vMax_F:=$vUalpha_F ` Trop grand => on divise par 2
Sinon
$vMin_F:=$vUalpha_F ` Trop petit => on rajoute la moitié
Fin de si
$vUalpha_F:=$vMin_F+(($vMax_F-$vMin_F)/2)
Jusque (Abs($vCalc_F-$vAlpha_F)<(10^-5))
$0:=Arrondi($vUalpha_F;4) ` Arrondi à 4 décimales car limites de l'approximation
Fin de si
Fin de si