IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

équation dynamique mathématique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Par défaut équation dynamique mathématique
    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.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    hou que c'est pas beau....

    Bon c'est OK avec le langage, mais c'est pas esthéthique, pour du code de maths...

    Déclare tes variables, et fait tes calculs.

    Bon, ça c'est une chose (mais qui n'engage que moi)

    Par contre, déjà tu calcules je sais combien de fois sqrt(delta)... Stockes le dans une variable.

    Même chose pour sigma*sqrt(delta)

    Au lieu de diviser par 2, mutiplies par 0.5

    Ton K = exp, de même que toutes tes initialisations (et donc les calculs), tu les calcules à tous les coups, sans tester par rapport à u, alors que ton algo le dis

    voilà pour l'instant

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par hengstepha
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      double partiepositive (double k,double e) // renvoie la partie positive de k-e
    {
      if (k>e) return k-e;
      else 0;
    }
    Salut, ta fonction partiepositive marche, mais elle renvoie des warning. Je te propose la chose suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    double partiepositive (double k,double e) // renvoie la partie positive de k-e
    {
      return (k>e) ? k-e : 0.;
    }
    et peut-être que le mieux serait de faire une macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define MAX(a,b) ((a>b) ? (a) : (b))
    et ensuite de faire partout, à la place de partiepositive(a,b) de mettre

    je ne pense pas que ça ira bcp plus vite mais au moins tu auras enlevé qq warning lors de la compilation et je pense que le code sera plus lisible...

Discussions similaires

  1. Créer des formules Mathématiques dynamiques dans ACCESS
    Par Jeannot45 dans le forum Contribuez
    Réponses: 2
    Dernier message: 08/10/2009, 23h33
  2. développement d'une équation mathématique
    Par slaima15 dans le forum MATLAB
    Réponses: 11
    Dernier message: 06/10/2009, 00h31
  3. probleme d'équation et ecriture mathématique
    Par grohino dans le forum Mathématiques - Sciences
    Réponses: 2
    Dernier message: 26/05/2008, 22h02
  4. [Mathématiques] L'équation cubique est-elle résolue ?
    Par Gilles Louïse dans le forum La taverne du Club : Humour et divers
    Réponses: 37
    Dernier message: 31/07/2006, 14h14
  5. [Mathématiques] L'équation cubique est-elle résolue ?
    Par Gilles Louïse dans le forum Politique
    Réponses: 15
    Dernier message: 17/07/2006, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo