0

Я пытаюсь создать модель SDE в Matlab с помощью функции sde в панели инструментов эконометрики. Глядя на примеры на веб-сайте, основной случай кажется достаточно простым в том, что уравнение какОпределение SDE в Matlab, в котором компоненты являются функциями других SDE

dX(t) = 0.1 X(t) dt + 0.3 X(t) dW(t)

можно определить сначала создать анонимные функции, а затем, используя те в уравнении SDE, как показано ниже (где переменные, используемые в функциях которые определены ранее):

F = @(t,X) 0.1 * X; 
G = @(t,X) 0.3 * X; 
obj = sde(F, G) % dX = F(t,X)dt + G(t,X)dW 

Я надеялся, что-то сделать только немного более сложное, в котором термин дрейфа SDE я хотел бы модель является функцией другого SDE. В частности, уравнение

dY(t)/Y(t) = G(t) dt + sigma dW(t)

Где G (т) является еще одним SDE я уже определился. Кто-нибудь сможет дать мне представление о том, что будет в этом случае уравнением для члена дрейфа (соответствующего F в коде выше)?

+0

Это похоже на математический вопрос, чем на программирование, нет? Ваш 'Y (t)' SDE выглядит не что иное, как [геометрическое броуновское движение] (http://en.wikipedia.org/wiki/Geometric_Brownian_motion) с изменяющимся во времени дрейфом 'G (t)'. В этом случае набор инструментов Econometrics имеет специальные функции для обычных стохастических процессов, таких как ([gbm'] (http://www.mathworks.com/help/econ/gbm.html)). Они проще в использовании и, вероятно, намного быстрее имитируются. – horchler

+0

Для полной ясности значение G (t) не должно было быть равно 0,3 * X. Я просто положил это на пример простой SDE. Каким будет код для определения G (t) и Y (t) для Y (t), как определено выше, и 'dG (t) = kappa * (mu - G (t)) dt + tau dW (t) , Заметим, что процессы Вайнера для двух уравнений здесь раздельны. Спасибо за вашу помощь! – pagarwal

+0

Ну, ваш 'dG (t)' выглядит как [процесс Орнштейна-Уленбека] (http://en.wikipedia.org/wiki/Ornstein-Uhlenbeck_process). Опять же, панель инструментов Econometrics имеет специальную функцию для этого процесса: ['hmv'] (http://www.mathworks.com/help/econ/hwv.html). – horchler

ответ

0

У меня нет инструментария эконометрики, поэтому я не могу дать вам подробный код (большинство установок Matlab не имеют этого инструментария по умолчанию). Однако ваш случай довольно распространен, поэтому я полагаю, что не должно быть слишком сложно делать то, что вам нужно. Вы можете рассмотреть creating a service request с The MathWorks или разместить вопрос по адресу Quant.StackExchange. Удостоверьтесь, что вы ясно знаете, какие SDE вам интересны. Извините, что я не могу помочь вам больше в этой области.

Другой способ моделирования этого связанного набора SDE - использовать мой собственный набор инструментов SDETools, который можно бесплатно загрузить на GitHub. Это довольно просто, если у вас есть опыт работы с функциями ODE Suite от Matlab, например ode45. SDETools также имеет специальные функции для общего стохастического процесса (например, геометрическое броуновское движение и Ornstein-Uhlenbeck), используя их аналитические решения. Вот основной код с произвольными значениями параметров для имитации вашего СДУ с помощью функции интегратора Эйлера-Maryama, sde_euler в SDETools:

t0 = 0; 
dt = 1e-2; 
tf = 1e1; 
tspan = t0:dt:tf; % Time vector 
y0 = [1;1];  % Initial conditions 

kappa = 10; 
mu = 0; 
tau = 1e-1; 
sigma = 1e-2; 
f = @(t,y)[kappa.*(mu-y(1));y(1).*y(2)]; % Drift 
g = @(t,y)[tau;sigma.*y(2)];    % Diffusion 

% Set random seed and type of stochastic integration 
options = sdeset('RandSeed',1,'SDEType','Ito'); 

Y = sde_euler(f,g,tspan,y0,options); % Euler-Maruyama 
figure; 
plot(tspan,Y) 

На самом деле, это возможно, что sde функции в панели инструментов эконометрики может сам взять два функции, f и g, я создал выше.

Вот еще один способ, которым Вы можете моделировать систему (он может или не может быть быстрее), на этот раз с помощью функции sde_ou сначала сгенерировать процесс OU, который сам по себе не зависит от другого уравнения:

... 

options = sdeset('RandSeed',1); 
Y(:,1) = sde_ou(kappa,mu,tau,tspan,y0(1),options); % OU process 

f = @(t,y)Y(round(t/dt)+1,1).*y; % Index into OU process as a function of t 
g = @(t,y)sigma.*y; 
options = sdeset('RandSeed',2,'SDEType','Ito'); 
Y(:,2) = sde_euler(f,g,tspan,y0(2),options); % Euler-Maruyama of just second equation 

figure; 
plot(tspan,Y) 

Обратите внимание, что для процесса OU используется только одно и то же случайное семя, выход Y(:,1) будет немного отличаться для этого и случай sde_euler из-за порядка, в котором пороги Винера генерируются внутри. Опять же, вы можете сделать что-то подобное, используя функцию в панели инструментов Econometrics.

 Смежные вопросы

  • Нет связанных вопросов^_^