Générateur de variables aléatoires

Fermé
Duaam Messages postés 19 Date d'inscription vendredi 3 octobre 2014 Statut Membre Dernière intervention 31 janvier 2016 - Modifié par Duaam le 6/10/2014 à 21:36
Duaam Messages postés 19 Date d'inscription vendredi 3 octobre 2014 Statut Membre Dernière intervention 31 janvier 2016 - 10 oct. 2014 à 12:52
Bonjour,



je cherche une procédure en C qui permet de générer des variables aléatoires selon la loi de Poisson ,pour une matrice donnée en dimensions n et m
Merci
A voir également:

3 réponses

sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
7 oct. 2014 à 11:56
Bonjour
Sans rentrer dans les détails que veux-tu dire réellement par des variables aléatoires ? c'est-à-dire faire en sorte que ta variable devienne un des types de variable standard en langage C ou autre ? car, si c'est le cas des variables en langage C tu as
auto
qui permet de définir un type automatiquement selon ce qui se trouve comme résultat retour dans la variable en question mais par défaut il est du type entier.
Seconde solution est avec le langage C++ il se peut que tu fasses quelque chose du genre sans rentrer en détails car trop long a expliquer donc voici un exemple tirée de la référence C++11 sur leur site https://en.cppreference.com/w/cpp/language/auto

#include <iostream>
#include <cmath>
#include <typeinfo>
 
template<class T, class U>
auto add(T t, U u) -> decltype(t + u) // the return type is the type of operator+(T,U)
{
    return t + u;
}
 
auto get_fun(int arg)->double(*)(double) // same as double (*get_fun(int))(double)
{
    switch (arg) {
        case 1: return std::fabs;
        case 2: return std::sin;
        default: return std::cos;
    }
}
 
int main()
{
    auto a = 1 + 2;
    std::cout << "type of a: " << typeid(a).name() << '\n';
    auto b = add(1, 1.2);
    std::cout << "type of b: " << typeid(b).name() << '\n';
    //auto int c; //compile-time error
    auto d = {1, 2};
    std::cout << "type of d: " << typeid(d).name() << '\n';
 
    auto my_lambda = [](int x) { return x + 3; };
    std::cout << "my_lambda: " << my_lambda(5) << '\n';
 
    auto my_fun = get_fun(2);
    std::cout << "type of my_fun: " << typeid(my_fun).name() << '\n';
    std::cout << "my_fun: " << my_fun(3) << '\n';
}

à bientôt
0
Duaam Messages postés 19 Date d'inscription vendredi 3 octobre 2014 Statut Membre Dernière intervention 31 janvier 2016
7 oct. 2014 à 13:43
Bonjour ,
Merci pour votre réponse :)
À vrai dire ,moi je travaille avec l'environnement Dev C++ et je cherche d'insérer une procédure afin de remplir ma matrice avec des variables aléatoires
Cette procédure doit contenir un générateur qui fonctionne avec la loi de Poisson ou autres lois .
Cdlt
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
7 oct. 2014 à 21:42
Euh, il n'y a pas de type "auto" en C ISO...
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
7 oct. 2014 à 23:02
salut @fiddy
Je n'ai pas été claire Lol je parle du mots-clés auto en langage C
autant pour moi
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
7 oct. 2014 à 23:05
Il n'y a pas non plus de mot clé "auto" en C ISO...
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
7 oct. 2014 à 23:20
?? et
 auto var = 10; 
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 7/10/2014 à 21:46
Attention Duaam, variable aléatoire ne veut rien dire.
De quoi parles-tu ? De valeur aléatoire ? Si oui, de quel type ? Entier ? Nombre ? Caractère ? Mot ?
Ou tu parles de variable avec des types aléatoires ?
Ou autre ?
Sinon, tu veux programmer en C ou en C++ ? (Juste pour confirmation).

Google is your friend
0
Duaam Messages postés 19 Date d'inscription vendredi 3 octobre 2014 Statut Membre Dernière intervention 31 janvier 2016
7 oct. 2014 à 21:47
Salut fiddy !!
Ravie de te revoir :)
Des variables aléatoires de type float !!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 7/10/2014 à 22:17
Salut :-).
Tu as redit variable aléatoire mais tu voulais dire "valeur" j'imagine ?
De plus, tu n'as pas dit si tu voulais programmer en C ou en C ++ ?
C j'imagine ?
Si oui, il suffit de tirer une variable aléatoire avec rand() de diviser par RAND_MAX pour avoir un float (ou double que je te conseille) entre 0 et 1.
0
Duaam Messages postés 19 Date d'inscription vendredi 3 octobre 2014 Statut Membre Dernière intervention 31 janvier 2016
7 oct. 2014 à 22:52
:D je vais plus dire variable alèatoire mais valeur alèatoire .
C'est bien ce que j'ai fait
Voici mon nouveau code :
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
// remplissage de la matrice avec des variables alèatoires entre 0 et 10 //
void remplissage (float T[100][100],int n,int m)
{
int i,j;


for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
T[i][j] = (float)rand()/RAND_MAX ;
}

}

//calcul des moyennes marginales //
void moy_marg (float M[100][100],float T[100],int *l,int *p)
{
int i,j;float s;
for (i=0;i<*l;i++)
{
s=0;
for (j=0;j<*p;j++)
{
s=s+M[i][j];}
T[i]=s/(*p);}
}
//calcul de la variance //
void var_ecar(float M[100][100],float V[100],float W[100],int *l,int *p)
{
int i,j;
float r,T[100];
for (i=0;i<*l;i++)
{
r=0;
for(j=0;j<*p;j++)
{

r=r+((M[i][j]-T[i])*(M[i][j]-T[i]));
}V[i]=r/(*p);

W[i]=sqrt(V[i]);
}
}
void affichage (float N[100],int c)
{
int i;
for(i=0;i<c;i++)
{
printf("%f \n",N[i]);
}printf("\n");}
void affichagem (float N[100][100],int c,int d)
{
int i,j;
for(i=0;i<c;i++)
{
for(j=0;j<d;j++){

printf("%f\t",N[i][j]);
}
printf("\n");}
}

main()
{
int n,m,i,j; float M[100][100], V[100],T[100],W[100];
system("color 1D");
printf("Donnez les dimensions de votre matrice :\n");
printf("Donnez n=");
scanf("%i",&n);
printf("Donnez m=");
scanf("%i",&m);
srand(time(NULL));
remplissage(M,n,m);
affichagem (M,n,m);
moy_marg(M,T,&n,&m);
system("color 4E");
printf("voici votre vecteur moyennes :\n");
affichage (T,n);
var_ecar (M,V,W,&n,&m);

printf("Voici votre vecteur variance :\n");
affichage (V,n);
system("color 3F");
printf("Voici votre vecteur ecart type :\n");
affichage (W,n);

system("pause");
return 0;
}
Mais :( j'ai entendu parler des lois ,veut dire qu'un générateur de valeurs aléatoires doit suivre une loi normal ou loi de Poisson pour générer des valeurs aléatoires !!!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
7 oct. 2014 à 23:47
Hum, là c'est plus des maths que de la programmation.
C'est à toi de définir ton générateur ?
0
Duaam Messages postés 19 Date d'inscription vendredi 3 octobre 2014 Statut Membre Dernière intervention 31 janvier 2016
10 oct. 2014 à 12:52
Ouii exactement , mais je sais pas comment faire :(

--
0
Duaam Messages postés 19 Date d'inscription vendredi 3 octobre 2014 Statut Membre Dernière intervention 31 janvier 2016
7 oct. 2014 à 21:56
Je programme toujours avec le Dev C++ :D

--
0