(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.
On considère la fonction $f$ définie sur $[0;+\infty[$ par $f(x)=x^2$.
On admet que la fonction $f$ est croissante sur $[0;+\infty[$ et que l’équation $f(x)=2$ a une unique solution sur $[0;+\infty[$, notée $\sqrt{2}$. Le but de l’exercice est d’obtenir des valeurs approchées de $\sqrt{2}$.
1. Ecrire une fonction Python $f$ qui reçoit une valeur $x$ en argument et renvoie l’image de $x$ par la fonction $f$.
# Ecrire la fonction
def f(x):
return x**2
2. La fonction ci-dessous permet d’obtenir des images successives par la fonction $f$ sur l’intervalle $[1;2]$, avec un pas de $10^{-1}=0,1$.
def balayage(f):
x=1
while x<2:
print("f(",x,")=",f(x))
x = x+0.1
return None
Utiliser cette fonction pour compléter le tableau :
$x$ | $1 $ | $1.1$ | $1.2$ | $1.3$ | $1.4$ | $1.5$ | $1.6$ | $1.7$ | $1.8$ | $1.9$ | $2 $ |
---|---|---|---|---|---|---|---|---|---|---|---|
$f$$($$x$$)$ |
# Effectuer les saisies nécessaires
balayage(f)
f( 1 )= 1 f( 1.1 )= 1.2100000000000002 f( 1.2000000000000002 )= 1.4400000000000004 f( 1.3000000000000003 )= 1.6900000000000006 f( 1.4000000000000004 )= 1.960000000000001 f( 1.5000000000000004 )= 2.2500000000000013 f( 1.6000000000000005 )= 2.560000000000002 f( 1.7000000000000006 )= 2.890000000000002 f( 1.8000000000000007 )= 3.2400000000000024 f( 1.9000000000000008 )= 3.610000000000003
Pour quelle valeur $x_1$ du tableau a-t-on $x_1 \leqslant \sqrt{2} \leqslant x_1+0,1$ ? Justifier.
Modifier la fonction précédente pour qu’elle renvoie cette valeur $x_1$.
Aides : On pourra, entre autres, modifier la condition de la boucle while. On pourra supprimer les affichages réalisés avec l’instruction print.
# Fonction modifiée:
def balayage(f):
x=1
while f(x)<2:
x = x+0.1
return x-0.1
# Appel à la fonction modifiée:
balayage(f)
1.4000000000000004
3. Compléter la fonction pour qu’elle effectue, à partir de cette valeur $x_1$, un nouveau balayage de pas $10^{-2}=0,01$.
La fonction renverra une valeur $x_2$ telle que $x_2 \leqslant \sqrt{2} \leqslant x_2+0,01$.
# Fonction modifiée:
def balayage(f):
x=1
while f(x)<2:
x = x+0.1
x=x-0.1
while f(x)<2:
x = x+0.01
return x-0.01
# Appel à la fonction modifiée:
balayage(f)
1.4100000000000004
4. Compléter la fonction pour qu’elle renvoie une valeur $x_3$ telle que $x_3 \leqslant \sqrt{2} \leqslant x_3+0,001$.
# Fonction modifiée:
def balayage(f):
x=1
while f(x)<2:
x = x+0.1
x=x-0.1
while f(x)<2:
x = x+0.01
x=x-0.01
while f(x)<2:
x = x+0.001
return x-0.001
# Appel à la fonction modifiée:
balayage(f)
1.414
5. En ajoutant une boucle, modifier la fonction précédente pour qu’elle renvoie une valeur $x_n$ telle que $x_n \leqslant \sqrt{2} \leqslant x_n+10^{-n}$, où $n$ est une valeur donnée en argument de la fonction.
# Fonction modifiée:
def balayage(f,n):
x=1
for k in range(n+1):
while f(x)<2:
x = x+10**-k
x=x-10**-k
return x
Donner une valeur approchée de $\sqrt{2}$ à $10^{-7}$ près.
# Appel à la fonction modifiée:
balayage(f,7)
1.4142135
6. Prolongement :
On admet que l’équation $x^3=5$ admet une unique solution sur $[0;+\infty[$, notée $\sqrt[3]{5}$.
Déterminer une valeur approchée de $\sqrt[3]{5}$ à $10^{-8}$ près.
# on peut proposer une amélioration de la fonction balayage:
def balayage(f,val,n):
x=1
for k in range(n+1):
while f(x)<val:
x = x+10**-k
x=x-10**-k
return x
# Fonction cube
def g(x):
return x**3
# Saisie pour la racine cubique de 5 à 10**-8 près
balayage(g,5,8)
1.7099759399999999
(C) Copyright Franck CHEVRIER 2019-2020 http://www.python-lycee.com/