随机微分方程通常写作如下形式:
Xt:表示在时间ttt的状态(通常是一个随机过程)。
μ(Xt,t):漂移项,表示系统的确定性部分,描述了状态变量随时间的变化趋势。
σ(Xt,t):扩散项,表示随机性或噪声的影响程度。
Wt:表示标准布朗运动(或维纳过程),是描述随机扰动的基础。
漂移项(Drift Term):漂移项μ(Xt,t)\mu(X_t, t)μ(Xt,t)控制系统的平均行为。它是系统在没有噪声影响时的演变趋势。
扩散项(Diffusion Term):扩散项σ(Xt,t)\sigma(X_t, t)σ(Xt,t)控制系统在随机扰动下的波动程度。它反映了噪声对系统行为的影响。
布朗运动(Brownian Motion):布朗运动是随机过程的一种,表示连续时间内的随机变化,具有独立增量和连续轨迹的特性。它是SDE中的主要随机成分。
解决SDE的方法与常微分方程不同,常用的方法有:
伊藤积分(Itô Integral):伊藤积分是一种特殊类型的积分,适用于随机过程,常用于求解SDE。
伊藤公式(Itô's Lemma):类似于常微分方程中的链式法则,伊藤公式用于处理SDE的求导和积分,常用于构造解的形式。
数值解法:常用的方法包括:
欧拉-马鲁扬方法(Euler-Maruyama Method):用于求解SDE的显式数值方法。
随机Runge-Kutta方法:扩展了常规Runge-Kutta方法以适应随机情况。
随机微分方程在多个领域有广泛应用:
金融工程:用于建模股票价格、利率、期权定价等金融市场中的随机现象。著名的Black-Scholes模型就是基于SDE构建的。
物理学:用于描述粒子的随机运动,例如布朗运动等现象。
生物学:用于建模种群动态、遗传变异等生物现象中的随机过程。
控制理论:在控制系统中引入随机扰动的影响,以设计更鲁棒的控制器。
下面是一个简单的随机微分方程示例:
这个方程描述了某种量(例如某种资源或价格)如何在平均值μ周围波动,θ是收敛速度,σ是波动率。
如前所示,可以使用Julia的DifferentialEquations.jl
包来求解SDE。该库提供了强大的功能,可以方便地定义和解决随机微分方程。
在科学计算领域,特别是ODE类微分方程的求解,Julia已经实现并覆盖了最大部分的求解算法,相比于其他科学计算软件(MATLAB)
下面以一篇论文中的仿真实验为例,详情可参考
视频里面up是用matlab的ode45求解器实现的,由于原论文的控制器参数不能正常复现实验结果,所以参考了视频中的参数设置,完整julia代码如下
与视频中的求解结果一致。
注:Julia支持重载,当参数列表不同时为不同的函数,调用时根据实际情况而定
同时,下面给出python的求解,也适用于其它ode方程的初值问题,
总结