[C++] equation dynamique

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.
Configuration: Linux Fedora
Firefox 1.0.7

2 réponses

  1. 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.
    1. 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 ;)