1

MATLAB で確率微分方程式 (SDE) を数値的に解きたいのですが、私が書いたコードは単純に sde 関数を認識しません!

質問は以下の通りです。

 dz=v*dt +sqrt(2*Ds)*dw_t
 where v = 1/(N*delta) * sigma f_i (i=1- N)
 N= 100,
 delta = e6,

f_i は次の式から計算されます。

 for z>=z0 , f_i = -kappa*(z0_i -z)  and kappa = .17
 for z<z0 ,  f_i = -kappaT*(z0_i -z) and kappaT = 60

z0_i の初期値は 60nm の範囲にランダムに分布していることに注意してください。

 Ds = 4e4

dw_t は Wiener プロセスの増分です。

まず、z の値がないのに、z の条件を設定する方法がわかりません! 第 2 に、オイラー アルゴリズムは方程式と正確に一致していますが、sde 関数を使用したコードが機能しない理由がわかりません。

4

1 に答える 1

0

SDE を数値的に解くには、コーディングする関数の初期条件 (IC) が必要です。あなたの場合、それはzだと思います。IC を明示的に宣言せずにそうしたい場合は、IC を取る関数として記述できます。次に、テストするために、ランダムな IC を入力します。

また、あなたの z0 も確率論的で時間とともに変化するのか、時間ステップごとにランダムに生成されるのか、それとも一度だけランダムに生成された定数なのかはわかりません。さらに単純に、z0 が単に z の IC である場合、f_i は時間ステップを通じて z が増加または減少したかどうかを調べて、z が次の時間ステップでどのように変化するかを判断します。これを明確にしてください。そうすれば、問題がより明確になります。

ソルバーを使用せずに SDE をシミュレートすることはそれほど難しくありません。ソルバーを機能させるには、ソルバーの動作を実際に学習する必要がある場合があるため、試してみてより良い結果を得ることができます。精度を確保するために独自のソルバーを作成することを選択した場合は、モンテカルロ法をお勧めします。

私の答えがお役に立てば幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2016-11-04T17:48:20.247 に答える