#!/usr/bin/env python # coding: utf-8 # ![En tête general](img/En_tete_general.png) # # # *(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. # # # Approximation par balayage (corrigé) # # On considère la fonction $f$ définie sur $[0;+\infty[$ par $f(x)=x^2$. # # ![Fonction carré](img/Approximation_par_balayage_carre.png) # # 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$.__ # # In[25]: # 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$.__ # # In[26]: 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$$)$ | | | | | | | | | | | | # # In[27]: # Effectuer les saisies nécessaires balayage(f) # __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. # # In[28]: # 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) # __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$.__ # In[29]: # 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) # __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$.__ # In[30]: # 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) # __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.__ # In[31]: # 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.__ # In[32]: # Appel à la fonction modifiée: balayage(f,7) # __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.__ # # In[33]: # 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) Jérôme Cardan (1501-1576) fut un des premiers à justifier la méthode d'approximation par balayage. # *(C) Copyright Franck CHEVRIER 2019-2020 http://www.python-lycee.com/*