如何将此代码转换为扫描随机数据而不是分箱数据?

How to convert this code to scan random data instead of binned data?

我是 Fortran 的新手,我正在尝试使用随机数据而不是 x、y、z 中的分箱数据编写代码,如我的示例代码所示。

         implicit real*8(a-h,o-z)
     dimension rm(4),rp1(4),rip1(4),rp2(4),rip2(4),rp3(4),rip3(4),
 d   rn(4),u1(4),u2(4),u3(4)


    do ix= 1000,25000,1000
    x = ix/1000000.
    do iy= 1000,25000,1000
    y = iy/100000.
    do iz= 1,1000,25
    z = iz/10000.
    a=(x**2+y**2)/z
    b=x*y*z
    c=x*y**2+y*z**2+z*x**2
    fr=(a*b)/c

    if(fr.ge.0.05.and.fr.le.23)then
    write(40,*)x,y,x,fr
    else
    endif

    end do
    end do
    end do


    stop

如何将此类具有分箱数据的代码转换为使用随机抽取的代码。

作为示例,这里的分箱数据意味着 x 的可能固定值为 {1000/1000000.,2000/1000000., .......,25000/1000000.} 即范围 {.001, .025} 但它们不是随机值

如果是随机值,将从 {.001, .025} 范围内随机抽取 25 个点。

这是我关于随机抽取分析的假设(以前我对此并不熟悉)。

类似

ian@eris:~/work/stack$ cat data.f90
Program random_data

  Use, Intrinsic :: iso_fortran_env, Only :  wp => real64

  Implicit None

  Real( wp ), Parameter :: min_rand = 0.001_wp
  Real( wp ), Parameter :: max_rand = 0.025_wp

  Integer, Parameter :: n_samples = 25
  
  Real( wp ) :: x, y, z
  Real( wp ) :: a, b, c
  Real( wp ) :: fr

  Integer :: i_sample

  Do i_sample = 1, n_samples

     Call Random_number( x )
     Call Random_number( y )
     Call Random_number( z )

     x = x * ( max_rand - min_rand ) + min_rand
     y = y * ( max_rand - min_rand ) + min_rand
     z = z * ( max_rand - min_rand ) + min_rand
  
     a=(x**2+y**2)/z
     b=x*y*z
     c=x*y**2+y*z**2+z*x**2
     fr=(a*b)/c

     If( fr >= 0.05_wp .And. fr <= 23.0_wp )Then
        Write( 40, * ) x, y, x, fr
     Endif

  End Do

End Program random_data
ian@eris:~/work/stack$ gfortran-10 -Wall -Wextra -fcheck=all -std=f2008 -g -finit-real=snan data.f90 
ian@eris:~/work/stack$ ./a.out;more fort.40
more: stat of fort.40 failed: No such file or directory

不幸的是,这个 运行 中的随机数 none 产生了位于所需范围内的输出 - 但是我确实用 2500 个样本对其进行了测试,然后有几个做了。