Mouvement brownien

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

Mouvement brownien

Message par ihecien le Mer 5 Déc - 0:26

salam tous le monde
qui peut m'aider SVP à simuler la trajectoire d'un mouvement brownien?
J'ai pas trouver de solution scratch


Dernière édition par le Mer 5 Déc - 2:08, édité 1 fois

ihecien
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 23
Age : 33
Localisation : Exponentielle
Réputation : 0
Points : 3634
Date d'inscription : 10/11/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Napoléon le Mer 5 Déc - 0:29

salut,
Quels sont les outils informatique dont tu disposes pour simuler la trajectoire du mouvement brownien? Où tu vas tout implémenter seul, en C++?


#ref: wikipedia

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par suneddine le Mer 5 Déc - 0:40

c'est exactement que je cherche, puisqu'il est un ihecien donc on va l'implémenter en C++
avatar
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 31
Localisation : tunisie
Réputation : 5
Points : 3733
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par manianis le Mer 5 Déc - 0:57

Oui il est possible de générer cette courbe en Pascal. Donnez moi l'équation brownienne et je vous donnerai une solution inchallah.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3666
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Napoléon le Mer 5 Déc - 1:23

voilà une source d'inspiration:

Applet Java (mouvement brownien 1d)
http://www-sop.inria.fr/mefisto/java/tutorial1/node26.html

Applet Java (mouvement brownien des particules - chimie)
http://mendeleiev.cyberscol.qc.ca/chimisterie/chimie534/mouvements.htm

a+

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par manianis le Mer 5 Déc - 1:33

ihecien a écrit:salam tous le monde
qui peut m'aider SVP à simuler la trajectoire d'un mouvement brownien?
J'ai pas trouver de solution scratch
Ahla Mr Frooja.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3666
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par ihecien le Mer 5 Déc - 1:51

mosa a écrit:c'est exactement que je cherche, puisqu'il est un ihecien donc on va l'implémenter en C
En fait le mouvement brownien est la base de mes etudes car on l'utilise dans l'évolution du cours des action dans la bourse et aussi nous devons faire une simulation des diffusion.
Pour la methode voilà une:


ihecien
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 23
Age : 33
Localisation : Exponentielle
Réputation : 0
Points : 3634
Date d'inscription : 10/11/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par manianis le Mer 5 Déc - 12:03


manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3666
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Napoléon le Mer 5 Déc - 12:26


ihecien: essaie de jeter un coup d'oeil sur les codes sources.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par suneddine le Mer 5 Déc - 12:50

je vois qu'ils sont trop compliqués
avatar
suneddine
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 730
Age : 31
Localisation : tunisie
Réputation : 5
Points : 3733
Date d'inscription : 11/11/2007

Feuille de personnage
Capacité linguistique:
995/1000  (995/1000)

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par manianis le Mer 5 Déc - 14:08

C'est pas trop compliqué mais sa nécessite beaucoup de travail.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3666
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Napoléon le Mer 5 Déc - 14:13

ihecien:
Ecris en toute lettre l'énoncé de ton sujet comme par exemple:
"il s'agit d'implémenter un simulateur de mouvements browniens 1d ou ....... La simulation doit être faite en C++ en utilisant ....
"

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par ihecien le Mer 5 Déc - 21:42

Admin a écrit:ihecien:
Ecris en toute lettre l'énoncé de ton sujet comme par exemple:
"il s'agit d'implémenter un simulateur de mouvements browniens 1d ou ....... La simulation doit être faite en C++ en utilisant ....
"
Il s'agit juste de faire un programme qui me permet de simuler une variable qui suit un mouvement brownien, mon but c'est pas de le representer mais juste d'avoir le resultat de la simulation sous forme des valeurs aleatoire que prend la fonction.
En fait g pu le faire avec MATLAB mais avec C++ je sais pas pq ça marche pas et voilà mon code sur MATLAB qui génére 5 trajectoires:
Code:

clear all;
n = 5; %le nombre de trajectoires simulées
m =10000; %le nombre de périodes de temps
Z = normrnd(0,1,m,n); %vecteur colonne composé de m v.a. iid N(0,1)
W = zeros(m+1,n); %initialisation: trajectoires du mouvement brownien
temps = zeros(m+1,1);
for i = 1 : m
W(i+1,:) = W(i,:) + sqrt(Delta)*Z(i,:);
temps(i+1,1) = temps(i,1) + Delta;
end
plot(temps,W)

Ou encore un mouvement brownien géometrique

