随机热方程 - Fortran

时间:2016-03-16 23:24:07

标签: math fortran fortran90 differential-equations stochastic

我的代码的一部分在下面解决了1D中具有周期性边界条件的随机热方程。随机项是高斯白噪声。

我的问题是,我是否正确实施了噪音? 高斯噪声被定义为具有平均零,第二时刻告诉我们任何一对时的值都是相同分布且统计独立的。

!I first define arrays for the uniform and gaussian random numbers

real, dimension (-1:n) :: u,v,x1,x2,y1,y2 
real :: k=0.005,h=0.1,R !time and position step, respectively
R=k/h**2.

!generate Uniform, then Gaussian Random numbers for White Gaussian Noise
call random_seed 
call random_number(x1)
call random_number(x2)

y1=sqrt(-2*log(x1))*cos(2*pi*x2)
y2=sqrt(-2*log(x1))*sin(2*pi*x2)
y1=y1*sigma+mu
y2=y2*sigma+mu

do i=0,n-1
  v(0)=v(n)
  v(-1)=v(n-1)
  v(i) = (1-2.0*R)*u(i)+R*(u(i+1)+u(i-1))+k*y1(i) !discretized stochastic heat eqn
end do

这是在我的代码中添加高斯噪声的正确方法吗?我只使用高斯随机数y1,我不需要y2。它是否正确?谢谢!

1 个答案:

答案 0 :(得分:2)

您似乎正在使用Box-Muller transform从统一样本中获取正态分布的样本。您的实现似乎是正确的,因此y1和y2确实是具有高斯分布的独立随机变量。

相关问题