ICC-P Série 8 Corrigé
Code:
from random import random
def random_estimate(nb_points: int) -> float:
count_inside = 0
start = -1
side = 2
for _ in range(nb_points):
# Par simplicité, on place le centre en 0,0
x = start + side * random()
y = start + side * random()
if (x**2 + y**2) < 1:
count_inside += 1
return 4 * count_inside / nb_points
for c in [100, 1000, 10000]:
for reapeat in range(5):
print(f"random_estimate({c}) me donne: {random_estimate(c)}")
# On observe que cet algorithme estime la valeur de pi:
# Plus le nombre de points est élevé, plus l'estimation est précise.
def grid_estimate(n: int) -> float:
count_inside = 0
sub_square_side = 2/n
for i in range(n):
start_x = (2 * i / n) - 1
for j in range(n):
start_y = (2 * j / n) - 1
x = start_x + sub_square_side * random()
y = start_y + sub_square_side * random()
if x ** 2 + y ** 2 < 1:
count_inside += 1
return 4 * count_inside / ( n * n )
for n in [10, 32, 100]:
for reapeat in range(5):
print(f"grid_estimate({n}) me donne: {grid_estimate(n)}")
# On remarque que la version grille est plus précise pour le même nombre de points.
# Par exemple: grid_estimate(100) est souvent plus précis que random_estimate(10000)
def random_estimate(nb_points: int) -> float:
count_inside = 0
start = -1
side = 2
for _ in range(nb_points):
# Par simplicité, on place le centre en 0,0
x = start + side * random()
y = start + side * random()
if (x**2 + y**2) < 1:
count_inside += 1
return 4 * count_inside / nb_points
for c in [100, 1000, 10000]:
for reapeat in range(5):
print(f"random_estimate({c}) me donne: {random_estimate(c)}")
# On observe que cet algorithme estime la valeur de pi:
# Plus le nombre de points est élevé, plus l'estimation est précise.
def grid_estimate(n: int) -> float:
count_inside = 0
sub_square_side = 2/n
for i in range(n):
start_x = (2 * i / n) - 1
for j in range(n):
start_y = (2 * j / n) - 1
x = start_x + sub_square_side * random()
y = start_y + sub_square_side * random()
if x ** 2 + y ** 2 < 1:
count_inside += 1
return 4 * count_inside / ( n * n )
for n in [10, 32, 100]:
for reapeat in range(5):
print(f"grid_estimate({n}) me donne: {grid_estimate(n)}")
# On remarque que la version grille est plus précise pour le même nombre de points.
# Par exemple: grid_estimate(100) est souvent plus précis que random_estimate(10000)
Modifié le: lundi, 7 avril 2025, 17:01