如何在fortran中创建随机函数以将相同的随机分布生成数组?

前锋

我认为下面的代码并不能完全给我相同的随机分布。

subroutine trig_random_value()
    implicit none
    integer :: t, z, y, x
    real(real64) :: theta, r
    real(real64), parameter :: PI=4.D0*DATAN(1.D0)

    integer, dimension(12) :: date_time
    integer, dimension(12) :: seed

    call date_and_time(values=date_time)
    call random_seed
    seed = date_time(6) * date_time(7) + date_time(8)
    call random_seed(put = seed)

    do z = 1, z_size
        do y = 1, y_size
            do x = 1, x_size

                theta = rand()*2*PI
                r = 0.1*rand()
                l1(1, z, y, x) = r*cos(theta)
                l2(1, z, y, x) = r*sin(theta)

                theta = rand()*2*PI
                r = 0.1*rand()
                l1(2, z, y, x) = r*cos(theta)
                l2(2, z, y, x) = r*sin(theta)

            end do
        end do
    end do

    return
end subroutine trig_random_value

根据我的代码,我尝试随机值l1(1,:,:,:)l1(2,:,:,:)l2(1,:,:,:)l2(2,:,:,:)其中l(T,X,Y,Z)为(3 + 1) -尺寸数组

为什么我对随机函数使用三角函数?因为我要循环随机化。如果我绘制l1(1,:,:,)vs l2(1,:,:,)或l1(2,:,:,)vs l2(2,:,::)的分布图,我会获得半径为0.1的圆形分布

那么,为什么我要告诉你,这并不能完全给我相同的分配?因为我试图测量它们的方差,我得到了

 variance_l1_t1 =   1.6670507752921395E-003
 variance_l1_t2 =   3.3313151655785292E-003
 variance_l2_t1 =   4.9965623815717321E-003
 variance_l2_t2 =   6.6641054728288360E-003

请注意,(variance_l1_t2-方差_l1_t1)=(variance_l2_t1-方差_l1_t2)=(variance_l2_t2-方差_l2_t1)= 0.00166

那是一个很奇怪的结果。在实际上我应该得到几乎相同的方差值l1(1,:,:,:)l1(2,:,:,:)l2(1,:,:,:)l2(2,:,:,:)如果这个功能,如果良好的随机函数。可能是我做错了。

如何解决这个问题呢?

根据要求提供的其他信息:

real(real64) function find_variance(l)
    implicit none
    real(real64), dimension(z_size, y_size, x_size), intent(in) :: l
    integer :: z, y, x
    real(real64) :: l_avg = 0
    real(real64) :: sum_val = 0

    do z = 1, z_size
        do y = 1, y_size
            do x = 1, x_size

                l_avg = l_avg + l(z, y, x)

            end do
        end do
    end do

    l_avg = l_avg/(z_size*y_size*x_size)

    do z = 1, z_size
        do y = 1, y_size
            do x = 1, x_size

                sum_val = sum_val + (l(z , y, x) - l_avg)**2

            end do
        end do
    end do

    find_variance = sum_val/(z_size*y_size*x_size)

    return
end function find_variance
罗格维布

在现代Fortran中,变量的初始化例如

real(real64) :: sum_val = 0

表示这sum_val是一个具有SAVE属性的变量(类似于staticC中的变量),仅在程序启动时才初始化一次。相当于

real(real64), save :: sum_val = 0

SAVEed变量的值在整个运行过程中都会保留,并且不会再次初始化为0。要解决此问题,只需替换

real(real64) :: sum_val       !! this is a usual local variable
sum_val = 0                   !! or sum_val = real( 0, real64 )

那我想应该没问题 请参阅此页面以获取更多详细信息。IMO这是Fortran非常令人困惑的功能之一...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C中随机生成数组元素

来自分类Dev

如何在PHP中生成随机数以产生非标准分布

来自分类Dev

如何随机生成数字?

来自分类Dev

如何随机生成数字?

来自分类Dev

如何在python中生成数字的随机序列?

来自分类Dev

用随机整数生成数组 C

来自分类Dev

如何使用C中的函数生成随机数数组

来自分类Dev

如何在Perl中为Point类创建随机函数?

来自分类Dev

Java:将相同的随机生成的数字传递给另一个函数

来自分类Dev

在数组数组中生成数组元素的随机显示?

来自分类Dev

如何在Python中从双峰分布生成n个随机值?

来自分类Dev

如何在octave / matlab中从均值和st.dev的向量生成多个随机分布?

来自分类Dev

如何混淆 SSL 中的随机数以防止第三方生成相同的主密钥?

来自分类Dev

根据分布函数生成随机数

来自分类Dev

如何在Excel中以对数正态分布创建随机数?

来自分类Dev

如何在Excel中以对数正态分布创建随机数?

来自分类Dev

如何清除随机生成函数中的间隔

来自分类Dev

如何生成随机数以填充空行?

来自分类Dev

创建新对象时如何将相同的随机数分配给多个变量?

来自分类Dev

如何从数组中为具有相同类的 css div 生成随机颜色

来自分类Dev

创建一个函数以在SQL Server触发器中生成随机数

来自分类Dev

char *随机生成数据

来自分类Dev

如何在PHP中编写非均匀随机分布的代码

来自分类Dev

如何在Swing中创建随机矩阵?

来自分类Dev

如何在PHP中调用随机函数

来自分类Dev

如何在熊猫数据帧上生成具有随机值的合成数据?

来自分类Dev

如何在伪代码中生成数字或字母的随机字符

来自分类Dev

如何生成元素的随机加权分布

来自分类Dev

如何生成整数的随机正态分布

Related 相关文章

  1. 1

    在C中随机生成数组元素

  2. 2

    如何在PHP中生成随机数以产生非标准分布

  3. 3

    如何随机生成数字?

  4. 4

    如何随机生成数字?

  5. 5

    如何在python中生成数字的随机序列?

  6. 6

    用随机整数生成数组 C

  7. 7

    如何使用C中的函数生成随机数数组

  8. 8

    如何在Perl中为Point类创建随机函数?

  9. 9

    Java:将相同的随机生成的数字传递给另一个函数

  10. 10

    在数组数组中生成数组元素的随机显示?

  11. 11

    如何在Python中从双峰分布生成n个随机值?

  12. 12

    如何在octave / matlab中从均值和st.dev的向量生成多个随机分布?

  13. 13

    如何混淆 SSL 中的随机数以防止第三方生成相同的主密钥?

  14. 14

    根据分布函数生成随机数

  15. 15

    如何在Excel中以对数正态分布创建随机数?

  16. 16

    如何在Excel中以对数正态分布创建随机数?

  17. 17

    如何清除随机生成函数中的间隔

  18. 18

    如何生成随机数以填充空行?

  19. 19

    创建新对象时如何将相同的随机数分配给多个变量?

  20. 20

    如何从数组中为具有相同类的 css div 生成随机颜色

  21. 21

    创建一个函数以在SQL Server触发器中生成随机数

  22. 22

    char *随机生成数据

  23. 23

    如何在PHP中编写非均匀随机分布的代码

  24. 24

    如何在Swing中创建随机矩阵?

  25. 25

    如何在PHP中调用随机函数

  26. 26

    如何在熊猫数据帧上生成具有随机值的合成数据?

  27. 27

    如何在伪代码中生成数字或字母的随机字符

  28. 28

    如何生成元素的随机加权分布

  29. 29

    如何生成整数的随机正态分布

热门标签

归档