Approximation de $\pi$ À partir de l'encadrement de l'aire du disque Cette méthode est inspirée de celle d'Archimède.
Étant donné un cercle de rayon $1$, on construit deux polygones à $n$ côtés, l'un inscrit et l'autre exinscrit. a = 1.3 Xmin = -a Xmax = a Ymin = -a Ymax = a couleur = noir O = [0,0] r = 1 cercle(O,r) n = 6 couleur = rouge P = [r,0] for(i = 0; i < n; i++){ Q = rotation2d(O,2*%PI/n,P) segment(P,Q) P = Q } couleur = bleu P = [r,0] for(i = 0; i < n; i++){ segment([rotation2d(O,%PI/n,P)[0]/cos(%PI/n),rotation2d(O,%PI/n,P)[1]/cos(%PI/n)],[rotation2d(O,-%PI/n,P)[0]/cos(%PI/n),rotation2d(O,-%PI/n,P)[1]/cos(%PI/n)]) P = rotation2d(O,2*%PI/n,P) } L'aire du disque vaut $\pi\times 1^2=\pi$ et l'idée est de calculer l'aire des deux polygones pour obtenir un encadrement de $\pi$. En augmentant le nombre de côtés de on obtient alors un encadrement de plus en plus précis. a = 1.3 Xmin = -a Xmax = a Ymin = -a Ymax = a couleur = noir O = [0,0] r = 1 function trace(n){ peinture = blanc transparence = 1 rectangle([-2*a,2*a],10*a,10*a) couleur = noir transparence = 0 texte(n+" côtés",[-r/5,0]) cercle(O,r) couleur = rouge P = [r,0] for(i = 0; i < n; i++){ Q = rotation2d(O,2*%PI/n,P) segment(P,Q) P = Q } couleur = bleu P = [r,0] for(i = 0; i < n; i++){ segment([rotation2d(O,%PI/n,P)[0]/cos(%PI/n),rotation2d(O,%PI/n,P)[1]/cos(%PI/n)],[rotation2d(O,-%PI/n,P)[0]/cos(%PI/n),rotation2d(O,-%PI/n,P)[1]/cos(%PI/n)]) P = rotation2d(O,2*%PI/n,P) } } function evol(n){ trace(n) if( n < 20 ){ n = n +1} else{ n = 4 } setTimeout(function(){ evol(n)},500) } evol(4) Le polygone inscrit On détermine dans un premier temps l'aire du triangle $OAB$ construit ci-dessous. On définit de plus le point $I$ milieu de $[AB]$. a = 1.3 Xmin = -a Xmax = a Ymin = -a Ymax = a couleur = noir O = [0,0] r = 1 cercle(O,r) n = 6 couleur = rouge P = [r,0] for(i = 0; i < n; i++){ Q = rotation2d(O,2*%PI/n,P) segment(P,Q) P = Q } P = [r,0] segment(O,P) segment(O,rotation2d(O,2*%PI/n,P)) arcCercle(O,r/5,0,2*%PI/n) segment(O,[rotation2d(O,%PI/n,P)[0]*cos(%PI/n),rotation2d(O,%PI/n,P)[1]*cos(%PI/n)],[4,2]) texte("2π/n",[r/5,tan(%PI/n)*r/5]) texte("O",[-0.1,-0.1]) texte("A",[1.05,-0.05]) texte("B",[0.5,0.9]) texte("I",[0.8,0.4]) trait = 0.5 segment([0.7,0.4],[0.67,0.45]) segment([0.67,0.45],[0.72,0.48]) Le triangle $OAB$ étant isocèle, la droite $(OI)$ est une médiatrice de $[AB]$ et l'angle $\widehat{IOA}$ mesure $\dfrac{\pi}{n}$.
On applique les formules de trigonométrie dans le triangle $OIB$ et on obtient : Ainsi, l'aire du triangle $OAB=\dfrac{OI\times AB}{2}$ $=$ $\dfrac{OI\times2IB}{2}$ $=$ $OI\times IB$ $=$ $\cos\left( \dfrac{\pi}{n} \right)\sin\left( \dfrac{\pi}{n} \right)$.

