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:
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  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.