Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1656 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  schema d'euler d'une equation différentiel stochastique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

schema d'euler d'une equation différentiel stochastique

n°1677406
frenchtouc​co
Posté le 27-01-2008 à 13:11:03  profilanswer
 

hello,
 
quelqu'un aurait un lien où je pourrais trouver le source en C++ de la méthode indiqué dans le titre  
 
Merci.


Message édité par frenchtoucco le 27-01-2008 à 13:11:22

---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
mood
Publicité
Posté le 27-01-2008 à 13:11:03  profilanswer
 

n°1677414
Elmoricq
Modérateur
Posté le 27-01-2008 à 13:28:57  profilanswer
 

As-tu un souci avec l'algorithme ?
Ou bien une difficulté pour le retranscrire sous forme de code C++ ?

 

Merci de préciser ta demande. Par contre, ici on ne donne pas de source toute faite, on aide juste les intervenants à trouver la solution à leurs problèmes.


Message édité par Elmoricq le 27-01-2008 à 13:29:04
n°1677419
frenchtouc​co
Posté le 27-01-2008 à 13:37:40  profilanswer
 

en faite j'ai implémenté moi même l'algo mais ça en marche pas
 

Code :
  1. double SousJacent::MethodeEuler(double eps)
  2. {
  3.     double r     = bs->getCaracCall()->r;
  4.     double T     = bs->getCaracCall()->T;
  5.     double sigma = bs->getCaracCall()->sigma;
  6.     double S0    = bs->getCaracCall()->S0;
  7.     double VA    = LoiNormal::GetInstance()->GetOneGaussian(0);
  8.     double VA2;
  9.     double ST=S0+eps;
  10.     for(int i=1;i<=pas;i++)
  11.     {
  12.         VA2 = LoiNormal::GetInstance()->GetOneGaussian( (((double)i)*T)/(double)pas );
  13.         ST=ST+r*ST*(T/((double)pas))+sigma*ST*(VA2-VA);
  14.         VA=VA2;
  15.     }
  16.     return ST;
  17. }


 
je veux coder cette équation: dST=rdt+sigdWt


Message édité par frenchtoucco le 27-01-2008 à 13:41:17

---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1677420
frenchtouc​co
Posté le 27-01-2008 à 13:39:22  profilanswer
 

pour générer la loi normal j'utilise le code ci-dessous :
 

Code :
  1. double LoiNormal::GetOneGaussian(double variance)
  2. {
  3.     return GetOneGaussianByBoxMuller()*sqrt(variance);
  4. }
  5. double LoiNormal::GetOneGaussianByBoxMuller()
  6. {
  7.     double result;
  8.     double x;
  9.     double y;
  10.     double sizeSquared;
  11.     do
  12.     {
  13.     x = 2.0*rand()/static_cast<double>(RAND_MAX)-1.0;
  14.     y = 2.0*rand()/static_cast<double>(RAND_MAX)-1.0;
  15.     sizeSquared = x*x + y*y;
  16.     }
  17.     while
  18.     ( sizeSquared >= 1.0);
  19.     result = x*sqrt(-2.0*log(sizeSquared)/sizeSquared);
  20.     return result;
  21. }


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1677540
frenchtouc​co
Posté le 27-01-2008 à 19:23:37  profilanswer
 

correction :
 

Code :
  1. 1. double SousJacent::MethodeEuler(double eps)
  2.    2. {
  3.    3.     double r     = bs->getCaracCall()->r;
  4.    4.     double T     = bs->getCaracCall()->T;
  5.    5.     double sigma = bs->getCaracCall()->sigma;
  6.    6.     double S0    = bs->getCaracCall()->S0;
  7.    7.     double VA;
  8.    9.     double ST=S0+eps;
  9.   10.
  10.   11.     for(int i=0;i<pas;i++)
  11.   12.     {
  12.   13.         VA2 = LoiNormal::GetInstance()->GetOneGaussian( T/pas );
  13.   14.         ST=ST+r*ST*(T/pas)+sigma*ST*VA;
  14.   16.     }
  15.   17.     return ST;
  16.   18. }


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1679025
frenchtouc​co
Posté le 30-01-2008 à 13:18:10  profilanswer
 

up


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1679287
el muchach​o
Comfortably Numb
Posté le 30-01-2008 à 21:04:56  profilanswer
 

Tu cherches "Euler integration" dans gogol, tu devrais pouvoir trouver ça.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1679306
frenchtouc​co
Posté le 30-01-2008 à 21:55:45  profilanswer
 

euh là je parle d'équation différentielle stochastique, pas d'équa diff de base


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1680725
el muchach​o
Comfortably Numb
Posté le 01-02-2008 à 20:21:41  profilanswer
 

Gogol "Numerical Solution of Stochastic Differential Equations"


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1680733
frenchtouc​co
Posté le 01-02-2008 à 21:04:04  profilanswer
 

merci , mais déjà fait


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
mood
Publicité
Posté le 01-02-2008 à 21:04:04  profilanswer
 

n°1680863
leo++
Chef de file indienne
Posté le 02-02-2008 à 13:23:22  profilanswer
 

Bah c'est très spécifique comme question, ca m'etonnerait que quelqu'un ici puisse t'aider à résoudre ton probleme (on est en catégorie programmation, pas mathematiques ).
 
Tu as essayé de contacter un chercheur ou un laboratoire qui pourrait t'aider ? Généralement ils n'hésitent pas à te répondre, ne serait-ce que pour te conseiller des lectures ou des personnes à joindre.

n°1683861
ElDesdicha​do
Posté le 08-02-2008 à 10:44:51  profilanswer
 

Bon je suis une bonne âme donc on reprend:
ton EDS est:
dS=rdt + sigmadW
donc ST=S0+rT+sigmaWT.
En plus un mouvement brownien ca commence à 0, donc l'initialisation de ton VA c'est 0. (3 erreurs de corrigées)
 
donc pour ta boucle c'est  
 

Code :
  1. 1. double SousJacent::MethodeEuler(double eps)
  2.    2. {
  3.    3.     double r     = bs->getCaracCall()->r;
  4.    4.     double T     = bs->getCaracCall()->T;
  5.    5.     double sigma = bs->getCaracCall()->sigma;
  6.    6.     double S0    = bs->getCaracCall()->S0;
  7.    7.     double VA    = 0.0;
  8.    8.     double VA2;
  9.    9.     double ST=S0+eps;
  10.   10.
  11.   11.     for(int i=1;i<=pas;i++)
  12.   12.     {
  13.   13.         VA2 = LoiNormal::GetInstance()->GetOneGaussian( T/(double)pas );
  14.   14.         ST=ST+r*(T/((double)pas))+sigma*(VA2-VA);
  15.   15.         VA=VA2;
  16.   16.     }
  17.   17.     return ST;
  18.   18. }


 
Ensuite puisque tu utilise une volatilité constante (sigma) il est absolument inutile de faire une boucle il suffit de faire un pas. Ensuite au vu des noms de fonction, je pense que tu t'es planté dans la définition de ton EDS, ca ne m'étonnerait pas que ce soit plutôt:
dS/S=rdt+sigmadW (bref une diffusion lognormale)
et donc en utilisant le lemme d'Itô etc...
ST=S0*exp((r-0.5*sigma^2)*T+sigma*WT)
et là encore tu as seulement besoin d'un seul saut, je te laisse le soin d'écrire la relation dans ton algo. Enfin bref il faudrait sans doute revoir tes définitions...
 
Quoiqu'il en soit tu as besoin de faire une boucle pour l'algo d'Euler si ta volatilité dépend du temps i.e. sigma=sigma_t, et qu'elle a le bon goût d'être constante par morceaux. Si ta volatilité est "path-dependent" tu dois utilisé un algorithme plus performant afin de réduire l'erreur systématique, style Milstein.
 
Voilà ce devrait être tout, quoiqu'il en soit revoit ton cours de calcul sto...

n°1685880
ElDesdicha​do
Posté le 13-02-2008 à 15:07:16  profilanswer
 

Bon alors ca marche maintenant???

n°1686864
frenchtouc​co
Posté le 15-02-2008 à 13:10:39  profilanswer
 

merci non


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
n°1687702
ElDesdicha​do
Posté le 18-02-2008 à 10:48:19  profilanswer
 

id est?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  schema d'euler d'une equation différentiel stochastique

 

Sujets relatifs
XSLT avec un document XML validé avec XML schema pb....equation variable inconnue
equation variable inconnuetablespaces d'un schéma en DB2
Sur excel, Equation disant JUSTE ou FAUX suivant 6 cellulesxml schema
comparaison de schéma oracle...[c] Résolution d'une équation du seconde degré sur DEVCPP
[XML Schema] Référence à des types ou variablesbesoin d'aide pour resolution equation scd. degré (vb)
Plus de sujets relatifs à : schema d'euler d'une equation différentiel stochastique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR