在给定平均值和标准差的情况下,我必须从正态分布中找到n个随机数。我已经弄清楚了如何获得一个随机数,但是当尝试循环获得几个不同的随机数时,它给我的次数是相同的x倍?
program prac10
implicit none
real :: mu, sigma
integer :: i
!print*, "mean and stdev?"
!read*, mu, sigma
mu=1.1
sigma=0.1
do i=1, 2 # here is the part I think I am stuck on??
call normal(mu,sigma)
enddo
end program
subroutine normal(mu,sigma)
implicit none
integer :: i
integer :: n
real :: u, v, z, randnum
real :: mu, sigma
real :: pi=3.141593
call RANDOM_SEED()
call RANDOM_NUMBER(u)
call RANDOM_NUMBER(v)
z=sqrt(-2*log(u))*cos(2*pi*v)
randnum=mu+sigma*z
print*, randnum
end subroutine
尤其是我应该循环/重复的部分。我从1:2开始使用,现在将n替换为2,这样我就不必在每次尝试运行时都输入它
答案 0 :(得分:0)
最重要的事实是您不得重复呼叫RANOM_SEED
。它应该被称为仅一次。
修改子例程以生成数字并将其进一步传递也很好。还请注意格式的更改以使其更具可读性,以及pi值的更改。
program prac10
implicit none
real :: mu, sigma, x
integer :: i
call RANDOM_SEED()
mu = 1.1
sigma = 0.1
do i = 1, 2
call normal(x,mu,sigma)
print *, x
end do
end program
subroutine normal(randnum,mu,sigma)
implicit none
integer :: i
integer :: n
real :: u, v, z, randnum
real :: mu, sigma
real :: pi = acos(-1.0)
call RANDOM_NUMBER(u)
call RANDOM_NUMBER(v)
z = sqrt(-2*log(u)) * cos(2*pi*v)
randnum = mu + sigma*z
end subroutine