Le polygone inscrit étant formés de $n$ triangles tels que $OAB$, on a que son aire vaut : $n\cos\left( \dfrac{\pi}{n} \right)\sin\left( \dfrac{\pi}{n} \right)$. Le polygone exinscrit Comme précédemment on détermine dans un premier temps l'aire du triangle $OCD$. On note également que $A$ est le milieu de $[CD]$. a = 1.3 Xmin = -a Xmax = a Ymin = -a Ymax = a couleur = noir O = [0,0] r = 1 cercle(O,r) n = 6 couleur = bleu P = [r,0] for(i = 0; i < n; i++){ segment([rotation2d(O,%PI/n,P)[0]/cos(%PI/n),rotation2d(O,%PI/n,P)[1]/cos(%PI/n)],[rotation2d(O,-%PI/n,P)[0]/cos(%PI/n),rotation2d(O,-%PI/n,P)[1]/cos(%PI/n)]) P = rotation2d(O,2*%PI/n,P) } P = [r,0] segment(O,[rotation2d(O,%PI/n,P)[0]/cos(%PI/n),rotation2d(O,%PI/n,P)[1]/cos(%PI/n)]) segment(O,[rotation2d(O,-%PI/n,P)[0]/cos(%PI/n),rotation2d(O,-%PI/n,P)[1]/cos(%PI/n)]) arcCercle(O,r/5,-%PI/n,%PI/n) segment(O,[r,0],[4,2]) texte("2π/n",[r/4,0]) texte("O",[-0.1,-0.1]) texte("A",[1.05,-0.05]) texte("C",[1.05,-0.65]) texte("D",[1.05,0.65]) trait = 0.5 segment([0.95,0],[0.95,0.05]) segment([0.95,0.05],[1,0.05]) Le triangle $OCD$ est isocèle et la droite $(OA)$ est la médiatrice de $[CD]$, ainsi le triangle $OAD$ est rectangle en $A$ et l'angle $\widehat{AOD}$ mesure $\dfrac{\pi}{n}$.
En appliquant les formules de trigonométrie au triangle $OAD$ on a : $AD=OA\times\tan\left( \dfrac{\pi}{n} \right)$.
L'aire de $OCD$ vaut donc $\dfrac{OA\times CD}{2}$ $=$ $\dfrac{1\times2\times AD}{2}$ $=$ $\tan\left( \dfrac{\pi}{n} \right)$.

Le polygone exinscrit étant formés de $n$ triangles tels que $OCD$, on a que son aire vaut : $n\tan\left( \dfrac{\pi}{n} \right)$. Encadrement et approximation de $\pi$ D'après les deux résutalts précédents, on a que pour tout entier $n\geq3$ : $$n\cos\left( \dfrac{\pi}{n} \right)\sin\left( \dfrac{\pi}{n} \right)\leq \pi \leq n\tan\left( \dfrac{\pi}{n} \right).$$
Le problème maintenant reste d'avoir les valeurs de $\cos\left( \dfrac{\pi}{n} \right)$ et $\sin\left( \dfrac{\pi}{n} \right)$, puisque $\tan\left( \dfrac{\pi}{n} \right)=\dfrac{\sin\left( \dfrac{\pi}{n} \right)}{\cos\left( \dfrac{\pi}{n} \right)}$.

Rappel
Pour tout réel $a$ et $b$ : Et en utilisant ces formules avec $a=b$, et $\cos^2(a)+\sin^2(a)=1$, on a également : Nous allons ici considérer des valeurs de $n$ particulières de la forme $n=2^k\times6$, avec $k\in\mathbb{N}$.
On remarque que l'angle $\dfrac{\pi}{2^{k+1}\times6}$ et la moitié de l'angle $\dfrac{\pi}{2^{k}\times6}$.
Ainsi, pour tout entier $k$, on a :
$\cos\left( \dfrac{\pi}{2^k\times6} \right)$ $=$ $\cos\left( \dfrac{\pi}{2^{k+1}\times6}+\dfrac{\pi}{2^{k+1}\times6} \right)$
$=$ $2\cos^2\left( \dfrac{\pi}{2^{k+1}\times6} \right)-1$.
Et :
$\sin\left( \dfrac{\pi}{2^k\times6} \right)$ $=$ $2\sin\left( \dfrac{\pi}{2^{k+1}\times6}+\dfrac{\pi}{2^{k+1}\times6} \right)$
$=$ $2\sin\left( \dfrac{\pi}{2^{k+1}\times6} \right)\cos\left( \dfrac{\pi}{2^{k+1}\times6} \right)$.

