Objectif
Utiliser python pour encadrer par la méthode du milieu les solutions d'une équation du type y = ax + b. Cette approche fait suite à la présentation de la méthode du milieu dans le cadre de l'utilisation du Tableur-Grapheur - voir cet article: 506 stav tableur classeur algorithme et methode du milieu version 2019
Je pars du principe que vous disposez d'une interface de développement du type Thonny.
Support de cours créé par Anthony Gallard disponible ici: Python - methode du milieu
Mise en place
L'étude porte comme pour le tableur-grapheur sur les solutions de la droite d'équation y=ax+b avec a=2.5 et b=-5 en partant des valeurs xmin=-100 et xmax=+200
Etape 1 - Réflexion papier
Rappel de la méthode du milieu en vidéo
Algorigramme ou cheminement logique
- Saisie des valeurs de a, b
- Saisie des valeurs de xmin, xmax de départ
- Calcul de f(xmin), f(xmax), et des signes de f(xmin), f(xmax)
- Calcul de xmoy puis de f(xmoy) puis du signe de f(xmoy)
- Si le signe de f(xmoy)=signe de f(xmin)
alors remplacer xmin par xmoy - Si le signe de f(xmoy)=signe de f(xmax)
alors remplacer xmax par xmoy - Reprendre ces valeurs et les injecter à la ligne 2
Activité possible
Avec l'aide de ce support de cours, vous pouvez créer un algorigramme du cheminement logique du dessous
Etape 2 - Script sans boucle
Mémo python
Source http://www.info-isn.fr/page_python.htm
Support de cours - mémo python
Voir pour comprendre la partie sur la fonction IF
Script sans boucle
# saisie des constantes
a=2.5
b=-5
# valeur de départ
xmin=-100
xmax=200
# calculs des f(x)
fxmin=a*xmin+b
fxmax=a*xmax+b
# calculs des signes
if fxmin<0:
sfxmin=-1
elif fxmin==0:
sfxmin=0
else:
sfxmin=1
if fxmax<0:
sfxmax=-1
elif fxmax==0:
sfxmax=0
else:
sfxmax=1
# calculs de xmoy, fxmoy et signe de fxmoy
xmoy=(xmin+xmax)/2
fxmoy=a*xmoy+b
if fxmoy<0:
sfxmoy=-1
elif fxmoy==0:
sfxmoy=0
else:
sfxmoy=1
print("valeurs initiales",xmin,xmax)
# choix du nouveau couple xmin xmax
if sfxmoy==sfxmin:
xmin=xmoy
if sfxmoy==sfxmax:
xmax=xmoy
print("valeurs finales",xmin,xmax)
Etape 3 - Script avec boucle bornée
Présentation de la boucle bornée for x in range(xx)
Voir le mémo à la partie III Boucle for ... in
Placer la boucle stratégiquement à l'endroit où vous devez reprendre votre logique de calculs
Ne pas oublier l'indentation de toutes les lignes se trouvant dans la boucle
Script avec boucle bornée
Dans le script du dessous je décide de reprendre 10 fois le principe de calcul pour i allant de 0 à 9
for i in range(10):
# saisie des constantes
a=2.5
b=-5
# valeur de départ
xmin=-100
xmax=200
#### BOUCLE
for i in range(10):
# calculs des f(x)
fxmin=a*xmin+b
fxmax=a*xmax+b
# calculs des signes
if fxmin<0:
sfxmin=-1
elif fxmin==0:
sfxmin=0
else:
sfxmin=1
if fxmax<0:
sfxmax=-1
elif fxmax==0:
sfxmax=0
else:
sfxmax=1
# calculs de xmoy, fxmoy et signe de fxmoy
xmoy=(xmin+xmax)/2
fxmoy=a*xmoy+b
if fxmoy<0:
sfxmoy=-1
elif fxmoy==0:
sfxmoy=0
else:
sfxmoy=1
print("valeurs initiales",xmin,xmax)
# choix du nouveau couple xmin xmax
if sfxmoy==sfxmin:
xmin=xmoy
if sfxmoy==sfxmax:
xmax=xmoy
#### FIN BOUCLE
print("valeurs finales",xmin,xmax)
Etape 4 - Script avec boucle non bornée
Présentation de la boucle non bornée while
Voir le mémo partie V Boucle while (While se traduira par Tant que xxx)
L'idée est ici de calculer en boucle tant que l'écart entre xmin et xmax est supérieur à une valeur nommée "precision"
Script avec boucle non bornée
Dans le script du dessous je décide de reprendre mon principe de calcul tant que l'écart entre xmin et xmax est supérieur à 0.01. Je dois donc définir cet écart, d'ou la ligne precision=0.01 #precision
while xmax-xmin>precision:
# saisie des constantes
a=2.5
b=-5
precision=0.01 #precision
# valeur de départ
xmin=-100
xmax=200
#### BOUCLE
while xmax-xmin>precision:
# calculs des f(x)
fxmin=a*xmin+b
fxmax=a*xmax+b
# calculs des signes
if fxmin<0:
sfxmin=-1
elif fxmin==0:
sfxmin=0
else:
sfxmin=1
if fxmax<0:
sfxmax=-1
elif fxmax==0:
sfxmax=0
else:
sfxmax=1
# calculs de xmoy, fxmoy et signe de fxmoy
xmoy=(xmin+xmax)/2
fxmoy=a*xmoy+b
if fxmoy<0:
sfxmoy=-1
elif fxmoy==0:
sfxmoy=0
else:
sfxmoy=1
print("valeurs intermédiaires",xmin,xmax)
# choix du nouveau couple xmin xmax
if sfxmoy==sfxmin:
xmin=xmoy
if sfxmoy==sfxmax:
xmax=xmoy
#### FIN BOUCLE
print("valeurs finales",xmin,xmax)