Code:

%Simulation de plusieurs trajectoires du mouvement brownien (géométrique méthode)
clear all;
n = 80; %le nombre de trajectoires simulées
m = 10000; %le nombre de périodes de temps
Delta= 0.001; %la longueur d’une période de temps
mu = 0.1; %taux d’intérêt instantané annuel
sigma = 0.2; %volatilité
Szero = 1; %valeur initiale
Z = normrnd(0,1,m,n); %matrice composée de mxn variables aléatoires iid N(0,1)
%initialisation de la matrice contenant les trajectoires du mouvement brownien
%chacune des colonnes de cette matrice contiendra une trajectoire du brownien
W = zeros(m+1,n); %initialisation
%initialisation de la matrice contenant les trajectoires de S
%chacune des colonnes de cette matrice contiendra une trajectoire de S
S = zeros(m+1,n); %initialisation
S(1,:) = Szero * ones(1,n); %valeur initiale de S
temps = zeros(m+1,1); %initialisation du vecteur temps
%Approximation du mouvement brownien géométrique
for i = 1 : m
W(i+1,:)=W(i,:) + sqrt(Delta)*Z(i,:);
S(i+1,:)=S(i,:) + mu*S(i,:)*Delta +(sigma*S(i,:)).*(W(i+1,:)-W(i,:));
temps(i+1,1)=temps(i,1) + Delta;
end
plot(temps,S)

ihecien
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 23
Age : 33
Localisation : Exponentielle
Réputation : 0
Points : 3634
Date d'inscription : 10/11/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Napoléon le Mer 5 Déc - 22:48

Je te conseille de procéder comme suit:
Considère le programme MATLAB ci-dessous:
Code:
clear all;
n = 5; %le nombre de trajectoires simulées
m =10000; %le nombre de périodes de temps
Z = normrnd(0,1,m,n); %vecteur colonne composé de m v.a. iid N(0,1)
W = zeros(m+1,n); %initialisation: trajectoires du mouvement brownien
temps = zeros(m+1,1);
for i = 1 : m
W(i+1,:) = W(i,:) + sqrt(Delta)*Z(i,:);
temps(i+1,1) = temps(i,1) + Delta;
end
plot(temps,W)

