Z Skrypty dla studentów Ekonofizyki UPGOW
(→Geometryczny proces Wienera) |
(→Geometryczny proces Wienera) |
||
Linia 16: | Linia 16: | ||
</source> | </source> | ||
- | + | Jako warunek początkowy dla symulacji należy przyjąć wartość x>0. Łatwo zauważyć własność równania definiującego proces, że startując w <math>x(0)=0</math> rozwiązaniem jest funkcja stała <math>x(t)=0</math>. Poniższy program generuje 20 trajektori geometrycznego procesu Wienera: | |
- | + | ||
- | + | ||
- | <math> | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
<source lang='matlab'> | <source lang='matlab'> | ||
Linia 40: | Linia 30: | ||
sigma=.1; | sigma=.1; | ||
mu=0.1; | mu=0.1; | ||
- | |||
for i=2:N | for i=2:N | ||
x(:,i)=x(:,i-1) + mu*x(:,i-1)*h + sigma*sqrt(h)*x(:,i-1).*normrnd (0,1,M,1); | x(:,i)=x(:,i-1) + mu*x(:,i-1)*h + sigma*sqrt(h)*x(:,i-1).*normrnd (0,1,M,1); | ||
endfor | endfor | ||
- | |||
plot((1:N)*h,x,'r-') | plot((1:N)*h,x,'r-') | ||
</source > | </source > | ||
+ | |||
+ | |||
+ | |||
+ | <math>f_y(y)=\frac{f_x(x_1)}{|g'(x_1)|}+...+ \frac{f_x(x_n)}{|g'(x_n)|}</math> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | [[Plik:GeomBM_hist.png|thumb|360px|Rozkład P(x,t) dla geometrycznego procesu Wienera w czterech następujących po sobie chwilach t = 0.7,3.5,6.2,9.1. Widać rozmywanie się piku zgodnie z odpowiednim rozkładem [http://pl.wikipedia.org/wiki/Rozkład_logarytmicznie_normalny logarytmicznie normalnym].]] | ||
+ | |||
+ | |||
+ | |||
<source lang='matlab'> | <source lang='matlab'> |
Wersja z 14:39, 8 maj 2010
Geometryczny proces Wienera
Geometryczny proces Wienera jest procesem losowym, który jest rozwiązaniem równania stochastycznego Ito:
\(dX(t) = \mu X(t) dt + \sigma X(t) d W(t)\,\).
Część deterministyczna część tego równania jest liniowa, podobnie jak w przypadku Ornsteina-Uhlenbecka. Rozwiązanie dla przypadku \(\sigma=0\) wyraża się w postaci eksponencjalnej
\(x(t)\simeq e^{\mu t}\),
Człon stochastyczny jest proporcjonalny o wartości procesu, czyli mamy do czynienia z tzw. "szumem multiplikatywnym". Ponieważ równanie jest w interpretacji Ito, moża je bezpośrednio rozwiązać numerycznie. Interpretacja Ito dla \(\sigma X(t) d W(t)\) oznacza, że w schemacie aproxymacyjnym bierzemy wartość procesu X(t) "przed skokiem". W takim przypadku możemy zastosować schemat numeryczny Eulera podobnie jak np. dla procesu Ornsteina-Uhlenbecka. Krok czasowy może być zapisany w postaci wektorowej jako:
x(:,i)=x(:,i-1) + mu*x(:,i-1)*h + sigma*sqrt(h)*x(:,i-1).*normrnd (0,1,M,1);
Jako warunek początkowy dla symulacji należy przyjąć wartość x>0. Łatwo zauważyć własność równania definiującego proces, że startując w \(x(0)=0\) rozwiązaniem jest funkcja stała \(x(t)=0\). Poniższy program generuje 20 trajektori geometrycznego procesu Wienera:
clear all close all N=400; M=20; T=14; h=T/N; clear x x=zeros(M,N); x(:,1)=1*ones(M,1); # log(1)=0 sigma=.1; mu=0.1; for i=2:N x(:,i)=x(:,i-1) + mu*x(:,i-1)*h + sigma*sqrt(h)*x(:,i-1).*normrnd (0,1,M,1); endfor plot((1:N)*h,x,'r-')
\(f_y(y)=\frac{f_x(x_1)}{|g'(x_1)|}+...+ \frac{f_x(x_n)}{|g'(x_n)|}\)
clear all close all N=100; M=20000; T=14; h=T/N; clear x x=zeros(M,N); x(:,1)=1*ones(M,1); # log(1)=0 sigma=.1; mu=0.1; for i=2:N x(:,i)=x(:,i-1) + mu*x(:,i-1)*h + sigma*sqrt(h)*x(:,i-1).*normrnd (0,1,M,1); endfor hold on for idx=1:4 n=5+(idx-1)*20; t=n/N*T xmax=5; h1=.1; hist(x(:,n),[0:h1:xmax],1/h1) fplot(@(xx) lognpdf(xx,(mu-0.5*sigma^2)*t,sigma*sqrt(t)),[0.0,xmax],200,'ro-') endfor hold off