0

我正在尝试使用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(t) 是我已经定义的另一个 SDE。在这种情况下,是否有人能够让我了解漂移项的方程式(对应F于上面的代码)是什么?

4

1 回答 1

0

我没有计量经济学工具箱,所以我不能给你详细的代码(大多数 Matlab 安装默认没有这个工具箱)。但是,您的情况很常见,因此我认为做您需要的事情应该不会太难。您可以考虑使用 The MathWorks创建服务请求或在Quant.StackExchange上发布问题。确保您清楚自己感兴趣的 SDE。抱歉,我无法在该领域为您提供更多帮助。

模拟这组耦合 SDE 的另一种方法是使用我自己的SDETools工具箱,该工具箱可在 GitHub 上免费获得。如果您对 Matlab 的 ODE 套件函数(例如ode45. SDETools 还具有使用其解析解的常见随机过程(例如几何布朗运动和 Ornstein-Uhlenbeck)的专用函数。这是使用 SDETools 中的 Euler-Maryama 积分器函数模拟 SDE 的具有任意参数值的基本代码sde_euler

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)

事实上,sdeEconometrics 工具箱中的函数本身有可能采用两个函数句柄,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 过程中使用相同的随机种子,由于 Wiener 增量在内部生成的顺序,Y(:,1)对于这种情况和情况的输出也会略有不同。sde_euler同样,您也可以使用计量经济学工具箱中的函数做类似的事情。

于 2014-01-25T20:26:08.633 回答