SDE 몬테카를로 분포#
이 tutorial은 pyna에서의 실용적인 SDE workflow를 보여 줍니다.
BrownianMotion,GeometricBrownianMotion또는ItoSDE로 Itô 모델을 정의한다.재현 가능한 표본 경로를
Trajectory로 생성한다.벡터화된 몬테카를로 ensemble을 실행해 분포 추정치를 얻는다.
가능하면 경험적 평균, 분산, 분위수를 해석식과 비교한다.
pyna의 SDE class는 모델의 책임 범위와 단일 경로 기하에 사용하세요. pyna에 전용 ensemble geometry class가 생기기 전까지는 큰 ensemble에 벡터화된 NumPy array를 사용하세요. 이렇게 하면 수학적 object model을 정직하게 유지할 수 있습니다. 단일 realization은 표본 trajectory이고, realization cloud는 통계 추정량입니다.
Note
아래의 executable notebook은 저장된 output과 함께 commit되어 있으며
nbsphinx execution이 비활성화되어 있습니다. 수치 파라미터를 바꿀 때는
로컬에서 다시 실행하세요. docs workflow는 GitHub Pages에서 저장된 output을
렌더링합니다.
실행 가능한 notebook:
복사해 쓸 수 있는 패턴#
import numpy as np
from pyna.dynamics import GeometricBrownianMotion
gbm = GeometricBrownianMotion(mu=[0.08], sigma=[0.20])
one_path = gbm.euler_maruyama([100.0], (0.0, 1.0), dt=1/252, rng=7)
print(one_path.final) # TimeSeriesSolution is a pyna Trajectory
n_paths = 200_000
rng = np.random.default_rng(20260701)
z = rng.normal(size=n_paths)
log_terminal = (
np.log(100.0)
+ gbm.expected_log_growth()[0] * 1.0
+ gbm.sigma[0] * np.sqrt(1.0) * z
)
terminal = np.exp(log_terminal)
print(np.mean(terminal), np.quantile(terminal, [0.05, 0.5, 0.95]))
확장 참고#
ItoSDE.diffusion_matrix는 scalar, vector, matrix diffusion을 받습니다.ItoSDE.euler_maruyama는 외부에서 제공한dWincrement를 받으므로 common-random-number experiment와 regression test를 deterministic하게 만들 수 있습니다.기하학적 주장이 의미 있을 때만 하나의 표본 경로를 위상 객체로 승격하세요. 몬테카를로 표본은 분포를 추정할 뿐이며, 자동으로 invariant set이 되지 않습니다.