2

現在、 http://www-math.bgsu.edu/~zirbel/sde/matlab/index.htmlの厚意により、幾何学的なブラウン運動をシミュレートするコードがあります。

ただし、1,000 のシミュレーションを生成し、それらをグラフに表示したいと考えています。

単一のシミュレーションを生成するために現時点で持っているコードは次のとおりです。

% geometric_brownian(N,r,alpha,T) simulates a geometric Brownian motion 
% on [0,T] using N normally distributed steps and parameters r and alpha

function [X] = geometric_brownian(N,r,alpha,T)

t = (0:1:N)'/N;                   % t is the column vector [0 1/N 2/N ... 1]

W = [0; cumsum(randn(N,1))]/sqrt(N); % S is running sum of N(0,1/N) variables

t = t*T;
W = W*sqrt(T);

Y = (r-(alpha^2)/2)*t + alpha * W;

X = exp(Y);

plot(t,X);          % plot the path
hold on
plot(t,exp(r*t),':');
axis([0 T 0 max(1,exp((r-(alpha^2)/2)*T+2*alpha))])
title([int2str(N) '-step geometric Brownian motion and its mean'])
xlabel(['r = ' num2str(r) ' and alpha = ' num2str(alpha)])
hold off
4

2 に答える 2

0

1000 回のシミュレーションを実行するには、簡単な方法は次のようになります。

Nsims = 1000;
N=10^15;         % set to length of individual sim                    
r = 1;
alpha = 0.1;
T = 1;

t = (0:1:N)'/N;                   
t = (T*(r-(alpha^2)/2))*t;
W = cat(1,zeros(1,Nsims),cumsum(randn(N,Nsims))); 
W = W*(sqrt(T)*alpha/sqrt(N));
Y = repmat(t,1,Nsims) + W;
X = exp(Y);

プロットは以前と同じです

plot(t,X);             % plots ALL 1000 paths
%   plot(t,X(:,paths));   % use instead to show only selected paths (e.g. paths =[1 2 3])
hold on
plot(t,exp(r*t),':');
axis([0 T 0 max(1,exp((r-(alpha^2)/2)*T+2*alpha))])
title([int2str(N) '-step geometric Brownian motion and its mean'])
xlabel(['r = ' num2str(r) ' and alpha = ' num2str(alpha)])
hold off

比較的短い (小さい) シミュレーションのセットでは、コードをループするか、上記を実行する必要があります。負荷の高いシミュレーションでは、Horchler が約束した速度の利点を活用できます。

于 2013-09-08T15:02:40.250 に答える