Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(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

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)

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 :

from Lycée 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)

Qu'y voit-on ? que if else sont alignés sur while :
sa boucle se résumait donc à :

while b-a>0.01:
    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

yoshi a écrit :

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 !

Pied de page des forums