Activité 10 - Méthode d'Archimède

Présentation de l'activité

  • Référence au programme :
    • Spécialité mathématiques de première générale : Approximation du nombre $\pi$ par la méthode d’Archimède.
  • Description : activité d'approximation du nombre $\pi$ permettant de faire travailler les notions de géométrie du plan, les fonctions trigonométriques et les suites.

Description de la méthode d'Archimède

La méthode d'Archimède permet d'obtenir une approximation du nombre $\pi$. Pour cela on calcule les périmètres de polygones réguliers inscrits et circonscrits à un cercle de rayon $\dfrac{1}{2}$. Plus le nombre de côtés du polygone sera important, plus on se rapprochera du périmètre du cercle, à savoir $\pi$. archimede.png

Calcul du périmètre des polygones

On pose $a_n$ le périmètre d'un polygone régulier ayant $n$ côtés et inscrit dans le cercle de rayon $\dfrac{1}{2}$ et $b_n$ le périmètre d'un polygone régulier ayant $n$ côtés et circonscrit au cercle de rayon $\dfrac{1}{2}$. On vérifie que : $$ a_n = n \sin ( \frac{\pi}{n}) \text{ et }b_n = n \tan ( \frac{\pi}{n}). $$

Suggestions pédagogiques
  • Mathématiques débranchées

    Demander de faire un dessin des polygones inscrits et circonscrits, puis de démontrer les expressions de $a_n$ et de $b_n$ (à partir des lignes trigonométriques dans un triangle rectangle bien choisi.)

Implémentation de la méthode

On peut implémenter cette méthode utilisant les fonctions $\textrm{sinus}$ et $\textrm{tangente}$ (qui étaient inconnues d'Archimède).

In [1]:
from math import sin,tan,pi

def archimedeSimple(n):
    return n*sin(pi/n),n*tan(pi/n)

print(archimedeSimple(5))
(2.938926261462366, 3.6327126400268046)
Suggestions pédagogiques
  • Écrire un programme

    Écrire une fonction archimedeSimple qui prend en paramètre une variable entière $n$ représentant le nombre de côtés des polygones et renvoyant le couple $(a_n,b_n)$.

  • Expliquer un programme

    L'illustration géométrique permet de conjecturer que ces deux suites convergent vers le nombre $\pi$. Pour une valeur de $n$ donnée, qui de $a_n$ ou de $b_n$ semble le plus proche de $\pi$ ? Exprimer les écarts entre d'une part $a_n$ et $\pi$ et d'autre part $b_n$ et $\pi$ lorsque les polygones sont des carrés ($n=4$).

Animation susceptible d'être présentée aux élèves

Cette animation montre sur la figure de gauche les polygones inscrits et circonscrits et donne sur la figure de droite le périmètre de chacun. On peut ainsi visualiser la convergence vers $\pi$.

In [2]:
import matplotlib.pyplot as plt
from matplotlib.patches import Circle,RegularPolygon
from IPython.display import HTML
import matplotlib.animation
from math import cos

# nombre de cotés maximum - 3
N=15

fig, (ax1, ax2) = plt.subplots(1, 2,figsize=(12, 6))
l= .7
ax1.set_xlim(( -l, l))
ax1.set_ylim((-l, l))
ax2.set_xlim(( 4, N+3))
ax2.set_ylim((2.75, 4.25))
approximationsInf = []
approximationsSup = []

cercle = Circle((0, 0), .5, facecolor='none',
                edgecolor=(0, 0, 0), linewidth=2, alpha=0.75)
courbeInf, = ax2.plot([],[],'-o',color="#1e7fcb")
courbeSup, = ax2.plot([],[],'-o',color='orange')

def init():
    return []

def animate(i):
    inf,sup = archimedeSimple(i+4)
    approximationsInf.append(inf)
    approximationsSup.append(sup)
    ax1.clear()
    ax1.set_xlim(( -l, l))
    ax1.set_ylim((-l, l))
    ax1.add_patch(cercle)
    long = 0.5/cos(pi/(i+4))
    PI = RegularPolygon(numVertices = 4+i,xy=(0, 0), radius=.5, orientation=0.79,edgecolor="#1e7fcb", facecolor='none',
                linewidth=2, alpha=0.5)
    PS = RegularPolygon((0, 0), 4+i, radius=long, orientation=.79, facecolor='none',
                edgecolor='orange', linewidth=2, alpha=0.5)
    ax1.add_patch(PI)
    ax1.add_patch(PS)
    ax1.set_title('{} côtés'.format(i+4),color="#1e7fcb",fontsize=14)
    courbeInf.set_data(range(4,i+5),approximationsInf)
    courbeSup.set_data(range(4,i+5),approximationsSup)
    return PI

ax2.plot([4,3+N],[pi,pi],'--',color='green')
ax2.legend(['Polygones intérieurs','Polygones extérieurs','$\pi$'])

plt.close ()
ani = matplotlib.animation.FuncAnimation(fig, animate,init_func=init,frames=N,blit=False,interval=500)
# l'un ou l'autre
HTML(ani.to_jshtml())
#HTML(ani.to_html5_video())
Out[2]:


Once Loop Reflect