1 pièce(s) jointe(s)
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