如何使用 Monte Carlo Simulation 计算 Pi?

How to calculate Pi using Monte Carlo Simulation?

我正在尝试编写一个使用随机数计算 Pi 的 FORTRAN 90 程序。这些是我知道我需要执行的步骤:

  1. 使用调用 random_number(x).

    [在 x 和 y 的 [−1, 1] 范围内在二维表面上创建一个随机放置的点=35=]
  2. 计算这个点离原点有多远,我需要对N个点做这两个步骤

  3. 对每一个N值求出距离原点小于1的点总数。用 A=4pir^2

  4. 计算圆周率
  5. 使用 do 循环计算 pi 作为 N 的函数并将其输出到数据文件。然后将其绘制在图形包中。

这是我的:

program pi 
implicit none

integer :: count, n, i
real :: r, x, y
count = 0

CALL RANDOM_SEED
DO i = 1, n
 CALL RANDOM_NUMBER(x)
 CALL RANDOM_NUMBER(y)
 IF (x*x + y*Y <1.0) count = count + 1
END DO
r = 4 * REAL(count)/n
print *, r
end program pi

我知道我错过了将结果打印到数据文件,我不确定如何实现它。

此程序为我提供了一个很好的 pi 值 (3.149..),但我如何实现步骤 4,以便它输出 pi 的值作为 N 的函数?

谢谢。

简单地将最后的计算步骤放在外层循环中,将n替换为i。也可以添加一个条件来限制打印结果的数量,例如i % 100 = 0 每 100 次迭代打印一次。

program pi 
implicit none

integer :: count, n, i
real :: r, x, y
count = 0

CALL RANDOM_SEED

DO i = 1, n
 CALL RANDOM_NUMBER(x)
 CALL RANDOM_NUMBER(y)
 IF (x*x + y*Y <1.0) count = count + 1

 IF ([condition])
   r = 4 * REAL(count)/i
   print *, i, r
 END IF
END DO

end program pi

这是对@meowgoesthedog 进一步努力的尝试...

Program pi 
implicit none

integer :: count, n, i
real :: r, x, y
count = 0
Integer, parameter :: Slice_o_Pie = 8
Integer :: Don_McLean
Logical :: Purr = .FALSE.

OPEN(NEWUNIT=Don_McLean, FILE='American.Pie')
CALL RANDOM_SEED

DO i = 1, n
  CALL RANDOM_NUMBER(x)
  CALL RANDOM_NUMBER(y)
  IF (x*x + y*Y <1.0) count = count + 1

  Purr = .FALSE.
  IF(MODULO(I, Slice_o_Pie) == 0) Purr = .TRUE.

  IF (Purr) THEN
    r = 4 * REAL(count)/i
    print *, i, r
    WRITE(LUN,*) 'I=',I,'Pi=',Pi
  END IF
END DO

CLOSE(Don_McLean)
end program pi