Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Bibliothèques, systèmes et outils
Bibliothèques, systèmes et outils Forum d'entraide sur les bibliothèques, la programmation système et les outils en C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 31/01/2012, 16h56   #1
bru.antoine
Candidat au titre de Membre du Club
 
Homme
Ingénieur développement matériel électronique
Inscription : décembre 2011
Messages : 22
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 : 22
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
Type de fichier : jpg gauss.jpg (104,5 Ko, 7 affichages)
bru.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 18h43   #2
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 435
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 435
Points : 12 967
Points : 12 967
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 !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 09h44   #3
bru.antoine
Candidat au titre de Membre du Club
 
Homme
Ingénieur développement matériel électronique
Inscription : décembre 2011
Messages : 22
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 : 22
Points : 14
Points : 14
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
bru.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h37.


 
 
 
 
Partenaires

Hébergement Web