RECURSIVE FUNCTION ADAPTIV_KVAD (F, A, B, TOL, ABS_FEL) RESULT (RESULTAT) IMPLICIT NONE INTERFACE FUNCTION F(X) RESULT (FUNKTIONSVAERDE) REAL, INTENT(IN) :: X REAL :: FUNKTIONSVAERDE END FUNCTION F END INTERFACE REAL, INTENT(IN) :: A, B, TOL REAL, INTENT(OUT) :: ABS_FEL REAL :: RESULTAT REAL :: STEG, MITT REAL :: EN_TRAPETS_YTA, TVAA_TRAPETS_YTA REAL :: VAENSTER_YTA, HOEGER_YTA REAL :: DIFF, ABS_FEL_V, ABS_FEL_H ! STEG = B - A MITT = 0.5 * (A + B) EN_TRAPETS_YTA = STEG * 0.5 * (F(A) + F(B)) TVAA_TRAPETS_YTA = STEG * 0.25 * (F(A) + F(MITT)) + & STEG * 0.25 * (F(MITT) + F(B)) DIFF = TVAA_TRAPETS_YTA - EN_TRAPETS_YTA ! IF ( ABS(DIFF) < TOL ) THEN ! RESULTAT = TVAA_TRAPETS_YTA + DIFF/3.0 ! ABS_FEL = ABS(DIFF) ! ELSE VAENSTER_YTA = ADAPTIV_KVAD (F, A, MITT, 0.5*TOL, ABS_FEL_V) HOEGER_YTA = ADAPTIV_KVAD (F, MITT, B, 0.5*TOL, ABS_FEL_H) RESULTAT = VAENSTER_YTA + HOEGER_YTA ABS_FEL = ABS_FEL_V + ABS_FEL_H END IF END FUNCTION ADAPTIV_KVAD