2016-03-16 1 views
1

У меня есть часть моего кода, ниже которой решается стохастическое уравнение теплопроводности в 1D с периодическими граничными условиями. Стохастический член - гауссовский белый шум.стохастическое уравнение теплоты - 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 действительно являются независимыми случайными величинами с распределением Гаусса.

Смежные вопросы