On pose alors, pour tout entier $k$, $u_k = \sin\left( \dfrac{\pi}{2^{k}\times6} \right)$ et $v_k=\cos\left( \dfrac{\pi}{2^{k}\times6} \right)$.
Les deux égalités obtenues précédemment deviennent alors : $$\left\{ \begin{array}{rcl} u_k & = & 2u_{k+1}v_{k+1}\\ v_k & = & 2v_{k+1}^2-1 \end{array}\right.$$ On remarque que ces cosinus et sinus ne sont jamais nuls, on peut donc diviser par ces nombres et le système devient : $$\left\{ \begin{array}{rcl} u_{k+1} & = & \dfrac{u_k}{2v_{k+1}}\\ 2v_{k+1}^2 & = & v_k+1 \end{array}\right.$$ $$\Longleftrightarrow\left\{ \begin{array}{rcl} u_{k+1} & = & \dfrac{u_k}{2v_{k+1}}\\ v_{k+1}^2 & = & \dfrac{1}{2}(v_k+1) \end{array}\right.$$ $$\Longleftrightarrow\left\{ \begin{array}{rcl} u_{k+1} & = & \dfrac{u_k}{2v_{k+1}}\\ \\ v_{k+1} & = & \sqrt{\dfrac{1}{2}(v_k+1)} \end{array}\right.$$ $$\Longleftrightarrow\left\{ \begin{array}{rcl} u_{k+1} & = & \dfrac{u_k}{2v_{k+1}}\\ \\ v_{k+1} & = & \dfrac{1}{\sqrt{2}}\sqrt{v_k+1} \end{array}\right.$$ $$\Longleftrightarrow\left\{ \begin{array}{rcl} u_{k+1} & = & \dfrac{u_k}{2v_{k+1}}\\ \\ v_{k+1} & = & \dfrac{\sqrt{2}}{2}\sqrt{v_k+1} \end{array}\right.$$ $$\Longleftrightarrow\left\{ \begin{array}{rcl} u_{k+1} & = & u_k\dfrac{\sqrt{2}}{2\sqrt{v_k+1}}\\ \\ v_{k+1} & = & \dfrac{\sqrt{2}}{2}\sqrt{v_k+1} \end{array}\right.$$ $$\Longleftrightarrow\left\{ \begin{array}{rcl} u_{k+1} & = & \dfrac{\sqrt{2}u_k}{2\sqrt{v_k+1}}\\ \\ v_{k+1} & = & \dfrac{\sqrt{2}}{2}\sqrt{v_k+1}. \end{array}\right.$$ Les suites $(u_k)$ et $(v_k)$ sont donc définies par double récurrence, avec $u_0=\sin\left( \dfrac{\pi}{6} \right)$ $=$ $\dfrac{1}{2}$ et $v_0=\cos\left( \dfrac{\pi}{6} \right)$ $=$ $\dfrac{\sqrt{3}}{2}$.

On peut alors écrire un algorithme pour obtenir des encadrements en fonctions des valeurs de $n$ s'écrivant sous la forme $2^k\times6$.

Algorithme
La fonction trigo permet de calculer $\cos\left( \dfrac{\pi}{2^k\times6} \right)$ et $\sin\left( \dfrac{\pi}{2^k\times6} \right)$.

La fonction encadrement retourne l'encadrement de $\pi$ pour $n=2^k\times6$ que l'on avait établie précédemment : $$n\cos\left( \dfrac{\pi}{n} \right)\sin\left( \dfrac{\pi}{n} \right)\leq \pi \leq n\tan\left( \dfrac{\pi}{n} \right).$$

from math import * def trigo(k): u = 0.5 v = sqrt(3)/2 for i in range(0,k): u = sqrt(2)*u/(2*sqrt(v+1)) v = sqrt(2)*sqrt(v+1)/2 return [u,v] def encadrement(k): X = trigo(k) sin = X[0] cos = X[1] n =6*2**k return [n*sin*cos , n*sin/cos] print "n = ",6*2**1 print "sinus et cosinus" print trigo(1) print "Encadrement" print encadrement(1) print "" print "n = ",6*2**5 print "sinus et cosinus" print trigo(5) print "Encadrement" print encadrement(5) print "" print "n = ",6*2**17 print "sinus et cosinus" print trigo(17) print "Encadrement" print encadrement(17) print ""

À partir d'une série La série de Madhava-Leibniz La formule de base est : $$\dfrac{\pi}{4} = 1-{1\over 3}+{1\over 5}-{1\over 7}+{1\over 9}-{1\over 11}+{1\over 13}-\cdots $$ def ml(n): s = 1.0 for i in range(1,n): s = s+((-1)**i)/(2.0*i+1) return 4*s print ml(10) print ml(100) print ml(1000) print ml(10000) La série de Bâle $$\dfrac{\pi^2}{6}=1+\dfrac{1}{4}+\dfrac{1}{9}+\dfrac{1}{16}+\dfrac{1}{25}+\cdots$$ from math import * def bale(n): s = 1 for i in range(2,n+1): s = s + 1.0/(i*i) return sqrt(6*s) print bale(10) print bale(100) print bale(1000) print bale(10000) Formule de John Machin La suite $(S_n)$ définie par : $$S_n=4\displaystyle \sum_{k=0}^{n} \dfrac{(-1)^k}{2k+1} \left( \dfrac{4}{5^{2k+1}}-\dfrac{1}{{239}^{2k+1}}\right)$$ converge vers $\dfrac{\pi}{4}$. def machin(n): s = 951.0/1195 for i in range(1,n): s = s + (-1)**i/(2.0*i+1)*( 4/(5.0**(2*i+1)) - 1/(239.0**(2*i+1)) ) return 4*s print machin(1) print machin(2) print machin(3) print machin(7) print machin(8)