python - 用布朗路径求解 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
,因为它没有在其中的任何地方使用。
解决方案
推荐阅读
- azure-data-factory - 在添加了文件的新容器上触发 Azure 数据工厂事件
- c++ - 编写一个程序来纠正字符串中的多余字符
- bash - 将 ed25519 私有 ssh 密钥转换为 RSA 私有密钥
- embedded - 访问 Nucleo 上的外部存储
- python - python2.7如何获取30分钟时隙
- css - 如何在 Next.js 中使用 CSS Houdini
- html - 矩形 720px 在手机 720 x 1280 上只有一半可见
- c++ - 我以前没有见过这样的代码,它是什么?
- javascript - React Native - 二维码生成器大小限制
- python - 是否可以制作一个可以读取文件的程序,但不能从程序外部打开文件?