我是第一次研究随机微分方程。我期待在二维中模拟和求解随机微分方程。
模型如下:
DP = F(T,P)DT + G(T,P)一页(t)的
其中:
我编写的代码如下:
function MDL=gyro_2dim(Psi,D)
% want to solve for 2-by-1 vector:
%p=[theta;phi];
%drift function
F=@(t,theta,phi) [sinth(theta)+Psi.*cos(phi)-D.*cot(theta);Psi.*cot(theta).*sin(phi)];
%diffusion function
G=@(t,theta,phi) [D 0;0 D./sin(theta)];
MDL=sde(F,G)
end
然后我使用以下脚本调用该函数:
params.t0 = 0; % start time of simulation
params.tend = 20; % end time
params.dt =0.1; % time increment
D=0.1;
nPeriods=10; % # of simulated observations
Psi=1;
MDL=gyro_2dim(Psi,D);
[S,T,Z]=simulate(MDL, nPeriods,'DeltaTime',params.dt);
plot(T,S)
当我运行代码时,收到此错误消息:
初始条件下的漂移率无效或模型不一致 尺寸。
知道如何修复此错误吗?
答案 0 :(得分:3)
来自sde
的文档:
用户定义的漂移率函数,用
F
表示。DriftRate
是一个函数,当使用两个输入调用时返回NVARS
- 1漂移率向量:
- 实值标量观察时间t
-NVARS
- by - 1状态向量Xt
。
为Diffusion
函数提供了类似的规范。但是,您将状态向量的元素作为标量传递,因此有三个而不是两个输入。您可以尝试将模型创建功能更改为:
function MDL=gyro_2dim(Psi,D)
% State vector: p = [theta;phi];
F = @(t,p)[sin(p(1))+Psi.*cos(p(2))-D.*cot(p(1));
Psi.*cot(p(1)).*sin(p(2))]; % Drift
G = @(t,p)[D 0;
0 D./sin(p(1))]; % Diffusion
MDL = sde(F,G);
MDL.StartTime = 0; % Set initial time
MDL.StartState = ... % Set initial conditions
由于没有sinth(theta)
功能,我还将sin(p(1))
更改为sinth
。我无法测试这个,因为我没有财务工具箱(很少)。