Loading article…
数学において、ミルシュタイン法は確率微分方程式の近似数値解法である。これは、1974年に初めて発表したグリゴリー・ミルシュタインにちなんで名付けられた。 [ 1 ] [ 2 ]
自律的な伊藤確率微分方程式 を考えてみましょう。初期条件 付き、 どこはウィーナー過程を表し、ある時間間隔でこの確率微分方程式を解きたいと仮定します。 すると、真の解に対するミルスタイン近似値が得られる。マルコフ連鎖以下のように定義される。
注意してください(つまり拡散項はこの方法はオイラー・丸山法と同等である。
ミルスタイン方式は、収束次数が弱収束と強収束の両方を持つ。これはオイラー・丸山法よりも優れており、オイラー・丸山法は同じ弱い収束次数を持つ。しかし収束の強い次数は劣る[ 3 ]
この導出では、幾何ブラウン運動(GBM)のみを考察する。その確率微分方程式は次のように表される。 実定数を含むそして伊藤の補題を用いると、次の式が得られる。
したがって、GBM SDEの解は次のようになります。 どこ
数値解は、3つの異なる軌道について図に示されています。[ 4 ]

以下のPythonコードは、ミルスタイン法を実装し、それを用いて、幾何ブラウン運動を記述する確率微分方程式を解きます。
# -*- coding: utf-8 -*-# ミルスタインメソッドimport numpy as npimport matplotlib.pyplot as pltクラスモデル:「確率モデル定数」μ = 3シグマ= 1def dW ( dt ):「無作為標本正規分布」return np.random.normal ( loc = 0.0 , scale = np.sqrt ( dt ) )def run_simulation ():""" 1回の完全なシミュレーションの結果を返します。"""# 1秒と1000個のグリッドポイントT_INIT = 0T_END = 1N = 1000 # 1000個のグリッドポイントを計算するDT = float ( T_END - T_INIT ) / NTS = np.arange ( T_INIT , T_END + DT , DT )Y_INIT = 1# 埋めるベクトルys = np.zeros ( N + 1 )ys [ 0 ] = Y_INITfor i in range ( 1 , TS.size ) :t = ( i - 1 ) * DTy = ys [ i - 1 ]dw = dW ( DT )# ミルスタイン方式のように項を合計するys [ i ] = y + \ モデル. mu * y * DT + \ モデル. sigma * y * dw + \ (モデル. sigma ** 2 / 2 ) * y * ( dw ** 2 - DT )TS 、ysを返すdef plot_simulations ( num_sims : int ):「複数のシミュレーション結果を1枚の画像にプロットする。」for _ in range ( num_sims ):plt.plot ( * run_simulation ( ) )plt.xlabel ( "時間(秒)" )plt.ylabel ( " y " )plt.grid ( )plt.show ( )if __name__ == "__main__" :NUM_SIMS = 2plot_simulations ( NUM_SIMS )