MODULE mod_integ IMPLICIT NONE REAL :: pi CONTAINS REAL FUNCTION trapez(n, xmin, xmax) IMPLICIT NONE INTEGER, INTENT(IN) :: n REAL , INTENT(IN) :: xmin, xmax INTEGER :: i REAL :: h, x h = (xmax - xmin) / n trapez = 0.0 DO i = 1, n x = xmin + (i - 1) * h trapez = trapez + sub_trapez(x, h) END DO RETURN END FUNCTION trapez
368 名前:2/2 [2006/06/02(金) 02:32:02 ]
REAL FUNCTION sub_trapez(x, h) IMPLICIT NONE REAL, INTENT(IN) :: x, h sub_trapez = 0.5 * h * ( func(x) + func(x + h) ) RETURN CONTAINS REAL FUNCTION func(x) IMPLICIT NONE REAL, INTENT(IN) :: x func = EXP( -x**2 ) / SQRT(pi) RETURN END FUNCTION func END FUNCTION sub_trapez END MODULE mod_integ ! PROGRAM oppai USE mod_integ IMPLICIT NONE INTEGER :: i REAL :: s, s1, s2 pi = 4.0 * ATAN(1.0) ! arctan(1.0) = pi / 4; tan(pi/4) = 1.0 ! [-1..1] s1 = trapez(100, -1.0, 0.0) ! [-2..2] s2 = trapez(200, -2.0, 2.0) ! [-inf..+inf] s = trapez(1000, -10.0, 10.0) PRINT *, s, s1, s2 STOP END PROGRAM oppai >>367-368