Probleme de programmation d'une loi normale e

Fermé
melanie59 - 6 déc. 2007 à 10:26
 kawtar - 21 févr. 2015 à 14:12
Bonjour,

Je voudrais simuler la loi normale N(0,1) en php mais je ne vois pas comment faire
merci d'avance pour votre aide
A voir également:

21 réponses

algo n°1
A=0
C=2*3,14 c'est à dire PI
1 iF a+1 ALORS : a=0 ET DELIVRER w2
2 GENERER UN NOMBRE ALEATOIRE U QUI SUIT LA LOI UNIFORME SUR L'INTERVALLE 0 A 1
3 GENERER UN NOMBRE ALEATORE V QUI SUIT LA LOI EXPONENTIELLE AVEC LAMBA=1
4 B=(2*V)^1/2 C'EST A DIRE LA RACINE CARREE
5 U=C*U
6 w1= B*COS(U)
7 W2=B*SIN(U)
8 A=1
9 DELIVRER W1

QUELQUES EXPLICATIONS/
W1 et W2 sont des variables aleatoires qui suivent la loi normale avec une moyenne de 0 et une variance de 1
Cet algorithme suit la methode de Box et Muller
pour obtenir un nombre aleatoire qui suit la loi exponentielle avec parametre 1, on utilise la methode de l'inversion comme suit:
1 GENERER UN NOMBRE ALEATOIRE U QUI SUIT LA LOI UNIFORME SUR L4INTERVALLE DE 0 A 1
2 V+-LOG NEPPERIEN DE U
3 DELIVRER V

GOOD LUCK AND KEEP ON SMILING
5
Il y a une autre methode pour generer la loi normale centree et reduite et qui repose sur le theoreme de la limite centrale.
1 generer un nombre important de variables aleatoires par ordinateur. Par definition ces v.a. suivent la loi uniforme sur |0,1]
2 calculer la moyenne et l"ecart type de ces variables ( c'est des valeurs proches de 1/2 et 1/12)
3 'la moyenne calculee moins 0.5) divisé par l'ecart type suit la loi normale N'0,1)
NB L'ecart type dont il est question est l'ecart type théorique et non l"écart type des valeurs générées.
Si vous avez un probleme je peux vous ecrire le programme en basic et a vous de le convertir en php.
0
est ce que possible de créer une code en c de la loi normale mais avec la méthode de monte Carlo
merci d'avance
0
Bonjour

