Euler-Maruyama方法

Euler-Maruyama方法是一种用来数值求解**随机微分方程(SDE)**的离散化方法。它是欧拉方法(Euler Method)的随机扩展,适用于解决包含随机性或噪声的动态系统。

背景

随机微分方程 (SDE)

随机微分方程的一般形式为:
d X t = f ( X t , t )   d t + g ( X t , t )   d W t dX_t = f(X_t, t) \, dt + g(X_t, t) \, dW_t dXt=f(Xt,t)dt+g(Xt,t)dWt

  • X t X_t Xt: 状态变量,表示系统随时间 t t t 的状态。
  • f ( X t , t ) f(X_t, t) f(Xt,t): 漂移项(drift term),表示系统的确定性演化趋势。
  • g ( X t , t ) g(X_t, t) g(Xt,t): 扩散项(diffusion term),表示系统的随机性幅度。
  • d W t dW_t dWt: Wiener过程(布朗运动)的增量,满足:
    d W t ∼ N ( 0 , d t ) dW_t \sim \mathcal{N}(0, dt) dWtN(0,dt)

这类方程常用于建模带有噪声的物理、金融或生物系统。


方法描述

欧拉方法

欧拉方法用于解一般的常微分方程(ODE):
d X t d t = f ( X t , t ) \frac{dX_t}{dt} = f(X_t, t) dtdXt=f(Xt,t)
通过时间离散化:
X t + Δ t ≈ X t + f ( X t , t ) Δ t X_{t+\Delta t} \approx X_t + f(X_t, t) \Delta t Xt+ΔtXt+f(Xt,t)Δt

Euler-Maruyama方法

将欧拉方法扩展到随机微分方程,加入随机扰动项 g ( X t , t )   d W t g(X_t, t)\,dW_t g(Xt,t)dWt
X t + Δ t ≈ X t + f ( X t , t ) Δ t + g ( X t , t ) Δ W t X_{t+\Delta t} \approx X_t + f(X_t, t) \Delta t + g(X_t, t) \Delta W_t Xt+ΔtXt+f(Xt,t)Δt+g(Xt,t)ΔWt

  • 第一项 ( X t X_t Xt): 当前状态。
  • 第二项 ( f ( X t , t ) Δ t f(X_t, t) \Delta t f(Xt,t)Δt): 漂移项,表示确定性趋势的贡献。
  • 第三项 ( g ( X t , t ) Δ W t g(X_t, t) \Delta W_t g(Xt,t)ΔWt): 随机项,表示噪声引起的波动。

其中:
Δ W t ∼ N ( 0 , Δ t ) \Delta W_t \sim \mathcal{N}(0, \Delta t) ΔWtN(0,Δt)


具体步骤

  1. 初始化状态
    设初始条件 X 0 = x 0 X_0 = x_0 X0=x0

  2. 时间离散化
    将时间区间 [ 0 , T ] [0, T] [0,T] 等分为 N N N 个小步长:
    Δ t = T N , t n = n Δ t , n = 0 , 1 , … , N − 1 \Delta t = \frac{T}{N}, \quad t_n = n \Delta t, \quad n=0, 1, \dots, N-1 Δt=NT,tn=nΔt,n=0,1,,N1

  3. 迭代更新
    对每个时间步:
    X t n + 1 = X t n + f ( X t n , t n ) Δ t + g ( X t n , t n ) Δ t ξ n X_{t_{n+1}} = X_{t_n} + f(X_{t_n}, t_n) \Delta t + g(X_{t_n}, t_n) \sqrt{\Delta t} \xi_n Xtn+1=Xtn+f(Xtn,tn)Δt+g(Xtn,tn)Δt ξn

    • ξ n ∼ N ( 0 , 1 ) \xi_n \sim \mathcal{N}(0, 1) ξnN(0,1) 是标准正态分布随机变量,用来模拟布朗运动的增量。
  4. 结果输出
    得到状态序列 { X t n } \{X_{t_n}\} {Xtn}


优势与限制

优势
  • 简单易用: 实现起来简单,适合初学者和小型系统。
  • 灵活性: 可适配各种 SDE,尤其是具有复杂漂移或扩散项的方程。
  • 低计算成本: 每一步计算量较小。
限制
  • 精度有限: 由于仅使用欧拉方法的一阶展开,收敛速度较慢,误差为 O ( Δ t ) O(\Delta t) O(Δt)
  • 稳定性较差: 对于刚性系统(stiff system)可能需要更稳定的数值方法(如Milstein方法)。

示例应用

以下是使用Euler-Maruyama方法求解一个简单SDE的例子:

示例问题

d X t = − X t   d t + σ   d W t dX_t = -X_t \, dt + \sigma \, dW_t dXt=Xtdt+σdWt

  • 漂移项 f ( X t , t ) = − X t f(X_t, t) = -X_t f(Xt,t)=Xt
  • 扩散项 g ( X t , t ) = σ g(X_t, t) = \sigma g(Xt,t)=σ
代码实现
import numpy as np
import matplotlib.pyplot as plt

# 参数定义
T = 1.0           # 时间总长
N = 1000          # 时间步数
dt = T / N        # 步长
sigma = 0.2       # 扩散系数
x0 = 1.0          # 初始条件

# 初始化
t = np.linspace(0, T, N)
X = np.zeros(N)
X[0] = x0

# Euler-Maruyama迭代
for i in range(1, N):
    dW = np.sqrt(dt) * np.random.normal(0, 1)  # Wiener增量
    X[i] = X[i-1] - X[i-1] * dt + sigma * dW  # 更新状态

# 绘图
plt.plot(t, X, label="Euler-Maruyama Approximation")
plt.xlabel("Time")
plt.ylabel("X_t")
plt.legend()
plt.show()

在扩散模型中的应用

Euler-Maruyama方法在扩散模型中用于模拟时间反转的随机微分方程:
d X t = [ f ( X t , t ) ] d t + g ( t ) d W t dX_t = \big[f(X_t, t)\big] dt + g(t) dW_t dXt=[f(Xt,t)]dt+g(t)dWt

通过离散化,可以生成数据从高噪声状态逐渐回归真实分布。这种方法广泛应用于:

  • 图像生成: 如扩散模型(Diffusion Model)。
  • 条件生成: 如根据给定条件生成特定样本。

通过调整漂移项和扩散系数,可适配不同的生成任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值