En tête general

(C) Copyright Franck CHEVRIER 2019-2020 http://www.python-lycee.com/

Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.

Algorithme de Briggs pour le calcul du logarithme (corrigé)

*Le but de l'activité est d'obtenir des valeurs approchées de logarithmes népérien à l'aide des opérations élémentaires et de la racine carrée.*

Sommaire

1. Principe de l'algorithme de Briggs
2. Implémentation en langage Python

1. Principe de l'algorithme de Briggs

On considère un réel $a>0$, et on souhaite évaluer $ln(a)$.



1.1. On pose $u_0=a$ et pour tout $n\in\mathbb{N}$, $u_{n+1}=\sqrt{u_n}$.
$\quad\;$a. Démontrer par récurrence que pour tout $n\in\mathbb{N}$, $u_n=e^{\;ln(a)/2^n}$.
$\quad\;$b. En déduire que $(u_n)_{n \geq 0}$ converge et que $\lim\limits_{n \to +\infty}{u_n}=1$

a. Notons $P(n)$ la propriété " $u_n=e^{\;ln(a)/2^n}$ ".

  • Initialisation :
    $e^{\;ln(a)/2^0}=e^{\;ln(a)}=a=u_0$ donc $P(0)$ est vraie.
  • Hérédité :
    Supposons que $P(n)$ soit vraie pour un $n \geq 0$ fixé.
    Alors $u_{n+1}=\sqrt{u_n}=\sqrt{e^{\;ln(a)/2^n}}=e^{\;\frac{1}{2}ln(a)/2^n}=e^{\;ln(a)/2^{n+1}}$
    $P(n+1)$ est donc vraie.
  • Conclusion :
    La propriété $P(n)$ étant initialisée pour $n=0$ et héréditaire pour $n \geq 0$, elle est vraie pour tout $n \geq 0$.
b. Comme $\lim\limits_{n \to +\infty}{\frac{ln(a)}{2^n}}=0$ et $\lim\limits_{X \to 0}{e^X}=1$, on en déduit (par composition des limites) que $\lim\limits_{n \to +\infty}{u_n}=1$.

1.2.a. En calculant de deux façons le nombre dérivé de la fonction $ln$ en $1$, démontrer que $\lim\limits_{x \to 1}\frac{ln(x)}{x-1}=1$
$\quad\;$b. En déduire que $\lim\limits_{n \to +\infty}\frac{ln(u_n)}{u_n-1}=1$.
$\quad\;$c. Justifier que $2^n ln(u_n)=ln(a)$, et en déduire que pour $n$ suffisamment grand, on a $ln(a) \approx 2^n(u_n-1)$.

a. La fonction dérivée de $ln$ est la fonction inverse, donc $ln'(1)=\frac{1}{1}=1$
$\quad$D'autre part, en écrivant ce nombre dérivé comme limite d'un taux d'accroissement, on a:
$\quad \lim\limits_{x \to 1}\frac{ln(x)-ln(1)}{x-1}=1$
$\quad \lim\limits_{x \to 1}\frac{ln(x)}{x-1}=1$

b. Comme $\lim\limits_{n \to +\infty}{u_n}=1$ et $\lim\limits_{x \to 1}\frac{ln(x)-ln(1)}{x-1}=1$, on en déduit par composition de limites que $\lim\limits_{n \to +\infty}\frac{ln(u_n)}{u_n-1}=1$.

c. $2^n ln(u_n)=2^n ln (e^{\;ln(a)/2^n})=2^n \times \frac{ln(a)}{2^n}=ln(a)$
$\quad$On a donc $\frac{ln(u_n)}{u_n-1}=\frac{ln(a)}{2^n (u_n-1)}$.
$\quad$Comme $\lim\limits_{n \to +\infty}\frac{ln(u_n)}{u_n-1}=1$, on en déduit que $\lim\limits_{n \to +\infty}2^n(u_n-1)=ln(a)$
$\quad$Finalement, pour $n$ suffisamment grand, on a $ln(a) \approx 2^n(u_n-1)$.

1.3. Dans cette question, on pose $a=2$.
$\quad\;$Recopier et compléter le tableau suivant jusqu'à obtenir une valeur $u_n$ telle que $\lvert u_n-1 \rvert<10^{-2}$ (c'est à dire $u_n$ "proche" de $1$).
$\quad\;$On pourra effectuer les calculs à la calculatrice ou à l'aide de la zone de saisie Python fournie plus bas.
$\quad\;$Quelle valeur approchée de $ln(2)$ peut-on en déduire ?

$n$ $u_n$ $\lvert u_n-1\rvert<10^{-2}$
0 2 Faux
1 1,414213562 Faux
2 1,189207115 Faux
3 1,090507733 Faux
4 1,044273782 Faux
5 1,021897149 Faux
6 1,010889286 Faux
7 1,005429901 Vrai
........ ... ......................... ... ...............................

On en déduit que $ln(2) \approx 2^7(u_7-1) \approx 0,6950273424$

In [1]:
#Cette zone de saisie Python peut être utilisée pour le calcul des valeurs successives de la suite u
from math import sqrt #Cette syntaxe permet d'utiliser la fonction sqrt pour le calcul d'une racine carrée

2. Implémentation en langage Python

On considère un réel $a>0$ et un entier $m \in\mathbb{N}$, et on souhaite obtenir une valeur approchée de $ln(a)$ pour le rang $n$ tel que $\lvert u_n-1 \rvert<10^{-m}$.

2.1. Écrire une fonction Python Briggs qui reçoit en argument la valeur $a$ et l'entier $m$, et qui renvoie la valeur approchée de $ln(a)$ obtenue avec l'algorithme de Briggs.
La syntaxe from math import sqrt permet d'utiliser la fonction sqrt qui permet de calculer une racine carrée.
On peut utiliser la fonction abs pour le calcul d'une valeur absolue.

In [2]:
#Écrire ici la fonction Python Briggs
from math import sqrt

def Briggs(a,m):
    n=0
    u=a
    while abs(u-1)>=10**-m:
        n=n+1
        u=sqrt(u)
    return 2**n*(u-1)
   

2.2. Utiliser la fonction Briggs avec $m=9$ pour obtenir une valeur approchée de $ln(2)$.

In [3]:
#Effectuer ici l'appel à la fonction Python Briggs
Briggs(2,9)
Out[3]:
0.6931471824645996

2.3. La syntaxe from math import log permet d'utiliser la fonction Python log qui correspond à la fonction mathématique $ln$.
$\quad\;$Effectuer une saisie pour obtenir la valeur de $ln(2)$. Vérifier la cohérence avec le résultat de la question précédente.

In [4]:
#Effectuer ici la saisie pour calculer ln(2)
from math import log
log(2)
Out[4]:
0.6931471805599453

Table_logarithme

*La fonction étudiée dans ce TP est le logarithme népérien, mais c'est à l'aide de ce même algorithme que Henry Briggs a pu dresser des tables de la fonction logarithme décimal avec une précision de 14 décimales.*

Briggs

Henry Briggs (1560-1630)

(C) Copyright Franck CHEVRIER 2019-2020 http://www.python-lycee.com/