fortran95中怎样用蒙特卡洛的方法求积分

如题所述

随机的取出足够数量的区间上的点,计算出被积函数f(x)的值,然后做一下平均就可以了。比如说计算π的值,可以由以下积分计算出来:

下面由我给出fortran算法。

program mymainprogram

    implicit none

    real*8::t1,t2,a1=0.0,b1=1.0

    integer*4::n=100000000

    call cpu_time(t1)

    write(*,*)'result pi=',mentekarol(a1,b1,100000000)

    call cpu_time(t2)

    write(*,*)'time',t2-t1

contains

function mentekarol(a,b,n)result(s)

    real*8,intent(in)::a,b

    real*8::s

    real*8::sum=0,randnum

    integer*4::i,n

    do i=1,n

        call random_seed()

        call random_number(randnum)

        randnum=a+(b-a)*randnum

        sum=sum+4.0/(1.0+randnum*randnum)

    enddo

    s=sum/n

end function mentekarol

end


计算结果如下:

可见还是比较准确的了。

温馨提示:答案为网友推荐,仅供参考
相似回答