Добрый день. Я сам совсем недавно (2 дня назад

) начал изучать метод Монте-Карло (понадобилось для решения некоторых диффуров из МСС), поэтому знаю и умею оччень немного. Но сегодня утром написал програмку на Фортране для вычисления примитивного одномерного интеграла от sin(x), x=[0,Pi/2]. Он равен 1, что очень удобно для оценки погрешности. Скажу, что этот интеграл я посчитал на Matlab и на Fortran. Так вот, когда я задал в Matlab 100000 "испытаний", он ушел в себя и н вернулся, пока я пил чай

. А Fortran справился и с 10000000 испытаниями всего за 26 секунд (засекал секундомером

). Все основные элементарные функции в фортране есть, поэтому, полагаю, вашу функцию там можно будет задать, хотя, понятно, что обобщить мою програмку на восьмимерный случай будет непросто. Ну, надеюсь, хоть чем-то вам помогу.
Листинг:
PROGRAM INTEGRAL
REAL, ALLOCATABLE :: RANX(:), RANY(:), X(:), Y(:), S(:)
INTEGER :: NMAX
NMAX=10000000
ALLOCATE (RANX(NMAX))
ALLOCATE (RANY(NMAX))
ALLOCATE (S(NMAX))
ALLOCATE (X(NMAX))
ALLOCATE (Y(NMAX))
CALL RANDOM_SEED()
CALL RANDOM_NUMBER(RANX)
CALL RANDOM_NUMBER(RANY)
XMIN=0.
YMIN=0.
XMAX=3.14159/2
YMAX=1.5
SUM=0.
DO I = 1,NMAX
X(I)=XMIN+(XMAX-XMIN)*RANX(I)
Y(I)=YMIN+(YMAX-YMIN)*RANY(I)
IF (SIN(X(I)).GE.Y(I)) THEN
S(I)=1
ELSE
S(I)=0
ENDIF
SUM=SUM+S(I)
END DO
PL=0.
PL=(XMAX-XMIN)*(YMAX-YMIN)*SUM/NMAX
WRITE(8,3)
3 FORMAT(3X,'ПЛОЩАДЬ ФИГУРЫ')
WRITE(8,22)
22 FORMAT(' ')
WRITE(8,21) PL
21 FORMAT((2X,F12.8))
END PROGRAM INTEGRAL
Я получал результаты 1.000***. То есть, абсолютная погрешность была меньше одной тысячной. Естественно, количество испытаний (NMAX) стоит уменьшить.