#!/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/*