Simulation Python mode texte : Fonctions
Pour éviter de répéter plusieurs fois les mêmes instructions, on peut les mettre dans une fonction.
que l'on appellera plusieurs fois.
On peut également faire une fonction pour séparer les types de calculs.
Exemple de la suite qui calcule la racine carrée d'un nombre a
- un+1 = (1/2) (un + a / un)
- C'est la méthode de Héron d'Alexandrie qui consiste à prendre la moyenne entre
un > √a et
a/un < √a dont le produit vaut a.
- Comme les 2 valeurs encadrent la racine, leur moyenne doit s'en rapprocher.
expérimentation : copier le programme suivant dans https://py3.codeskulptor.org et lancer "Run"
Appliquer 10 fois cette relation à partir de u0=1
pour calculer √3 :
# definition de la fonction qui va etre appelee plusieurs fois
def suite(u, a):
# formule de Heron
# la fonction calcule a partir de ses 2 arguments : u et a
v = (u + a/u) / 2.
return v
a = 3.
u = 1.
for i in range(10) :
u = suite(u, a)
# ecart entre le terme de la suite et la racine exacte
print("ecart=", u - a**(1./2.))
print("racine(", a, ")=", u)
En combien d'itérations trouve-t-on la bonne valeur de la racine de 3 ?
Essayez avec racine de 1000., de 1000000.
On peut créer la fonction racine_carree( ) qui calcule la racine carrée :
rappel : racine carrée de a = √a = a1/2
# importation du module math pour la fonction sqrt(a) "sqrt = SQuare RooT"
# on aurait pu aussi faire : a**(0.5)
import math
def racine_carre(a):
# contrôle des données
if a < 0 : return None
elif a == 0 : return 0
# u0 doit etre réel même si a est entier
# a cause de la division a / u0
# il faut u0 > racine(a) : pour que la suite décroisse
# pour être sur : on part de a si a > 1 ; de 1 sinon
u0 = max(1., float(a))
# boucle infinie dont on sort par le test u1 >= u0
while True :
# la suite un converge en décroissant
# si on part de u0 > racine(a)
u1 = (u0 + a/u0) / 2.
if u1 >= u0 :
# quand la suite ne décroît plus :
# elle a convergé
break # sortie de la boucle while
# bascule de la nouvelle valeur dans l'ancienne
u0 = u1
return u1
a = 3.
# comparaison entre notre fonction racine_carre et la fonction sqrt du module math.
print("ecart=", racine_carre(a) - math.sqrt(a))
print("racine(", a, ")=", racine_carre(a))
Aller aux menus :
Boucles de calcul
cours simulation