Интегрирование методом Монте-Карло
    Интегрирование методом Монте-Карло (Monte Carlo integration) — способ приближенного вычисления определенных интегралов при помощи моделирования методом Монте-Карло. Рассмотрим задачу вычисления площади фигуры, описываемой предикатом 
    P(x, y)
    , который истинен для точек 
    (x, y)
    , принадлежащих фигуре, и ложен для точек вне фигуры. Например, область, содержащаяся в круге с радиусом 
    3
     и центром в точке 
    (5, 7)
    , описывается предикатом, проверяющим 
    (x - 5)² + (y - 7)² ≤ 3²
    . Чтобы оценить площадь фигуры, описываемой таким предикатом, для начала выберем прямоугольник, который содержит нашу фигуру. Например, прямоугольник с углами 
    (2, 4)
     и 
    (8, 10)
    , расположенными по диагонали, содержит вышеописанный круг. Нужный нам интеграл — площадь той части прямоугольника, которая лежит внутри фигуры. Мы можем оценить интеграл, случайным образом выбирая точки 
    (x,y)
    , лежащие внутри прямоугольника, и проверяя для каждой точки 
    P(x, y)
    , чтобы определить, лежит ли точка внутри фигуры. Если мы проверим много точек, доля тех, которые окажутся внутри области, даст нам приближенное значение отношения площадей фигуры и прямоугольника. Таким образом, домножив это значение на площадь прямоугольника, мы получим приближенное значение интеграла.
    Реализуйте интегрирование методом Монте-Карло в виде процедуры 
    estimate-integral
    , которая в качестве аргументов принимает предикат 
    P
    , верхнюю и нижнюю границы прямоугольника 
    x1, x2, y1
     и 
    y2
    , а также число проверок, которые мы должны осуществить, чтобы оценить отношение площадей. Ваша процедура должна использовать ту же самую процедуру 
    monte-carlo
    , которая выше использовалась для оценки значения 
    π
    . Оцените 
    estimate-integral
     при помощи 
    π
     измерив площадь единичного круга.
    Вам может пригодиться процедура, которая выдает число, случайно выбранное внутри данного отрезка. Нижеприведенная процедура 
    random-in-range
     решает эту задачу, используя процедуру 
    random
    , введенную в разделе 
    1.2.6
    , которая возвращает неотрицательное число меньше своего аргумента.
(define (random-in-range low high)
    (let ((range (- high low)))
        (+ low (random range))))
А это точно квадрат?)