我正在尝试为布朗运动建立自己的朗之万方程模拟器。
根据这个材料。
我们在特定时间步长计算粒子位置的方法是:
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。
结果不正确。等式中一定有一些重要的东西我误解了。
请帮我。
