如何离散化这个积分方程?(朗之万方程式)

计算科学 离散化
2021-12-01 19:00:40

我正在尝试为布朗运动建立自己的朗之万方程模拟器。

根据这个材料

我们在特定时间步长计算粒子位置的方法是:

在此处输入图像描述

W(u) 是一个维纳过程。x0、v0、tauB 都是常数。

我的问题是:如何为这个维纳过程积分方程编写 C++ 代码?

这是我目前在模拟器中使用的代码。

N=1000;
tau=0.1;      //0.1s
t=N*tau;
tauB=m/gamma; //~ 1e-8s

for(int j=0;j<=N;j++){  // t step
        sum=0;
    for(int k=0;k<=j;j++){  // u step
        sum=sum+(1-exp(-(j-k)*tau/tauB))*ND[j]*tau
    }
    x[j]=x0+v0*tauB(1-exp(-j*tau/tauB))+tauB/m*sum
}

x[j] 是时间步 j 处的粒子位置。ND[j] 是时间步 j 的正态分布随机值。

dW(t)=dU(t)=ND(t)dt。

结果不正确。等式中一定有一些重要的东西我误解了。

请帮我。

1个回答

增量,W(tk)W(tk1), 布朗运动W(t)正态分布,均值为零,方差等于tktk1. 如果 ND[j] 是均值为零且方差等于 1 的正态随机变量,那么您需要将其乘以 sqrt(tau)。结果 ND[j] * sqrt(tau) 是一个正态分布的随机变量,均值为零,方差等于tktk1,这就是你想要的。