Dans la boîte il y a n boules blanches et p boules noires.
On tire une boule :
– si elle est blanche on arrête.
– si elle est noire on remet une boule blanche dans la boîte, et on retire une boule à nouveau.
Schématisons les tirages posssibles successifs par un arbre :
Arrêt après le tirage n° k, il faut distinguer :
* si k = 1 on a tiré une boule blanche du 1
ercoup, sans tirer de boulr noire avant
* si k
≥2, on a tiré k – 1 fois une boule noire donc il a été retiré de la boîte k – 1 boules noires, que l'on a remplacé par k – 1 boules blanches avant de tirer une boule blanche.
Les rapports indiquent les probabilités du tirage d'une boule blanche (Bla) et du tirage d'une boule noire (No) à chaque tirage d'une boule.
Sont indiquées à chaque tirage d'une boule le nombre de boules blanches et le nombre de boules noires présentes dans la boîte.
n Bla, p Noi
Bla Noi
n
n + p p
n +p
Arrêt X=1
Bla Noi
n + 1
n + p p−1
n + p
Arrêt X=2
n+1, p – 1
n+2, p – 2
Bla Noi
n + 2
n + p p−2
n + p
Arrêt X=3
n+k – 1, p – k+1
Bla n + k − 1
n + p
Arrêt X=k
n+k – 2, p – k+2
p−k+2
Noi n+p
Remarque :
le nombre total de boules n+p dans la boîte ne change pas, chaque noire tirée étant remplacée par une blanche.
Si k
=
1 la probabilité est : Pr(X = 1) = n
n + p (on n'a tiré aucune boule noire avant)
Si k
≥2, (on a déjà tiré k – 1 boules noires). Avant le k – 1
ièmetirage (de la dernière boule noire tirée avant la blanche) il y avait n+k – 2 boules blanches et p – k+2 boules noires dans la boîte (on avait déjà tiré k – 2 boules noires), et la k – 1
ièmeboule noire avait une probabilité p−k+2
n + p d'être tirée.
Si k
≥2, les évènements successifs "tirer une boule noire" se produisant les uns après les autres et l'évènement "tirer une boule blanche" se produisant encore après, les probabilités se multiplient :
Pr(X = k) = p
n+p
×p−1 n+p
×p−2
n+p
× ... ×p−k +2 n+ p
×n+ k −1
n+p pour 2
≤k
≤p+1
(au mieux on arrête au 1
ertirage, ayant tiré une boule blanche et au pire tire une boule noire aux p premier tirage et on tire forcémént une boule blanche car il n'y a plus de boule noire – les boules noires tirées ayant été remplacées pae des blanches – )
Pr(X = k) est le produit des p − j
n+ p (pour j=0 à k – 2), multiplié par n + k − 1 n+p .
D'où le remplissage du tableau Prob des probabilités et l'initialisation des fréquences :
Prob[1]=n/(n+p) Freq[1] = 0 somme=n/(n+p) de k=2 à p+1 produit=1 si(k ≠ 1)
de j=0 à k
–
2
produit=produit*(p – j)/(n+p) Prob[k]=produit*(n+k – 1)/(n+p) Freq[k] = 0;
somme=somme + Prob[k]
Expériences :
Au passage on calcule la
somme des probabilités pour
s'assurer quelle est égale à 1, il
suffit de l'afficher ensuite.
de j=1 à NbExp
n1=(nbre de boules Blanches)=n n2=(nbre de boules Noireses)=p NbTirages=0
Arret=faux
tant que (pas Arret)
NbTirages augmente de 1
alea=entier aléatoire de 1 à n+p inclus si (alea
<
=n1)
Arret=vrai sinon
n1 augmente de 1 n2
diminue de 1
Freq[NbTirage]++;
de k=1 à p+1
Freq[k] = Freq[k] / NbExp;
On a alors les fréquences relatives dans le tableau Freq.
Il suffit alors de mettre en place les affichages prévus et les calculs d'espérances et variances théoriques (avec le tableau Prob des probabilités) et observées (avec le tableau Freq des fréquences relatives) avec leurs affichages respectifs.
Pour chaque expérience, on a au départ n1=n boules blanches et n2=p boules noires mais chaque noire tirée (alea > n1) sera remplacée par une blanche (n1++ et n2 –
–), tant qu'on ne tire pas une blanche, et quand on tire une blanche (alea <= n1) on s'arrête. On compte le nombre de tirages effectués (NbTirage).
alea est un entier aléatoire de 1 à n+p
inclus car il y a toujours n+p boules
dans la boîte à chaque tirage de boule.
#pragma hdrstop
#include <iostream>
#include <iomanip>
#include <math.h>
#include <time.h>
using namespace std;
// Variables globales
double Prob[100],Freq[100];
int n,p;
unsigned int NbExp;
double Somme,EspTh,VarTh EspObs,VarObs;
//---Declaration des fonctions void Esperances();
void Variances();
void Entrees();
void InitProbasFreq();
void Simulation();
void Affichage();
//---
#pragma argsused
int main(int argc, char* argv[]);
{
srand(time(NULL));
cout<<"Dans une boite il y a n boules blanches et p boules noires";
cout<<endl;
cout<<"On tire une boule');
cout<<" si elle est blanche on arrete');
cout<<endl;
cout<<" si elle est noire on remet une boule blanche dans la boite');
cout<<endl;
cout<<" et on retire une boule a nouveau');
cout<<endl;
cout<<"La variable aleatoire X est le nombre de tirages necessaires');
cout<<endl; cout<<"pour sortir une boule blanche');
cout<<endl;
Entrees();
InitProbasFreq();
Simulation();
Affichage();
cin.sync();
cin.get();
return 0;
}//--- void Esperances();
{
EspTh=0;EspObs=0;
for (int k=1;k<=p+1;k++) {
EspTh=EspTh+k*Prob[k];
EspObs=EspObs+k*Freq[k];
} }
//--- void Variances();
{
VarTh=0;VarObs=0;
for (int k=1;k<=p+1;k++) {
VarTh=VarTh+k*k*Prob[k]; // on calcule l'espérance du carré de X VarObs=VarObs+k*k*Freq[k]; // --- idem --- }
VarTh=VarTh-EspTh*EspTh; // on applique le théorème de KOENIG VarObs=VarObs-EspObs*EspObs; //--- idem --- }
//--- void Entrees();
{
cout<<"Entrer n : ";
cin>>n;
cout"Entrer p : ");
cin>>p;
cout<<"Pour la simulation de E expériences (E grand), entrer E : ";
cin>>NbExp);
}
//--- void InitProbasFreq();
{
double Prod;
for (int k=1;k<=p+1;k++) {
Prod=1;
if (k>1) then
{ for int i=0 to k-2 do
Prod=Prod*(b-i)/(a+b); } Pr[k]=Prod*(a+k-1)/(a+b);
F[k]=0;
Somme+=Pr[k]
} }
//--- void Simulation();
{
int BoulesTirees,no;
bool arret;
int no,nbBlanches;
for (unsigned int j=1;j<=NbExp;j++) {
BoulesTirees=0;
arret=false;
while(!arret) {
no=rand()%(a+b)+1;
BoulesTirees++;
if (no<=nbBlanches) arret=true
else {
nbBlanches++; // inutile de décréménter le nombre de boules } // noires restant car on ne s'en sert pas, le } // nombre de boules dans la boite restant à n+p F[BoulesTirees]++;
}
for (int k=1;k<=p+1;k++)
F[k]=F[k]/NbExp; // Calcul des fréquences relatives
}//--- void Affichage();
{
cout<<<setw(7)<"X : ";
for (int k=1;k<=p+1;k++) { cout<<setw(7)<<k;
cout<<endl;
Som=0;
cout<<" Prob : ";
for (int k=1;k<=p+1;k++) {
cout<<setw(7)setprecision(4)<<Pr[k];
}
cout<<endl;
cout<<" Freq : ";
for (int k=1;k<=p+1;k++)
cout<<setw(7)setprecision(4)<<F[k];
cout<<endl;
cout<<"Somme des probas : "<<setw(12)setprecision(7)<<Somme;
Esperances();
Variances();
cout<<"Esp Theorique : "<<setw(12)setprecision(7)<<EspTh;
cout<<"Esp Observee : "<<setw(12)setprecision(7)<<EspObs;
cout<<"Variance Theorique : "<<setw(12)setprecision(7)<<VarTh;
cout<<"Variance Observee : "<<setw(12)setprecision(7)<<VarObs;
}//---