Je n'arrive pas à résoudre cet exercice ...
1)Comment simuler une épreuve de Bernoulli dont le succès S a une probabilité p ?
Réponse : 1) On peut simuler une épreuve de Bernoulli dont le succès S a une probabilité p en tirant au hasard un nombre entier entre 0 et 1 dans une liste composée de z nombres avec p*z nombres 1 et de (1-p)*z nombres 0.
On appellera "échec E" l'évènement "obtenir 0" et "succès S" l'évènement "obtenir 1".
Par exemple, dans une liste de 5 nombres, avec une probabilité de succès p= (3/5), on aura:
- 5*(3/5) = 3 nombres 1
- (1-(3/5))*5= 2 nombres 0.
2)a. Ecrire un algorithme permettant de simuler un schéma de Bernoulli de paramètres n et p, à l'aide de la formule établie au 1), et qui affiche la valeur de la variable X qui compte les succès.
Réponse : On considère que z=10.
Entrer N
Enter P
P*10 --> S
Pour I allant de 1 à N
Choisir un nombre entre 1 et 10 --> F
Si F < ou égal à S
Alors
X+1-->X
Fin
Afficher X
b. Le programmer sur une calculatrice ou un logiciel.
C'est là que ça ne marche pas: l'algorithme m'affiche en sortie soit 0 soit 1 soit rien du tout quelles que soient les valeurs de P et de N...
3) Ecrire un algorithme pour simuler la répétition N fois du schéma de Bernoulli précédant et qui calcule la moyenne des valeurs de X obtenues.
Vu que le précédant algorithme ne marche pas, je n'ai pas tenté... On aurait donc N*n épreuves de Bernoulli ??
4) Quand N devient grand, que peut on dire de cette moyenne ?
A mon avis elle doit se stabiliser.
Voilà, si j'ai fait des erreurs, merci de me corriger... et pouvez vous me dire pourquoi mon algorithme ne marche pas ?
Merci beaucoup d'avance ! :)
Au niveau syntaxe, il convient :
- d'initialiser la variable X à 0 (avant l'instruction pour);
- de rajouter le Fin de la boucle Pour(après le Fin du Si)
Ah oui c'est vrai ça fonctionne mieux comme ça !
Merci
Mais du coup, pour la question 3, on aurait donc N répétitions de n épreuves de Bernoulli, donc N*n épreuves ? On aurait donc une deuxième boucle "Pour" ?
c'est ça une deuxième boucle :
POUR J de 1 à N
et une variable supplémentaire S
qui fait la somme des X
(à la place du afficher X atuel : S = S + X)
puis on affiche en fin de programme
la moyenne : S/N
salut
Ah je crois que j'ai trouvé :
Si p=1/n, on a n=1/p et 1=n*p= succès
Donc on effectue un tirage entre 1 et 1/p et si le nombre tiré est égal à 1, il y a succès.
L'algorithme devient donc :
Entrer N
Entrer P
1/P -->D
0--> X
Pour I allant de 1 à N
Choisir un nombre entre 1 et D --> F
Si F = 1
Alors
X+1-->X
FinSi
FinPour
Afficher X
Et le deuxième algorithme : soit R le nombre de répétitions, afin de ne pas mélanger les N
Entrer R
Entrer N
Entrer P
1/P -->D
0--> X
Pour J allant de 1 à R
Pour I allant de 1 à N
Choisir un nombre entre 1 et D --> F
Si F = 1
Alors
X+1-->X
FinSi
FinPour
S+X-->X
FinPour
Afficher X
Je me suis encore trompé !
Pour le deuxième :
Entrer R
Entrer N
Entrer P
1/P -->D
0--> X
Pour J allant de 1 à R
Pour I allant de 1 à N
Choisir un nombre entre 1 et D --> F
Si F = 1
Alors
X+1-->X
FinSi
FinPour
S+X-->X
FinPour
Afficher S/R
Mais pour le tirage d'un nombre, dois je mettre la fonction RandInt de ma calculatrice ou la fonction RandNorm ?
En fait quand je met la fonction RandInt (tirer un nombre entier), ça ne marche pas pour toutes les probabilités : par exemple pour p=0,3 donc p=3/10 , on a n=10/3 mais 10/3 n'est pas un nombre entier, donc l'algorithme ne veut pas tirer un nombre entier entre 1 et 10/3...
Mais si je met RandNorm, j'ai peur que ça ne fausse les résultats !
on reviendra sur la manière de simuler un tirage avec une probabilité p et 1-p...
Pour l'instant, corrige ton algorithme au niveau logique :
- l'initialisation à 0 de S n'est pas faite ;
- l'initialisation à 0 de X est mal placée ;
- le S+X-->X est faux.
pour voir simuler une loi de Bernoulli de paramètre p : il faut calculer
x = p + Aléa (Aléa renvoie un nombre de l'intervalle [0, 1])
et prendre :
s = Ent(x) (Ent : fonction partie entière)
alors :
si 0 =< aléa =< 1 - p alors p =< x =< 1 donc s = 0 (1 si x = p)
si 1 - p =< aléa =< 1 alors 1 =< x =< 1 + p donc s = 1
tout à fait ....
mais ::
s = Ent(p + alea)
fait tout en une instruction .... d'où un gain de temps machine ...
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :