Fortran的gasdev()函数
时间: 2024-05-08 19:16:20 浏览: 128
Fortran 自由函数集合
Fortran的gasdev()函数是一个用于生成服从正态分布的随机数的函数。它基于Box-Muller转换算法,通过生成两个均匀分布的随机数,将它们转换成正态分布的随机数。
函数的定义如下:
```
function gasdev(seed)
implicit none
integer, intent(inout) :: seed
real :: gasdev
real :: fac, rsq, v1, v2
static real :: gset = 0.0
static logical :: iset = .false.
if (iset) then
gasdev = gset
iset = .false.
else
do
v1 = 2.0 * rand(seed) - 1.0
v2 = 2.0 * rand(seed) - 1.0
rsq = v1**2 + v2**2
end do while (rsq >= 1.0 .or. rsq == 0.0)
fac = sqrt(-2.0 * log(rsq) / rsq)
gset = v1 * fac
iset = .true.
gasdev = v2 * fac
end if
end function gasdev
```
其中,`seed`是一个用于生成随机数的种子,`rand(seed)`是一个生成均匀分布随机数的函数。函数返回一个服从标准正态分布的随机数。
在使用gasdev()函数时,需要先给seed赋一个整数值,例如:
```
integer :: seed
real :: x
seed = 12345
do i = 1, 10
x = gasdev(seed)
print *, x
end do
```
这段代码会生成10个服从标准正态分布的随机数并输出。
阅读全文