我试图写一个使用随机数计算Pi的FORTRAN 90程序。这些是我知道我需要采取的步骤:
使用调用random_number(x)在x和y的范围[-1,1]内的2D表面上创建一个随机放置的点。
计算该点离原点有多远,我需要为N点执行这两个步骤。
对于每个N值计算出距原点小于1的点的总量。用A = 4pir ^ 2计算pi
使用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的函数?
感谢。
答案 0 :(得分:0)
只需将最终计算步骤放在外部循环中,然后将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
答案 1 :(得分:0)
这是尝试进一步推进@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