如何使用 Monte Carlo Simulation 计算 Pi?
How to calculate Pi using Monte Carlo Simulation?
我正在尝试编写一个使用随机数计算 Pi 的 FORTRAN 90 程序。这些是我知道我需要执行的步骤:
使用调用 random_number(x).
[在 x 和 y 的 [−1, 1] 范围内在二维表面上创建一个随机放置的点=35=]
计算这个点离原点有多远,我需要对N个点做这两个步骤
对每一个N值求出距离原点小于1的点总数。用 A=4pir^2
计算圆周率
使用 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
我正在尝试编写一个使用随机数计算 Pi 的 FORTRAN 90 程序。这些是我知道我需要执行的步骤:
使用调用 random_number(x).
[在 x 和 y 的 [−1, 1] 范围内在二维表面上创建一个随机放置的点=35=]计算这个点离原点有多远,我需要对N个点做这两个步骤
对每一个N值求出距离原点小于1的点总数。用 A=4pir^2
计算圆周率
使用 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