1ère étape a écrit:identifie toutes les variables que tu as utilisées dans ce code MATLAB. (matrice, vecteur de variables aléatoires (iid)... une fois cette étape est terminée, tu n'auras qu'à écrire une boucle qui te retourne une matrice réelle.

A mon avis, l'identification des variables de ton problème et leur déclaration en C++ est l'étape clé.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par ihecien le Mer 5 Déc - 22:50

Mais le problème est que jusqu'à mnt on na pas vu comment manipuler les matrices sur C++... donc on doit le faire pour n=1

ihecien
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 23
Age : 33
Localisation : Exponentielle
Réputation : 0
Points : 3634
Date d'inscription : 10/11/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Napoléon le Mer 5 Déc - 23:10

Tu dois distinguer entre Problème de conception d'une solution pour ton mini-projet, et problèmes techniques liés au langage C/C++...
Vu que ton problème a été déjà résolu en MATLAB, ton problème est considéré résolu Smile puisque avec le C/C++ rien n'est difficile.

D'ailleurs c'est un bon pas le fait d'être sûr que tu bloques uniquement au niveau Programmation.

Concentre-toi mnt sur la manipulation des matrices en C/C++.
Sache qu'une matrice n'est rien d'autre qu'un vecteur de vecteurs.
Une matrice dynamique est un vecteur dynamique de vecteurs dynamiques.
Un vecteur contenant des variables de type MONTYPE est déclaré comme suit:

MONTYPE* vect; /* tableau dynamique */

Donc tu ajoutes * à tout type T pour déclarer un tableau d'éléments de type T. Ainsi, un tableau de tableau est déclaré comme suit:

MONTYPE** vect_vect; /* matrice dynamique */

MONTYPE** est en réalité plus général qu'une matrice dynamique puisque c'est un tableau de tableaus dynamiques. On peut y mettre des tableaux de différentes tailles... ce qui ne donne plus une matrice...


Dernière édition par le Mer 5 Déc - 23:22, édité 2 fois

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Napoléon le Mer 5 Déc - 23:18

je t'ai écrit un long message. A l'envoi, le firefox a crashé. Malheureusement pour toi ihecien confused

Résumé: Tant que tu as une solution qui marche en MATLAB, le problème revient à maitrise d'avantage le C/C++ en particulier la manipulation des matrices.

Crée un nouveau sujet sur le forum, et nomme le: Manipulation des Matrices en C. Il va être une référence pour tout le monde. Ok?

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par ihecien le Jeu 6 Déc - 0:10

Admin a écrit:Crée un nouveau sujet sur le forum, et nomme le: Manipulation des Matrices en C. Il va être une référence pour tout le monde. Ok?
Ok, bonne idée, mais ya pas une idée rapide car c'est très urgent...

ihecien
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 23
Age : 33
Localisation : Exponentielle
Réputation : 0
Points : 3634
Date d'inscription : 10/11/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Napoléon le Jeu 6 Déc - 0:12

Vu que c'est toi qui va implémenter la solution en C/C++. Je te conseille juste de te familiariser un peu avec les matrices dynamiques.
Puis la conception des fonctions de ton programme, on va la faire ensemble... elle est facile si on se basera sur ton code source MATLAB.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par methodiX le Jeu 6 Déc - 1:22

Tu pourras faire une seule fonction qui te retourne un tableau de valeurs, une instance du processus [X(n,t)] pendant une durée bien déterminée, passée en paramètre.

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4665
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par ihecien le Jeu 6 Déc - 22:33

En fait il y a une autre méthode que j'ai vu dans le cours de calcul stochastique l'année dernière:


ihecien
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 23
Age : 33
Localisation : Exponentielle
Réputation : 0
Points : 3634
Date d'inscription : 10/11/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Napoléon le Jeu 6 Déc - 22:39

Voilà un rapport de DEA qui contient une bonne présentation des processus stochastiques. Tu y trouvers:

1. les processus Gaussiens.
2. les mouvements Browniens
3. les martingales
4. les intégrales stochastiques...

http://www.dma.ens.fr/~legall/DEA96.pdf

@+

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par manianis le Ven 7 Déc - 0:56

Il est plus facile d'adapter la version Java au C++ que la version MATLAB.

manianis
Nombre Réel
Nombre Réel

Masculin
Nombre de messages : 975
Localisation : Tunisie
Réputation : 4
Points : 3666
Date d'inscription : 11/10/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://manianis.sitesled.com/

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Napoléon le Ven 7 Déc - 1:53

Salut,
je te présente d'abord le résultat de la simulation que j'ai faite (en C++).
Les pramaètres sont résumés dans le MAIN suivant:
Code:

void main()
{
   double** mat = NULL;
   double  deltaT = 0.01;
   int      nbrMvt = 100;
   int      nbTraj = 5;
   
   mat = BrownianMvt::gen_brownian_mvt(deltaT,nbrMvt,nbTraj);
   BrownianMvt::displayMatrix(mat,nbrMvt,nbTraj);
}

Code:

STEP[0]=          0.000 |  0.000 |  0.000 |  0.000 |  0.000 |
STEP[1]=          0.069 |  -0.103 |  -0.081 |  0.004 |  -0.063 |
STEP[2]=        -0.019 |  -0.113 |  0.019 |  0.004 |  0.137 |
STEP[3]=          0.051 |  -0.280 |  -0.053 |  -0.152 |  0.078 |
STEP[4]=        -0.024 |  -0.463 |  0.076 |  -0.130 |  0.073 |
STEP[5]=          0.028 |  -0.310 |  0.123 |  -0.059 |  -0.020 |
STEP[6]=          0.108 |  -0.337 |  0.314 |  0.058 |  -0.202 |
STEP[7]=          0.047 |  -0.390 |  0.147 |  0.217 |  -0.137 |
STEP[8]=        -0.024 |  -0.463 |  0.170 |  0.350 |  -0.121 |
STEP[9]=          0.007 |  -0.482 |  0.304 |  0.343 |  -0.030 |
STEP[10]=        -0.037 |  -0.428 |  0.445 |  0.453 |  0.022 |
STEP[11]=        -0.071 |  -0.378 |  0.380 |  0.612 |  0.011 |
STEP[12]=        -0.069 |  -0.463 |  0.308 |  0.699 |  -0.170 |
STEP[13]=        -0.066 |  -0.387 |  0.225 |  0.700 |  -0.074 |
STEP[14]=        -0.199 |  -0.463 |  0.230 |  0.799 |  -0.220 |
STEP[15]=        -0.181 |  -0.507 |  0.116 |  0.819 |  -0.168 |
STEP[16]=        -0.003 |  -0.677 |  0.056 |  0.955 |  -0.113 |
STEP[17]=        0.013 |  -0.720 |  -0.170 |  0.877 |  -0.086 |
STEP[18]=        0.107 |  -0.606 |  -0.105 |  0.884 |  -0.048 |
STEP[19]=        -0.042 |  -0.541 |  -0.128 |  0.914 |  0.061 |
STEP[20]=        -0.103 |  -0.576 |  -0.180 |  0.955 |  -0.092 |
STEP[21]=        -0.266 |  -0.436 |  -0.224 |  0.925 |  0.114 |
STEP[22]=        -0.271 |  -0.355 |  -0.201 |  0.819 |  0.193 |
STEP[23]=        -0.340 |  -0.425 |  -0.188 |  0.834 |  0.286 |
STEP[24]=        -0.267 |  -0.452 |  -0.279 |  0.817 |  0.315 |
STEP[25]=        -0.399 |  -0.360 |  -0.302 |  0.837 |  0.221 |
STEP[26]=        -0.293 |  -0.323 |  -0.371 |  0.808 |  0.436 |
STEP[27]=        -0.388 |  -0.510 |  -0.416 |  0.720 |  0.351 |
STEP[28]=        -0.197 |  -0.478 |  -0.394 |  0.615 |  0.360 |
STEP[29]=        -0.195 |  -0.486 |  -0.312 |  0.433 |  0.344 |
STEP[30]=        0.062 |  -0.462 |  -0.382 |  0.344 |  0.348 |
STEP[31]=        -0.125 |  -0.482 |  -0.204 |  0.293 |  0.286 |
STEP[32]=        -0.215 |  -0.330 |  -0.285 |  0.379 |  0.255 |
STEP[33]=        -0.203 |  -0.445 |  -0.105 |  0.383 |  0.233 |
STEP[34]=        -0.230 |  -0.577 |  -0.136 |  0.461 |  0.209 |
STEP[35]=        -0.265 |  -0.343 |  -0.078 |  0.573 |  0.171 |
STEP[36]=        -0.336 |  -0.334 |  -0.233 |  0.564 |  -0.024 |
STEP[37]=        -0.334 |  -0.295 |  -0.244 |  0.488 |  0.041 |
STEP[38]=        -0.359 |  -0.396 |  -0.154 |  0.410 |  0.051 |
STEP[39]=        -0.241 |  -0.190 |  -0.134 |  0.496 |  0.006 |
STEP[40]=        -0.562 |  -0.240 |  -0.134 |  0.473 |  0.020 |
STEP[41]=        -0.406 |  -0.184 |  -0.203 |  0.505 |  0.108 |
STEP[42]=        -0.527 |  -0.092 |  -0.011 |  0.472 |  0.125 |
STEP[43]=        -0.554 |  0.014 |  -0.140 |  0.611 |  0.106 |
STEP[44]=        -0.513 |  -0.047 |  -0.144 |  0.525 |  0.002 |
STEP[45]=        -0.483 |  -0.074 |  -0.076 |  0.483 |  -0.046 |
STEP[46]=        -0.380 |  -0.070 |  0.038 |  0.390 |  -0.180 |
STEP[47]=        -0.386 |  -0.041 |  0.186 |  0.459 |  -0.111 |
STEP[48]=        -0.541 |  -0.017 |  0.331 |  0.524 |  -0.274 |
STEP[49]=        -0.635 |  0.008 |  0.375 |  0.545 |  -0.195 |
STEP[50]=        -0.817 |  -0.017 |  0.528 |  0.536 |  -0.382 |
STEP[51]=        -1.135 |  -0.038 |  0.345 |  0.488 |  -0.357 |
STEP[52]=        -1.309 |  -0.075 |  0.286 |  0.385 |  -0.281 |
STEP[53]=        -1.273 |  -0.035 |  0.282 |  0.373 |  -0.333 |
STEP[54]=        -1.266 |  -0.043 |  0.220 |  0.391 |  -0.185 |
STEP[55]=        -1.199 |  -0.086 |  0.283 |  0.395 |  -0.206 |
STEP[56]=        -1.221 |  -0.099 |  0.443 |  0.370 |  -0.113 |
STEP[57]=        -1.134 |  -0.091 |  0.590 |  0.224 |  -0.161 |
STEP[58]=        -1.169 |  -0.127 |  0.639 |  0.089 |  -0.011 |
STEP[59]=        -1.025 |  -0.085 |  0.638 |  0.022 |  0.073 |
STEP[60]=        -0.898 |  0.080 |  0.657 |  0.144 |  0.052 |
STEP[61]=        -0.839 |  0.128 |  0.661 |  0.258 |  -0.030 |
STEP[62]=        -0.764 |  0.236 |  0.707 |  0.213 |  0.077 |
STEP[63]=        -0.803 |  0.186 |  1.003 |  0.346 |  -0.066 |
STEP[64]=        -0.854 |  0.096 |  1.053 |  0.233 |  -0.132 |
STEP[65]=        -0.984 |  0.163 |  1.093 |  0.299 |  -0.032 |
STEP[66]=        -0.810 |  0.117 |  0.930 |  0.273 |  -0.090 |
STEP[67]=        -0.764 |  0.096 |  0.953 |  0.242 |  -0.125 |
STEP[68]=        -0.688 |  0.062 |  0.915 |  0.293 |  -0.134 |
STEP[69]=        -0.745 |  -0.061 |  0.879 |  0.215 |  -0.003 |
STEP[70]=        -0.798 |  -0.014 |  0.823 |  0.117 |  0.074 |
STEP[71]=        -0.878 |  -0.013 |  0.836 |  0.155 |  0.064 |
STEP[72]=        -0.822 |  -0.121 |  0.842 |  0.061 |  0.056 |
STEP[73]=        -1.020 |  0.044 |  0.972 |  0.197 |  -0.143 |
STEP[74]=        -1.142 |  0.114 |  1.035 |  0.075 |  -0.023 |
STEP[75]=        -1.075 |  -0.002 |  1.027 |  0.165 |  -0.164 |
STEP[76]=        -1.001 |  -0.021 |  1.148 |  0.085 |  -0.147 |
STEP[77]=        -0.928 |  -0.115 |  1.173 |  -0.049 |  -0.450 |
STEP[78]=        -0.789 |  -0.348 |  1.058 |  -0.261 |  -0.555 |
STEP[79]=        -0.933 |  -0.208 |  0.971 |  -0.374 |  -0.616 |
STEP[80]=        -0.779 |  -0.145 |  0.920 |  -0.423 |  -0.635 |
STEP[81]=        -0.784 |  -0.069 |  0.909 |  -0.427 |  -0.697 |
STEP[82]=        -0.656 |  -0.207 |  0.875 |  -0.527 |  -0.655 |
STEP[83]=        -0.639 |  -0.270 |  0.754 |  -0.493 |  -0.624 |
STEP[84]=        -0.514 |  -0.298 |  0.730 |  -0.435 |  -0.467 |
STEP[85]=        -0.277 |  -0.416 |  0.812 |  -0.306 |  -0.559 |
STEP[86]=        -0.352 |  -0.267 |  0.990 |  -0.313 |  -0.708 |
STEP[87]=        -0.356 |  -0.312 |  1.038 |  -0.362 |  -0.658 |
STEP[88]=        -0.455 |  -0.350 |  0.856 |  -0.332 |  -0.616 |
STEP[89]=        -0.456 |  -0.374 |  0.753 |  -0.375 |  -0.781 |
STEP[90]=        -0.534 |  -0.468 |  0.388 |  -0.492 |  -0.727 |
STEP[91]=        -0.593 |  -0.472 |  0.221 |  -0.600 |  -0.701 |
STEP[92]=        -0.637 |  -0.482 |  -0.000 |  -0.597 |  -0.901 |
STEP[93]=        -0.593 |  -0.587 |  0.084 |  -0.615 |  -0.928 |
STEP[94]=        -0.609 |  -0.663 |  -0.098 |  -0.532 |  -0.819 |
STEP[95]=        -0.518 |  -0.679 |  -0.037 |  -0.572 |  -0.702 |
STEP[96]=        -0.592 |  -0.686 |  -0.048 |  -0.533 |  -0.796 |
STEP[97]=        -0.616 |  -0.586 |  -0.238 |  -0.568 |  -0.817 |
STEP[98]=        -0.481 |  -0.500 |  -0.178 |  -0.625 |  -0.766 |
STEP[99]=        -0.531 |  -0.357 |  -0.002 |  -0.680 |  -0.788 |
Press any key to continue

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Napoléon le Ven 7 Déc - 1:59

Voilà le code source d'une solution (pas la meilleure ce qui certain).
Elle n'est pas conçue Orientée Objet au vrai sens du mot. Mais, ça marche.
Compilée sous Visual Studio 6.0


Code:
/*
-------------------
SOURCE EN MATLAB 
----------------------------------------------------------------------
clear all;
n = 5; %le nombre de trajectoires simulées
m =10000; %le nombre de périodes de temps
Z = normrnd(0,1,m,n); %vecteur colonne composé de m v.a. iid N(0,1)
W = zeros(m+1,n); %initialisation: trajectoires du mouvement brownien
temps = zeros(m+1,1);
for i = 1 : m
W(i+1,:) = W(i,:) + sqrt(Delta)*Z(i,:);
temps(i+1,1) = temps(i,1) + Delta;
end
plot(temps,W)
----------------------------------------------------------------------

*/


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define NULL 0
#define PI 3,1415926535897932384626433832795

/* ------------------------------------------------------------------------------------ */
//                  CLASSE: Implémentation des variables Aléatoires
/* ------------------------------------------------------------------------------------ */


class RandomVar
{
public:
   // LOI UNIFORME
   static double unif()
   {
      
      return (double)((float)rand() / ((float)RAND_MAX + 1.0)) ;
   }

   // LOI NORMALE
   static double normale(double m, double s)
   {
      double x1,x2,y;
      x1 = unif();
      x2 = unif();
      // methode de Boc-Muller
      // <y> suit une loi normale reduite (m=0,s=1)
      y = pow(-2*log(x1),0.5)*cos(2.* 3.*x2);
      return m + s*y;
   }

};

/* ------------------------------------------------------------------------------------ */
//                  CLASSE: Implémentation du Mouvement Brownien
/* ------------------------------------------------------------------------------------ */

class BrownianMvt
{

public:

   // Création d'une matrice dynamique
   static double** createMatrix(int ln, int cl)
   {
      double ** traject = (double**)malloc(sizeof(double*) * ln);
      if (traject == NULL) return NULL;
      for (int i=0;i<ln;i++)
      {
         traject[i] = (double*) malloc (sizeof(double) * cl);
      }
      return traject;
   }

   // initialisation d'une matrice
   static void initMatrix(double** matrix, int ln, int cl, double initVal)
   {
      for (int i=0;i<ln;i++)
         for (int j=0;j<cl;j++)
            matrix[i][j] = initVal;
   }

   // affichage d'une matrice
   static void displayMatrix(double** matrix, int ln, int cl)
   {
      for (int i=0;i<ln;i++)
      {
         printf("STEP[%i]=\t",i);
         for (int j=0;j<cl;j++)
            printf("%7.3f | ",matrix[i][j]);
         printf("\n");
      }
   }


   static double** gen_brownian_mvt(double delta_T, int nbrMvt, int nbrTraj)
   {
      if (delta_T<=0 || nbrMvt<0 || nbrTraj<0) return NULL;
      double ** traject = NULL;

      // 1. Création de la matrice des Trajectoires
      if (!(traject = BrownianMvt::createMatrix(nbrMvt, nbrTraj)))
         return NULL;
      BrownianMvt::initMatrix(traject, nbrMvt, nbrTraj, 0.0);
      
      double rnd_dir;
      srand((unsigned int) time(NULL));
      for (int i=1;i<nbrMvt;i++)
      {
         // 1. W(i+1,:) = W(i,:) + sqrt(Delta)*Z(i,:);
         for (int j=0;j<nbrTraj;j++)
         {
            rnd_dir = pow(delta_T,0.5) * RandomVar::normale(0,1);
            traject[i][j] = traject[i-1][j] + rnd_dir;
            //printf("rnd_dir = %.3f\n",rnd_dir);
         }
      }
      return traject;
   }
};

/* ------------------------------------------------------------------------------------ */
//                  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/* ------------------------------------------------------------------------------------ */

void main()
{
   double** mat = NULL;
   double  deltaT = 0.01;
   int      nbrMvt = 100;
   int      nbrTraj = 5;
   
   printf("************************************\n");
   printf("*  Simulation Mouvements Browniens *\n");
   printf("************************************\n\n");
   printf("\tdelta = ");
   scanf("%f",&deltaT);
   printf("\tnombre de mouvements   = ");
   scanf("%i",&nbrMvt);
   printf("\tnombre de trajectoires   = ");
   scanf("%i",&nbrTraj);

   mat = BrownianMvt::gen_brownian_mvt(deltaT,nbrMvt,nbrTraj);

   printf("Liste des trajectoirs:\n");
   BrownianMvt::displayMatrix(mat,nbrMvt,nbrTraj);

}

Pas de copyright - c'est Open source Wink

Bonne chance
@+

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5283
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: Mouvement brownien

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum