Le but de ce TP est d'écrire une classe parente VariableAleatoire et des classes dérivées simulant des loi standards.
On rappelle qu'en C++ il existe un générateur pseudo-aléatoires
dans cstdlib fournissant une fonction rand() qui renvoie un
entier compris entre 0 et RAND_MAX.
Pour initialiser le générateur
avec une graîne différente à chaque éxécution on utilisera la fonction
srand(time(NULL)); en début de main.
Utilisez le visualisateur suivant pour vos vérifications :
Inspirez-vous de l'approche précédente pour réaliser une classe abstraite ProcessusStochastique et des classes dérivées Brownien et BrownienGeometrique.
On modélisera un processus stochastique comme une suite de variables aléatoires indexés par le temps. On va simuler le processus en le discrétisant suivant un pas de temps dt donné en paramètre au constructeur. On donnera également une valeur initiale en paramètre. Le processus aura une methode virtuelle pure double suivante(double v) qui étant donné une valeur v en t renvoie la valeur en t+dt (cette méthode ne dépend pas de t en vertu de la définition d'un processus stochastique).
Le processus fournira une méthode double valeur(double t). On ramenera tout d'abord t au k*dt le plus proche. Pour avoir la valeur en k*dt avec k non nul (sinon on renvoie la valeur initiale) on prendra la valeur en (k-1)*dt et on appelera suivante.
Ainsi, on réalisera dans la classe ProcessusStochastique un cache
permettant de stocker ces valeurs pour ne pas avoir à appeler deux fois
valeur(1) quand on appelle valeur(2) puis valeur(3).
Ce cache sera réalisé grâce à une map,
une structure d'association fournie par la STL dans le fichier include du même nom.
Le type du cache sera alors map<int,double> cache;
Pour ajouter un élément de valeur x pour le temps k*dt, on utilisera juste cache[k] = x;.
Pour savoir si un temps est deja associé on utilisera la fonction
cache.count(k) renvoyant 1 si c'est le cas et 0 sinon.
On procedera donc ainsi dans le calcul de valeur(t), si t proche de k*dt et
k dans le cache, on renvoie la valeur du cache, sinon on la calcule avec
suivante et la valeur en (k-1).
Rajouter des classes dérivées avec des méthodes suivantes appropriées pour le Brownien et le BrownienGeometrique.
P.S. : appliquez-vous, vous re-utiliserez ces classes dans le projet.