я пытаюсь использовать симуляцию Монте-Карло, чтобы вычислить площадь под кривой (python 3.8)
чтобы в конечном итоге получить этот сюжет
я пробовал этот код
import random, math
NUM_POINTS = 10000
# Function for which we want to find area from (x=0 to 10).
f = lambda x: 5 * math.sin(6 * x) + 3 * math.sin(2 * x) + 7
# Sample rectangle will be (x,y) such that 0 <= x <= 10 and 0 <= y <= 14.
rect_width = 10
rect_height = 14
# Funcitions to generate samples for x and y respectively.
rand_x = lambda: random.uniform(0, rect_width)
rand_y = lambda: random.uniform(0, rect_height)
# Generate random sample points.
points = [(rand_x(), rand_y()) for i in range(NUM_POINTS)]
# Find points under our function
points_under = filter(lambda point: point[1] <= f(point[0]), points)
# Area = area of domain rectangle * num_points_under/num_points_total
area = rect_width * rect_height * len(points_under)*1.0/len(points)
print ("Estimate of area under the curve:", area)
у меня эта ошибка:
объект типа 'фильтр' не имеет len()
Кто-нибудь может мне помочь ?
def
вместо этого. - person wjandrea   schedule 15.11.2020filter
возвращает итератор, а не список. Я не знаю, почему боги Python решили, чтоsum(iterator)
делает очевидную правильную вещь, аlen(iterator)
выдает ошибку. - person Frank Yellin   schedule 15.11.2020