2016-03-16 40 views
1

我有一段代碼,它解決了一維隨機熱方程的週期性邊界條件。隨機項是高斯白噪聲。隨機熱方程 - Fortran

我的問題是,我正確實施噪音?
高斯噪聲被定義爲具有均值爲零,並且第二時刻告訴我們在任何時間對的值是相同分佈的且在統計上是獨立的。

!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。它是否正確?謝謝!

回答

2

您似乎在使用Box-Muller transform從統一樣本中獲取正態分佈的樣本。你的實現似乎是正確的,所以y1和y2確實是具有高斯分佈的獨立隨機變量。