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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2005
    Messages : 5 761
    Points : 14 013
    Points
    14 013

    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 : 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.

Discussions similaires

  1. Détection de fonction gaussienne
    Par prog_ dans le forum C++
    Réponses: 2
    Dernier message: 24/06/2010, 08h16
  2. Appliquer fonction gaussienne
    Par houshafs dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/02/2010, 09h12
  3. Réponses: 1
    Dernier message: 02/11/2009, 13h23
  4. La convolution de deux fonctions gaussiennes
    Par mobi_bil dans le forum Mathématiques
    Réponses: 1
    Dernier message: 26/06/2009, 11h39
  5. Utiliser les fonctions dans le langage c
    Par dev0712 dans le forum Débuter
    Réponses: 3
    Dernier message: 14/12/2008, 20h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo