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 : 14
    Points
    14

    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
    Responsable Modération
    Avatar de diogene
    Homme Profil pro Patrick Gonord
    Enseignant Chercheur
    Inscrit en
    juin 2005
    Messages
    5 665
    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 665
    Points : 13 781
    Points
    13 781

    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
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  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 : 14
    Points
    14

    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
  •