Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 12-11-2018 12:46:18
- erichof
- Membre
- Inscription : 26-08-2011
- Messages : 29
algorithme
Bonjour,
on a f(x)=3x^4 - 4x^3 - 12x^2 + 14.
J'ai réussi à prouver que l'équation f(x)=0 admettait deux solutions, une entre 1 et 2 et l'autre entre 2 et 3 après voir réalisé le tableau de variation de f et utilisé le Théorème des valeurs intermédiaires.
On nous demande de déterminer une valeur approchée au millième des deux solutions, par dichotomie après avoir écrit l'algorithme.
Si je commence par la deuxième solution sachant que f est strictement croissante sur [2 ; + inf[, j'ai rédigé cet algorithme avec EduPython que nous utilisons en classe :
from lycee import *
a=2
b=3
while (b-a>0.001) :
m=(a+b)/2
if 3*m**4-4*m**3-12*m**2+14<0 :
a=m
else :
b=m
print(a,b)
mais l'algorithme ne m'affiche rien du tout, il semble bugger !
Je ne comprends pas.
Avec ma calculatrice, par balayage, j'ai trouvé que la solution est comprise entre 2,604 et 2,605
Merci pour votre aide !
C.
Hors ligne
#2 12-11-2018 13:19:26
- D_john
- Invité
Re : algorithme
Salut,
Es-tu certain des parenthèses du while ?
A+
#3 12-11-2018 13:33:26
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 989
Re : algorithme
Bonjour,
Le problème n'est pas là : il est dans l'indentation...
Comme ça, ça fonctionne
b=3
while (b-a>0.001) :
m=(a+b)/2
if 3*m**4-4*m**3-12*m**2+14<0 :
a=m
else :
b=m
print(a,b)
Sortie :
2.6044921875 2.60546875
L'indentation est la clé de voute de Python...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#4 12-11-2018 13:56:55
- D_john
- Invité
Re : algorithme
Merci yoshi, je suis débutant niveau ZERO en python pour bricoler avec raspberry Pi et arduino.
A+
#5 12-11-2018 14:52:17
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 989
Re : algorithme
Salut,
En Python, pas de endif ni de end loop ou de next pour boucle for : on se repère à l'indentation.*
Code erichof :
a=2
b=3
while (b-a>0.001) :
m=(a+b)/2
if 3*m**4-4*m**3-12*m**2+14<0 :
a=m
else :
b=m
print(a,b)
Qu'y voit-on ? que if else sont alignés sur while :
sa boucle se résumait donc à :
m=(a+b)/2
De ce fait, la condition de sortie de boucle b-a<= 0.01 n'était jamais réalisée, a et b restant scotchés à 2 et 3 et m à 2.5...
Il était piégé dans une boucle infinie.
A votre service pour améliorer votre Python...
Livre de base Swinnen
http://inforef.be/swi/download/apprendre_python3_5.pdf
Dl libre et gratuit.
Mais tu peux aussi acquérir la version papier payante...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#6 12-11-2018 19:26:07
- C.
- Invité
Re : algorithme
MERCI beaucoup !!!!
E.
#7 13-11-2018 10:07:21
- D_john
- Invité
Re : algorithme
Salut,
A votre service pour améliorer votre Python...
Livre de base Swinnen
http://inforef.be/swi/download/apprendre_python3_5.pdf
Dl libre et gratuit.Mais tu peux aussi acquérir la version papier payante...
@+
Merci encore yoshi pour ce pré-éclairage.
Diagonalisation de la bible des Pythonniens en cours !
Pages : 1
Discussion fermée