初めて確率微分方程式に取り組んでいます。二次元の確率微分方程式をシミュレートして解こうとしています。
モデルは次のとおりです。
dp=F(t,p)dt+G(t,p)dW(t)
どこ:
- p は 2 行 1 列のベクトルです: p=(theta(t); phi(t))
- F は列ベクトルです: F=(sin(theta)+Psi* cos(phi); Psi* cot(theta)*sin(phi))
- G は 2 行 2 列の行列です: G=(D 0;0 D/sin(theta))
- Psi はパラメータで、D は拡散定数です。
次のようにコードを書きました。
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)
コードを実行すると、次のエラー メッセージが表示されます。
初期条件または一貫性のないモデル次元でドリフト率が無効です。
このエラーを修正する方法はありますか?