python - 使用 scipy.integrate 将布朗运动纳入粒子轨迹积分

标签 python numpy

我想在简单的线性粒子相互作用模型之上添加热波动。到目前为止(没有布朗运动)一切都使用 scipy.integrate.odeint 完成并且工作完美。因此,最好找到一种方法,通过使用 scipy.integrate 方法之一来包含随机运动。 问题如下:使用 Langevin 热浴,我必须按如下方式更新粒子位置 (x) 和速度 (v):

x = x + v * dt

v = v + (interaction_force * dt + random_force * dt)/质量

其中:random_force = sqrt(constant/dt)*random_number

我认为有两个问题:

  1. 步长 dt 出现在 random_force 中。但是我不知道自适应步长控制在运行过程中改变的当前步长。

  2. 步长控制会出问题,只要用两个不同的random_numbers来比较不同的步长,就会有比较大的差异。 (我不确定是否使用了两个不同的random_numbers)

我唯一的想法是使用固定步长的方法。但我还没有找到任何喷气式飞机。关于如何解决这个问题有更好的想法吗?

最佳答案

odeint 中使用的方法类型不适用于 SDE。可调整大小的时间步长方法并不真正适用于布朗运动,因为随着时间步长变小,解不会收敛到平滑的东西。

你最好只使用 Euler Maruyama method .这种方法非常简单,您可以自己编写集成例程。

还有更高级的方法:下一个最广为人知的方法是 Milstein 方法,它对于乘法 SDE 更准确,但对于加法 SDE(例如您的)是等效的。一般来说,使用更复杂的方法对 SDE 的好处不如 ODE 大,所以我会说只使用 EM。

关于python - 使用 scipy.integrate 将布朗运动纳入粒子轨迹积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35437010/

相关文章:

python - 从函数返回多个值的最佳方法是什么?

python - Amazon lambda dynamodb update_item() 只接受关键字参数

python - sklearn : Plot confusion matrix combined across training+test sets

python - 在Python中导入颜色科学模块时出现"TypeError"

python - 如何从另一个文件夹导入(python)

python - 如何从pytest中获取通过、失败和跳过的测试总数

python - 防止 pandas read_csv 将第一行视为列名的标题

python - 根据索引获取数组特定行的中位数

python - 逐像素二维辐射校准

python - 尽管满足了全局要求,但仍使用 pip 在本地安装软件包