与python的随机集成

phy*_*Guy 8 python statistics numpy

我想数字地解决包含白噪声的积分.数学上的白噪声可以用变量X(t)来描述,变量X(t)是随机变量,具有时间平均Avg [X(t)] = 0和相关函数Avg [X(t)X(t')] = delta_distrubtion(t) -t").

一个简单的例子是从t = 0到1计算X(t)上的积分.平均来说,这当然是零,但我需要的是这个积分的不同实现.

问题是这不适用于numpy.integrate.quad().

是否有任何python包处理随机积分?

tch*_*tch 4

这是数值 SDE 方法的一个很好的起点:http ://math.gmu.edu/~tsauer/pre/sde.pdf 。

dX_t = a(t,X_t)dt + b(t,X_t)dW_t这是我去年为课堂项目编写的一个简单的随机微分方程 numpy 求解器。它基于正则微分方程的前向欧拉方法,在实际求解 SDE 时得到相当广泛的应用。

def euler_maruyama(a,b,x0,t):
    N = len(t)
    x = np.zeros((N,len(x0)))
    x[0] = x0
    for i in range(N-1):
        dt = t[i+1]-t[i]
        dWt = np.random.normal(0,dt)
        x[i+1] = x[i] + a(t[i],x[i])*dt + b(t[i],x[i])*dWt
    return x
Run Code Online (Sandbox Code Playgroud)

本质上,在每个时间步,函数的确定性部分使用前向欧拉进行积分,随机部分通过生成dWt均值为 0 和方差的正态随机变量dt并对随机部分进行积分来积分。

我们这样生成的原因dWt是基于布朗运动的定义。特别是,如果 $W$ 是布朗运动,则 $(W_t-W_s)$ 服从均值 0 和方差 $ts$ 的正态分布。dWt对小时间间隔内 $W$ 变化的离散化也是如此。

这是上面函数的文档字符串:

Parameters
----------
a : callable a(t,X_t),
    t is scalar time and X_t is vector position
b : callable b(t,X_t),
    where t is scalar time and X_t is vector position
x0 : ndarray
    the initial position
t : ndarray
    list of times at which to evaluate trajectory

Returns
-------
x : ndarray
    positions of trajectory at each time in t
Run Code Online (Sandbox Code Playgroud)