[C++] equation dynamique

stephane -  
lirey83 Messages postés 75 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous, j'aimerais programmer une équation dynamique en C++ qui est:
f(0,x)=[K-exp(x)]+ pour x<u;
f(i,x)=0 pour x>=u;
f(i+1,x)=pn*f(i,x+sigma*sqrt(delta))+(1-pn)*f(i,x-sigma*sqrt(delta));
voila mon code:
double partiepositive (double k,double e) // renvoie la partie positive de k-e
{
if (k>e) return k-e;
else 0;
}

double phi(double u, double K,double T,double sigma,double N,double r,double i,double x)//equiation dynamique
{
double delta=T/N;
double res;
double mu=r-sigma*sigma/2;
double pn=0.5+mu*sqrt(delta)/(2*sigma);
res=partiepositive(K,exp(x));
double w1=x+sigma*sqrt(delta);
double w2=x-sigma*sqrt(delta);

if((i==0)&&(x<u))
return res;
else
{
if((i==0)&&(x>=u))
{return 0;}
else
{
if(x>=u)
return 0;
else
{
return pn*phi(u, K, T, sigma,N,r, i-1,w1)+(1-pn)*phi(u, K, T, sigma,N,r, i-1,w2);
}
}
}
}

mon problème est que l'algorithme est très lent!!! à partir de i=27..
avez-vous des améliorations pour y remédier??
merci d'avance.
A voir également:

2 réponses

lirey83 Messages postés 75 Date d'inscription   Statut Membre Dernière intervention   13
 
Mon dieu, tu calcules plein de truc inutile : il ne faut pas initialiser dès le début des variables qui potentiellement ne seront pas utilisé.
Ensuite, utilises une variable pour stocker le résultat de sqrt(Delta), tu diviseras par 3 le temps de calcul ...
Aller, corriges et postes ton résultat, on verra si y a du mieux ;)
0
lirey83 Messages postés 75 Date d'inscription   Statut Membre Dernière intervention   13
 
y a aussi beaucoup de paramètre qui sont constant, il ne sert donc à rien de les passer en paramètre. Faut les définir en global. Cela libérera ainsi pas mal de mémoire vu que ta fonction est récurcive.
0