Jump-Diffusion 过程:超越欧拉方法的实用求解器?

计算科学 量子力学 随机 微分方程 随机颂歌
2021-11-28 03:24:37

跳跃扩散过程是一个随机过程,其中连续噪声(在我的情况下是复杂的维纳噪声使得)和离散跳跃(在我的例子中,泊松使得)。我的方程是在伊藤意义上的。dZ,dZdZ2=dZ2=0,|dZ|2=dtdN,dMdN2=dNdM2=dMdN=AdtdM=Bdt

使用具有确定性演化项以及噪声的更新规则,我可以随时间演化一个复杂向量(或 ket-如果你喜欢)系数取决于,但不会引起问题。dtvABvdN>1

我目前正在用 MATLAB 中的普通前向 Euler 方法解决这个系统,生成 Wiener 鼻子randn和泊松噪声poissrnd此外,在每个时间步之后,我都会进行额外的重整化(我知道规范是一个运动常数)。vv/||v||

但是,为了使一切正确收敛,我必须将时间步长设置得非常小,以至于求解方程需要很长时间。是否有比 Euler 性能更好的实用求解器(例如 Runge-Kutta)?dt

当我尝试查看通常用于跳跃扩散过程的内容时,例如在 DifferentialEquations.jl 或 QuantumOptics.jl 中,两次跳跃之间的预期时间通常比时间步长()大得多,因此一个可以将确定性进化与随机发生的跳跃区分开来。在我的情况下,这个假设没有得到满足,跳跃率非常高(它主导了动态),跳跃可能与相同的时间步长一致。另一方面,它在宏观上并没有那么大,我们可以只使用中心极限定理并通过高斯噪声来近似泊松项。dN,dM0

1个回答

DifferentialEquations.jl 和 QuantumOptics.jl 中使用的设置就是所谓的时间自适应跳跃。这很好,因为它允许跳转事件来做一些事情,比如改变 DE 的数量,并且跳转是精确计算的。然而,它确实有跳跃精确计算的限制,所以如果你有一个高跳跃率,那么它就会减慢。

因此,另一种选择是使用常规跳跃而不是时间适应跳跃。最简单的当然是欧拉法,在系统生物学界也被称为 tau 跳跃。关于跳跃扩散这个主题的最佳资源可能是金融中带有跳跃的随机微分方程的数值解这本书包括许多用于常规跳跃的高阶方案,但除了少数龙格-库塔类型方案外,它们确实需要许多导数。有许多纯跳跃问题的方案(即漂移和扩散项为零)在那本书中没有提到,但只在系统生物学文献中提到(例如二项式跳跃),但当然如果你总是有漂移和扩散无关紧要的条款。这仍然是一个非常活跃的研究领域。

至于那里的实现,我不知道有什么不是针对纯跳跃问题的(对于纯跳跃问题,我知道的那些是针对像StochSS这样的生物学问题)。FWIW DifferentialEquations.jl 正在重组以允许实现常规跳转积分器(即通过并实现大部分 Platen,以及使用SciCompDSL.jl为用户自动构建雅可比行列式),但我不希望有几个个月。