SciPy 怎么求解随机微分方程积分?

文章导读
Previous Quiz Next SciPy 中 随机微分方程 (SDEs) 的积分是指求解描述受确定性和随机成分影响的系统的微分方程的过程。
📋 目录
  1. A SDEs 的关键组件
  2. B Brownian Motion 和 Wiener Process
  3. C SDE 的积分
A A

SciPy - 随机微分方程的积分



Previous
Quiz
Next

SciPy 中 随机微分方程 (SDEs) 的积分是指求解描述受确定性和随机成分影响的系统的微分方程的过程。

这些方程用于建模各种不确定性或噪声是基本特征的现象,例如金融、物理、生物学和工程领域。

数学上,随机微分方程 (SDEs) 可以表示如下 −

dXt = f(Xt,t)dt + g(Xt,t)dWt

其中 −

  • Xt 是状态变量。
  • f(Xt,t) 表示漂移项,即确定性部分。
  • g(Xt,t) 是扩散项,即随机部分。
  • g(Xt,t) 是扩散项,即随机部分。
  • Wt 是 Wiener 过程或布朗运动。
  • dt 是微小时间增量。

SDEs 的关键组件

以下是随机微分方程 (SDEs) 的关键组件 −

  • 随机过程: 随机过程为系统引入随机性,通常由布朗运动表示,也称为 Wiener 过程。布朗运动是一种连续时间随机过程,其特征是不可预测的连续波动。
  • 漂移项: SDE 的确定性部分,通常记为 f(Xt,t),表示系统随时间变化的期望或平均行为。这类似于常微分方程 (ODEs) 中的变化率。
  • 扩散项: 随机部分 g(Xt,t) 调节系统中的随机性。该项与布朗运动的微分 dWt 相乘,表示系统中发生的随机冲击。

Brownian Motion 和 Wiener Process

Brownian MotionWiener Process 是随机过程研究中的基础概念,对于在金融、物理和工程等各种科学领域中建模随机性至关重要。让我们详细了解这些概念 −

Brownian motion 也被称为 Wiener Process,它描述了悬浮在流体中的粒子的随机运动,这是植物学家 Robert Brown 首先观察到的。从数学上讲,它已被形式化为表示连续时间随机过程。

以下是 brownian motion 的关键属性 −

  • 从零开始: Brownian motion 从零开始,即,

    B(0) = 0
    

    此属性确立了过程的起点,并为后续运动提供了参考。

  • 独立增量: Brownian motion 在非重叠时间间隔上的增量是独立的。

    B(t+s)-B(t)
    

    它独立于过去任何值 B(u)(u < t),这意味着未来的运动不依赖于过程过去的轨迹。

  • 正态分布增量: Brownian motion 的增量服从正态分布。具体来说,对于任意 s > 0。

    B(t+s)-B(t)N(0,s)
    

    这表明 Brownian motion 在两个时间点 t 和 t+s 之间的差值服从均值为 0、方差等于时间间隔长度 s 的正态分布。

  • 连续路径: Brownian motion 的路径是连续的,这意味着随着时间推进,描述运动的函数没有任何跳跃或不连续点。然而,这些路径几乎处处不可导,这表明它们表现出高度不规则的行为,无法用光滑函数描述。

Brownian motion 的数学表示如下 −

Brownian Formula

其中 B(0)=0,dB(s) 表示 Brownian motion 的无穷小增量。

示例

下面是一个使用 SciPy 和 Matplotlib 生成并绘制简单 Brownian motion 路径的示例 −

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# 参数
T = 1.0          # 总时间
N = 1000        # 步数
dt = T/N        # 时间增量
t = np.linspace(0, T, N+1)  # 时间数组

# 生成 Wiener process 的增量
# dW 服从均值为 0、方差为 dt 的正态分布
dW = norm.rvs(loc=0.0, scale=np.sqrt(dt), size=N)  # 使用 scipy 生成正态增量
# 通过对增量取累积和来创建 Brownian motion 路径
W = np.concatenate(([0], np.cumsum(dW)))

# 绘制 Brownian motion
plt.figure(figsize=(10, 6))
plt.plot(t, W, label='Brownian Motion Path', color='blue')
plt.title('Simulated Brownian Motion')
plt.xlabel('Time')
plt.ylabel('W(t)')
plt.grid()
plt.legend()
plt.show()

以下是 Brownian motion 的输出 −

Brownian Example

与常微分方程 (ODEs) 的区别

Ordinary Differential Equations (ODEs) 中,系统是确定性地演化的,这意味着未来状态仅依赖于当前值和时间。然而,SDEs 通过使系统演化不确定来考虑随机影响。这使得求解 SDEs 更加复杂,因为解不是确定路径,而是可能路径上的概率分布。

SDE 的积分

用于积分 ODE 的传统方法由于随机分量而不能直接应用于 SDE。有一些专门的数值技术,如下所述 −

Euler-Maruyama 方法

这是一个简单的一阶数值近似技术,用于求解 SDE。它通过包含一个随机项来推广 ODE 的 Euler 方法。

对于形如以下的 SDE

dXt = f(Xt,t)dt + g(Xt,t)dWt

Euler-Maruyama 方法按如下方式近似解 −

Xt+tXt+f(Xt,t)t+g(Xt,t)tWt

其中,WtN(0,t)表示一个按 t 缩放的随机正态变量。

Milstein 方法

该方法是对 Euler-Maruyama 方法的改进,通过考虑扩散项的导数来提高精度。

SDE 的 Milstein 方法表示如下 −

Milstein Formula

其中 g(Xt,t) 是扩散项关于 Xt 的导数。

SDE 的应用

以下是 Stochastic Differential Equations (SDE) 的应用,它们在许多领域用于建模随机性起关键作用的系统 −

  • 金融: 用于建模股票价格,例如 Black-Scholes 模型用于期权定价。
  • 物理: 用于受热噪声影响的系统,例如流体中粒子的运动。
  • 生物: 用于种群动力学,其中出生和死亡过程涉及随机性。
  • 控制理论: 用于具有影响控制输入的随机扰动的系统。