Chapitre Programmation
Cahier d'algorithmique et de programmation


Chargement de l'audio en cours
Cacher

Cacher la barre d'outils

Plus

Plus





Fonctions





3
Calculs d’aires par la méthode de Monte Carlo
★★★

Compétence : Utiliser des fonctions
Compétence : Utiliser plusieurs instructions conditionnelles
Compétence : Utiliser des boucles bornées
Voir fiche n° 2 : Les variables
Voir fiche n° 3 : Les fonctions
Voir fiche n° 4 : Les instructions conditionnelles
Voir fiche n° 5 : Les boucles bornées


On sait que sur l’intervalle [0;1][0 \: ; 1], la représentation graphique de la fonction cube est en dessous de celle de la fonction carré (voir le manuel page 125). Par ailleurs, on sait que, pour tout x[0;1]x \in [0 \: ; 1], on a aussi x2[0;1]x^2 \in [0 \: ; 1] et x3[0;1].x^3 \in [0 \: ; 1]. L’objectif de cette activité est de déterminer une approximation de l’aire entre les deux courbes. Pour cela, on choisit 100000100\,000 points au hasard dont l’abscisse et l’ordonnée sont comprises entre 00 et 1.1. Puis, pour chaque point, on teste s’il est entre les deux courbes représentatives. On admet que la proportion de points situés entre les deux représentations graphiques par rapport à l’ensemble des points est égale à l’aire souhaitée.

1. Compléter le programme ci-après pour que la variable points_dans_zone soit augmentée de 1 si, et seulement si, le point de coordonnées (x;y)(x \: ; y) est situé entre les deux courbes.
2. Exécuter plusieurs fois le programme. Le résultat final obtenu est-il toujours le même ?
3. Modifier le programme pour qu’il utilise 1000000010\,000\,000 points au lieu de seulement 100000.100\,000. Commenter les résultats obtenus.

from random import random

points_dans_zone = 0

for i in range(100000):
  x = random()
  y = random()
  #A compléter

aire = points_dans_zone/100000
print(aire)

1
Algorithme de dichotomie
☆☆

Compétence : Utiliser une boucle non bornée et des instructions conditionnelles
Voir fiche n° 2 : Les variables
Voir fiche n° 4 : Les instructions conditionnelles
Voir fiche n° 6 : Les boucles non bornées


On considère la fonction f(x)=x22f(x) = x^2-2. Cette fonction s’annule pour x=2.x = \sqrt{2}.

1. Trouver a[0,+[a \in [0, + \infty[ tel que f(a)<0f(a) \lt 0 et b[0,+[b \in [0, + \infty[ tel que f(b)>0.f(b) > 0.

2. Justifier que f(a)×f(b)<0f(a) \times f(b) \lt 0.

3. L’algorithme suivant, appelé algorithme de dichotomie, permet de trouver une approximation de 2\sqrt{2} en utilisant la fonction ff et les nombres aa et bb cités plus haut. Le réel strictement positif pp est la précision que l’on souhaite obtenir.

Tant que ba>p faire:Si f(b)×f(a+b2)<0:a=a+b2Sinon :b=a+b2Fin SiTant que \boxed{ \begin{array} { l } {\text{Tant que } \left|b - a\right| > p \text{ faire}: } \\ \quad \text{Si } f(b) \times f\left(\dfrac{a + b}{2}\right) \lt 0: \\ \qquad a = \dfrac{a + b}{2}\\ \quad \text {Sinon :} \\ \qquad b = \dfrac{a + b}{2} \\ \quad \text {Fin Si} \\ \text {Tant que} \end{array} }

Le programme ci-après est la traduction de cet algorithme en Python. Le compléter et l’exécuter.

def f(x):
  return x**2 - 2


a = 0
b = 4
precision = 0.001

while #À compléter
  if f((a + b)/2)*f(b) < 0:
    a = #À compléter
  else:
    b = #À compléter

print(a)


2
Fonctions de référence
★★

Compétence : Utiliser une instruction conditionnelle
Compétence : Utiliser une boucle bornée
Voir fiche n° 2 : Les variables
Voir fiche n° 4 : Les instructions conditionnelles


Sur l’intervalle [0;1][0 \: ; 1] la représentation graphique de la fonction cube est située sous la représentation graphique de la fonction carré. Le programme ci-après cherche à déterminer l’écart maximum entre ces deux courbes et pour quelle valeur de xx ce maximum est atteint.

1. Quelle précision sur xx sera obtenue par le programme ?

2. a. Sous quelle condition devra-t-on remplacer la valeur de deltamax par celle de delta ?

b. Compléter alors la ligne 6 du programme.
3. Modifier le programme pour obtenir une précision à 10410^{-4} près.

xmax = 0
deltamax = 0

for i in range(1000):
  delta = (i/1000)**2 - (i/1000)**3
  if #A compléter
    deltamax = delta
    xmax = i/1000
print(xmax)
print(deltamax)

Connectez-vous pour ajouter des favoris

Pour pouvoir ajouter ou retrouver des favoris, nous devons les lier à votre compte.Et c’est gratuit !

Livre du professeur

Pour pouvoir consulter le livre du professeur, vous devez être connecté avec un compte professeur et avoir validé votre adresse email académique.

Votre avis nous intéresse !
Recommanderiez-vous notre site web à un(e) collègue ?

Peu probable
Très probable

Cliquez sur le score que vous voulez donner.

Dites-nous qui vous êtes !

Pour assurer la meilleure qualité de service, nous avons besoin de vous connaître !
Cliquez sur l'un des choix ci-dessus qui vous correspond le mieux.

Nous envoyer un message




Nous contacter?