首页 > 解决方案 > 用布朗路径求解 PDE 的扩展 FFT

问题描述

背景

我正在尝试在 Python 中求解随机偏微分方程(SPDE)。为此,我用 模拟了一条单一的布朗路径BM = brownian(x0, T, dt),其中x0是开始的初始值,T是布朗运动运行的时间,dt是步骤。这给了我一个包含 T/dt 条目的数组,它显示了布朗运动如何针对一个特定事件演变。

现在,通过这个布朗运动,我能够将我的 SPDE 转换为确定性(“正常”)偏微分方程。我在此视频中找到了用于求解不同偏微分方程的快速傅里叶变换 (FFT):https ://www.youtube.com/watch?v=hDeARtZdq-U ,但我不确定如何包含布朗路径。

代码

代码的重要部分/我将包含布朗运动的部分是

dt = 0.001
t = np.arange(0, 1, dt)

def rhsHeat(uhat_ri, t, kappa, a, c):
    uhat = uhat_ri[:N] +(1j)*uhat_ri[N:]
    d_uhat += -a**2 * (np.power(kappa, 2))*uhat - c*(1j)*kappa*uhat
    d_uhat_ri = np.concatenate((d_uhat.real, d_uhat.imag)).astype('float64')
    return d_uhat_ri


uhat_ri = odeint(rhsHeat, u0hat_ri, t, args=(kappa, a, c))

这个想法是通过 FFT 转换 PDE 以获得许多 ODE。这些 ODE 在 中初始化rhsHeat。我想BM[i]-BM[i-1]为时间进度添加组件,作为时间BM[i]的布朗路径值t[i]。这意味着函数的进度(时间)不是由时间变化加权,而是由从 t[i-1] 到 t 的每一步的变化 B[i]-B[i-1] [一世]。我想

def rhsHeat(uhat_ri, t, kappa, a, b, c):
    i = int(t/dt)
    uhat = uhat_ri[:N] +(1j)*uhat_ri[N:]
    d_uhat += -a**2 * (np.power(kappa, 2))*uhat - c*(1j)*kappa*uhat + b*(1j)*kappa*uhat*(B[i]-B[i-1])
    d_uhat_ri = np.concatenate((d_uhat.real, d_uhat.imag)).astype('float64')
    return d_uhat_ri

问题 上面包含布朗运动的例子是行不通的。我问你这样做的任何建议。我想这就像包括另一个取决于t但不取决于的功能x

另外,我真的不明白为什么t函数中包含时间变量rhsHeat,因为它没有在其中的任何地方使用。

标签: pythonfftpde

解决方案


推荐阅读