Je suppose que ton problème est d'ordre mathématique plutôt que de programmation
va voir sur wikipedia
https://fr.wikipedia.org/wiki/Loi_normale#Fonction_de_r.C3.A9partition
on t'indique comment simuler une loi normale avec 2 variables aléatoires de loi uniforme sur ]0,1[
0
tu peux utiliser le theoreme de la limite centrale pour cela tu generes un nombre important de nombres aleatoires tu calcules leur xbar (moyenne) et tu soustraits l'esperance mathematique et tu divise par l'ecart type. Les nombres generes par l'ordinateur suivent la loi uniforme sur [0,1] donc l'esperance =1/2 et la variance=1/12, l'ecart type = la racine carree de la variance.
0
oui, tu fais une boucle sur 100000 rnd(), c'est pratique et rapide ! La formule de wikipedia te donne directement un résultat
0
Concernant la reponse apportée par le pere je trouve que 100000 est un nombre exagéré. en simulation on prend tout simplement 12 ce qui evite de faire la division Sigma/racine de n. Personnellement je trouve que n=30 est suffisant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Personnellement je trouve que n=30 est suffisant
tu trouves que ça suffit suivant quel critère ? Et quel est l'intérêt de prendre une approximation quand on a une formule exacte ?
0
Par tous les standards, n=30 est suffisant. Pour information les tables de la loi de Student (loi des petits echantillons s'arrete à 30), audela elle ne fait que mimer la loi normale. de plus il y a d'autres algorithmes qui generent la loi normale ex: la methode de Muller.
Nb n=30 est effectivement une approximation mais c'est aussi le cas de n=100000 ou n=10¨12 car le theoreme de la limite centrale est vraie (mathematiquement) lorsque n=infini.
0
Jimy6000 Messages postés 243 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 22 novembre 2015 39
10 déc. 2007 à 07:24
Bonjour
Je viens d'essayer d'ouvrir ce lien ci dessous mais impossible d'acceder à la page :(
http://www.commentcamarche.net/forum/affich 4238210 probleme de programmation d une loi normale e
est ce que quelqu'un peut me dire où trouver un exemple equivalent ? ( de loi.normale )
Merci
Bye
Jimmy
0
Qu'entends tu par un exemple de loi normale?
0
Jimy6000 Messages postés 243 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 22 novembre 2015 39
11 déc. 2007 à 02:58
Bonjour Vblover
J'entends par un exemple de tableau avec un téléchargement possible pour me donner une idée du genre de formule....
comme le lien du dessus -que je n'arrive pas a ouvrir- si tu as une adresse viable elle sera bienvenue :))
Merci d'avance
0
Jimy6000 Messages postés 243 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 22 novembre 2015 39
13 déc. 2007 à 02:58
Bonjour Vb Lover :)
Et gramd merci pour ton aide.
très bien expliqué et détaillé, on ne peut mieux répondre cependant j'ai une petite question; comment fait on pour intégrer tout ça dans une formule excel ? ( je rappelle au passage que cela ne fait pas longtemps que j'utilise Excell :-s )
merci encore
0
Bon,tu devrais t'en sortir facilement avec excel. je suppose tu devrais passer par une macro VBA. Je n'ai jamais utilisé Excel avec des macros, mais l'algorithme que je t'ai proposé peut etre tres facilement transposé en VBA. La seule difficulté pourrais etre de generer un nombre aleatoire qui suit la loi uniforme. pour cela tu clique sur fonctions (fx) et tu choisis fonctions mathématiques ou statistiques, surement tu trouveras quelque chose comme alea ou aleatoire ou Rnd ou rand ou random.
0
Jimmy, tu t'en sors avec VBA? Sinon je peux t'ecrire le code en Visual basic Cela devrait marcher mais toujours est-il je ne saurais pas te dire comment appeler le tout a partir d'excel.
0
Jimy6000 Messages postés 243 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 22 novembre 2015 39
21 déc. 2007 à 08:49
Encore moi
Je n'ai pas tres bien saisi le "NOMBRE ALEATOIRE U QUI SUIT LA LOI UNIFORME SUR L'INTERVALLE DE 0 A 1"
et aussi comment intégrer cette formule ma plage de donnée ?
0
Jimy6000 Messages postés 243 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 22 novembre 2015 39
21 déc. 2007 à 04:25
Bonjour Vb Lover.
Non je ne m'ensors pas :s je ne suis pas excel lent en vba :$
Si cela ne t'embète pas de mettre en forme sous vba :$
J'ai bien essayé mais cela n'a pas tellement bien marché et c'est plein d'erreurs
Désolé pour la réponse tardive j'étais pas mal occupé ces temps ci....
Merci de ton aide.
:) Keep smiling
Bye... Jimmy
0
Ne t'occupes pas des détails. Tout nombre générer par l'ordinateur ( avant toute transformation voulue par le programmeur) suit la loi uniforme sur l'intervalle [0,1]. C'est le cas de la fonction VB RND. Ainsi, si tu ecris par exemple X= RND(un nombre quelconque), X prendra une valeur entre 0 et 1. C'est aussi simple que ca. exemple:
X=RND(1)
Le nombre entre parenthese est obligatoire mais n'aurait aucune signification en dehors de la fonction RANDOMIZE(). En réalité il est utilisé en tant que semence pour débuter le processus de génération de nombres aléatoires. Tout cela tu t'en fous royalement.
Pour ce qui est d'une version VB, cet aprés midi je vais essayer de retrouver un vieux morceau de programme que j'ai ecris il y a 2 ans pour expliquer la simulation a mes étudiants. Toutefois je tiens a apporter la précision suivante: Le programme est en VB pas VBA. Je ne pense pas qu'il y a une différence, mais VBA j'y n'ai jamais touché.
Keep on smiling help is on the way.
0
Suite a mon message precedent, je viens de verifier qu'EXCEL est bien capable de générer des nombres aléatoires entre 0 et 1. Il a la fonction ALEA(). exemple tu introduis dans n'importe quelle cellule la formule suivante:
=ALEA() puis tu tapes sur entrée, tu auras ainsi un nombre entre 0 et 1
RND vient de l'anglais RANDOM qui veut tout simplement dire ALEATOIRE en francais.
0
Jimy6000 Messages postés 243 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 22 novembre 2015 39
27 déc. 2007 à 03:53
Merci VB L
I'm quiet good in English :p
Bien meilleur qu'en VBA lol :)
je reviens juste apres le réveillon dur dur ! je pose tout cela dans une macro et reviens te dire si cela fonctionne :)
Merci encore de ta sollicitude
0
Bon, je pense que le plus simple serait de programmer la methode du theoreme de la limite centrale. grosso modo, ce theoreme stipule que si on prend un nombre n de variables aleatoires qui sont indépendantes et identiquement distribuées c'est a dire qu'elles suivent la meme loi de distribution, eh bien lorsque n tend vers plus l'infini, la distribution de la moyenne de ces n variables est tout simplement la loi normale. Remarque qu'aucune hypothese n'a ete emise quant a la distribution d'origine des n variables aléatoires. Autrement dit le theoreme est valide pour n'importe qu'elle loi. deuxio, Tu as du remarqué le debat qui s'est instauré entre le pere et moi meme en repandant a melanie59, lequel debat portait sur la valeur de n. Quand est-ce peut on dire que n est assez grand pour pouvoir invoquer le theoreme de la limite centrale. Les statisticiens ont deja repondu a la question: Si n est superieur a 30 alors n est assez grand et par consequent on peut invoquer le dit theoreme.
Je t'ai deja dit que les nombres aleatoires géneres par l'ordinateur suivent la loi uniforme sur l'intervalle (0,1). Du cours de probabilité tu peux trouver que l'esperance mathematique de cette loi est 1/2 alors que la variante est 1/12.
soit {XI} une famille de n éléments qui suivent la loi uniforme sur [0,1], donc E[Xi]=1/2 quelquesoit i=1,2... n
et Var[Xi]=1/12 quelquesoit i=1,2....n
Soit Tn=la somme des Xi
E[Tn]=n*E[Xi]=n/2
Var=[Tn]=n*var[Xi]=n/12
Maintenant creons une variable aleatoire Mn=Tn/n. Remarque que Mn est tout simplement la moyenne des Xi. En supposant que n est assez grand on peut invoquer le theoreme de la limite centrale et dire que Mn suit la loi normale.
Quels sont les parametres de cette distribution? Autrement dit quelles sont les valeurs de E[Mn] et Var[Mn]?
E[Mn]=e[Tn]/n=(n/2)/n=1/2
var[Mn)=var[Tn]/(n*n)= 1/(12*n)
Résume:
Mn suit la loi normale d'esperance mathematique 1/2 et de variance 1/(12*n)
Ou cela nous conduit_on?
Soit Z=(Mn-E[Mn])/racine carree de Var(Mn)
Z suit la loi normale centree et reduite autrement dit d'esperance mathematique 0 et de variance =1
Compliqué? oui et non. Voila ce qu'on va faire: generer un grand nombre de variables aleatoires et prendre leur moyenne qui va suivre la loi normale centree et reduite.
Voici le programme Vb pour faire cela
function normale01() as double
dim Tn as double, EX as double, VX as double
dim n as integer, i as integer
dim EM as double, VM as double, SVM as double
n=30 ' nombre de variable a generer
EX=1/2 ' l'esperance des Xi=1/2
VX=1/12 ' La variance des XI= 1/12
EM=1/2 ' L'esperance de Mn
VM=1/(12*N) ' La variance de Mn
SVM=sqrt(VM) ' L'ecart type de Mn
Tn=0 ' debut de la generation des n v.a initialiser leur somme a 0
for i=1 to n ' boucler autant de fois que la valeur de n
Tn=Tn+rnd(1) ' ajouter le nombre generer a la somme
next fin de la boucle
Mn=Tn/n calcul de la moyenne des nombres generes
normale01=(Mn-em)/SVM delivrer cette moyenne a laquelle on a soustrait la moyenne theorique et divisee par l'ecart type
end function
ET Voila c'est fait
0
Bonjour j'ai essayé ce programme et il me donne en moyenne 9.48. Cette valeur ne devrait pas être de 0 pour une loi normale centrée réduite ?
0
Jimmy
tout ce qui suit les apostrophes est une explication, donc tu peux te passer de les taper si tu dois ecrire le programme.
Il manque une apostrophe juste avant le mot delivrer a la ligne qui commence par normale01=. Tout comme l'explication continue sur la meme ligne pour inclure les mots ecart et type.
0
bonsoir,
je veux créer un programme d'optimisation en télécommunication en langage C et j'ai besoin de donner une configuration aléatoire au emplacements des sites et des mobiles en utilisant une loi uniforme
j'ai besoin de votre aide pour terminer mon programme

merci d'avance pour votre aide
0
merci
0
Fatima, Vois ma reponse numero 10. Elle est basee sur le theoreme de box muller. Linteret de celui-ci est de pouvoir generer une variable aleatoire qui suit la loi normale a peu de frais vu qu'on ne calcule qu'un cosinus et un snus. l'autre methode expliquee plus en detail plus loin necessite de generer un nombre consequent de nombres aleatoires pour en calculer et la moyenne et la variance.
0
s'il vous plait aider moi pour créer une base de donnée en language C .je le besoins pour mon projet merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
-1
je veux connaitre la rèponse à mon question pour mon projet:soit (o,r)=f(x,y)avec f(x,y)=la densitè de probabilitè de (X,Y) detèrminer la densitè se probabilitè de (o,r) en utilisant le lemme de box muller et merci
-1
Peux-tu expliquer un peu plus?
0