Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Espérance, ecart-type

Posté par
rdces
27-07-11 à 17:15

Bonjour.
Je souhaite faire un programme en C++ traitant un peu de probabilités.
Dans un premier temps, étant donné un tirage donné (par exemple, je sais pas moi, des notes dans une classe), j'aimerais pouvoir calculer l'espérance et l'écart-type.
Ca, je sais faire (je pense).
Je vous met un petit programme en C++, fait de tete (donc non testé) qui doit pouvoir faire ca (avec beaucoup de commentaires )

int main()
{
     int effectif(0);
     cout << "Combien de nombres dans la serie?" << endl;
     cin >> effectif;
     cout << "Donnez la serie chiffre par chiffre" << endl;
     vector <int> serie;
     int temp(0);
     for (int i(0); i<effectif; i++)
     {
          cin << temp;
          serie.push_back(temp);
     }

     // Jusqu'ici, on a un tableau contenant la série

     int somme(0);
     for (int i(0); i<serie.size(); i++)
     {
          somme += serie[i];
     }
     double esperance (0);
     esperance = (somme+0.0)/(serie.size()+0.0);

     // Maintenant on a l'espérance de la série

     int somme2(0);
     for (int i(0); i<serie.size(); i++)
     {
          somme2 += pow (serie[i] , 2);
     }
     double ecartType(0);
     ecartType = somme2 - pow(esperance , 2);
     ecartType = sqrt( ecartType );

    // Maintenant, on a l'écart type de la série

    cout << endl << "L'esperance de la serie est: " << esperance << " et son ecart type est: " << ecartType << endl;
    return 0;
}

Maintenant que je me suis fait suer à vous faire ce programme de tete, sans le tester, je vais enfin pouvoir vous présenter ce que je voulais vous demander.

Je voudrais "simplement" inverser le processus.
C'est à dire connaissant l'espérance et l'écart-type d'une série, en déduire une série ayant ces propriétés.
Voici donc le programme, pour l'instant (tel que je l'imagine, là encore, sans test).

int main()
{
     cout << "Donnez l'esperance puis l'ecart-type de la serie desiree" << endl;
     int esperance(0), ecartType(0);
     cin << esperance;
     cin << ecartType;
     vector <int> serie;

// A completer pour remplir le tableau serie, avec votre aide

     cout << "Une serie ayant pour esperance " << esperance << " et pour ecart-type " << ecartType << " est" << endl;
     for(int i(0); i<serie.size(); i++)
     cout << serie[i];
     cout << endl;
     return 0;
}

Voilà, j'ai essayé d'etre le plus clair possible.
Merci déja à ceux qui seront allé jusqu'au bout de cet énorme pavé.
Enfin, merci d'avance à ceux qui me donneront une réponse

Posté par
patrice rabiller
re : Espérance, ecart-type 27-07-11 à 18:07

Bonjour,

Cela s'appelle de la simulation... Il faut donc utiliser le générateur de nombres aléatoires (ou en faire un soi-même).

Tout dépend de la loi statistique à simuler :
loi uniforme discrète ? continue ?
loi normale ?
etc ...

Il existe bien sûr une infinité de séries statistiques ayant une moyenne et un écart type donnés.

Posté par
rdces
re : Espérance, ecart-type 27-07-11 à 18:14

Euh...
Bon, alors déjà, on est d'accord qu'il y en a une infinité, c'est pourquoi j'ai bien fait attention à mettre "une série" et non pas "la série" dans mon programme et mes explications.
Ensuite, je ne comprends pas ton petit paragraphe de 4 lignes.
Je veux juste une série vérifiant ces deux critères qui soit discrète (ca veut bien dire qu'il y a un nombre fini de possibilités?)

Posté par
patrice rabiller
re : Espérance, ecart-type 28-07-11 à 11:40

Bon alors voici un exemple assez simple à réaliser :

Si on tire au hasard un grand nombre d'entiers au hasard dans {1, 2, 3, 4, ... N} répartition a priori uniforme) alors la moyenne théorique de la série est (N+1)/2 et la variance est (N2-1)/12. Cependant la moyenne et la variance réelles seront m et v.

Si on veut une série dont la moyenne est M et la variance V, il suffit alors de prendre l'image par de cette série particulière par la fonction affine f définie par :

f(x)=(V/v)x+(M-m) ou, mieux : f(x)=(\sqrt{\frac V v})x+(M-m) sauf erreur

Posté par
rdces
re : Espérance, ecart-type 28-07-11 à 11:57

Donc, je crée d'abord un tableau contenant [1,2,3,...,N]
Je stocke alors m=(N+1)/2 et v=(N²-1)/12.
Pour chaque valeur du tableau, je calcule alors
[ f(1), f(2), f(3), ..., f(N) ]
et ca me fait alors ma série, c'est ca?

Posté par
patrice rabiller
re : Espérance, ecart-type 28-07-11 à 12:30

C'est presque ça !

1) créer un tableau de valeurs aléatoires.
2) calculer la moyenne m et l'écart type s de cette série
3) calculer les coefficients a et b de la transformation affine f : xax+b
si la moyenne désirée est M et l'écart type est S alors b=(M-m) et a=S/s
4) calculer un nouveau tableau de valeurs à l'aide de la transformation affine f définie par f(x)=ax+b

Si je ne me suis pas trompé, le tableau obtenu aura pour moyenne M et écart type S

Posté par
rdces
re : Espérance, ecart-type 28-07-11 à 12:35

1) Je vois
2) Je vois
3) Je vois presque M et S représentent quoi ici?
4) Je vois

Merci de prendre le temps de m'aider

Posté par
patrice rabiller
re : Espérance, ecart-type 28-07-11 à 13:27

M est la moyenne que l'on veut obtenir pour la série et S son écart type.
m et s sont les paramètres (moyenne et écart type) de la série de départ (valeurs calculées)

Par exemple on veut une moyenne de 165 (M=165) et un écart type de 15 (S=15) sur une série de taille 100 :

1)On fabrique une série aléatoire de 100 nombres réels compris entre 0 et 1 (les générateurs aléatoires font souvent ça)
2)On calcule la moyenne de cette série (m=0,52 par exemple) et son écart type (s=0,012 par exemple)
3)On calcule les coefficients a et b : a=15/0,012 et b=165-0,52
4)On calcule alors la nouvelle série comme image de la série de départ par la fonction f

Voila

Posté par
rdces
re : Espérance, ecart-type 28-07-11 à 13:33

Merci beaucoup

Oui, en meme temps, M et S, j'aurais pu réfléchir 15 secondes...
J'attends d'avoir accès à mon ordinateur sur lequel je programme pour tester ca
A bientot pour la confirmation et merci encore



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !