Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Candidat au titre de Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2011
    Messages : 24
    Points : 13
    Points
    13

    Par défaut Coder fonction gaussienne en langage C

    Bonjour à tous,
    Je me suis lancé dans le codage d'une fonction gaussienne en pensant que c'est tout simple mais finalement je suis coincé.
    Je suis un peu novice dans la manipulation de double et float en C donc c'est peux-être de là que vient mon problème.
    Voici ma fonction version 1 :
    Code :
    1
    2
    3
    4
    5
     
    double f( double t, const double *p )
    {
        return ( 1./(p[0]*sqrt(2.*M_PI))*exp(-pow(t-p[1],2.)/(2.*pow(p[0],2.))));
    }
    Voici ma fonction version 2 :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    double f( double t, const double *p )
    {
        double gaussa,gaussb,gaussc,gaussd,gausse,gaussf,gaussg,gauss;
     
        gaussa=2.*M_PI;
        gaussb=sqrt(gaussa)*p[0];
        gaussc=1./gaussb;
        gaussd=-pow(t-p[1],2.);
        gausse=2.*pow(p[0],2.);
        gaussf=gaussd/gausse;
        gaussg=exp(gaussf);
        gauss=gaussc*gaussg;
        return gauss;
    }
    Mais je rencontre le même problème avec les 2 fonctions :
    Si je pose p[0]=0.0593522 et p[1]=-0.0153688, j'obtient les valeurs suivantes à l'appel de ma fonction :
    x= -5 f(x)= 0
    x= -4 f(x)= 0
    x= -3 f(x)= 0
    x= -2 f(x)=1.07649e-242
    x= -1 f(x)=1.16161e-059
    x= 0 f(x)= 6.5
    x= 1 f(x)= 1.8861e-063
    x= 2 f(x)=2.83801e-250
    x= 3 f(x)= 0
    x= 4 f(x)= 0
    x= 5 f(x)= 0

    Le problème est que si je trace la courbe avec Euler les valeurs ne correspondent pas à celle calculées par ma fonction.
    Si quelqu'un arrive à me donner une explication. Merci
    Images attachées Images attachées

  2. #2
    Expert Confirmé Sénior

    Homme Profil pro Patrick Gonord
    Enseignant Chercheur
    Inscrit en
    juin 2005
    Messages
    5 664
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrick Gonord
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2005
    Messages : 5 664
    Points : 13 489
    Points
    13 489

    Par défaut

    La fonction tracée ne correspond pas
    - à la formule utilisée (qui est K*exp(-(1/2)((t-p[1])/p[0])^2) avec K = 1/p[0]/racine(2PI)
    - et/ou aux valeurs utilisées pour les p[]

    Avec p[0] = 0.0593522 et p[1] = -0.0153688 et pour t=1
    on a comme terme dans l'exponentielle
    (t-p[1])/p[0] ~ 17.1
    Au carré et divisé par 2 : 146.3
    exp(-146.3) est évidemment minuscule : 2.8e-64

  3. #3
    Candidat au titre de Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2011
    Messages : 24
    Points : 13
    Points
    13

    Par défaut

    en effet j'avais oublié de saisir des parenthèse dans la fonction lors du tracé du graphe.
    je n'avais pas remis en question le tracé mais plus mon code à tort.
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •