Etant donné f une fonction continue sur une intervalle [a;b] telle que f(a) etf(b) soient de signes contraires. L'équation f(x)=0 admet une unique solution dont on peut determiner un encadrement par dichotomie.
On calcul m le mileu de [a, b]
Si f(m) et f(b) sont de meme signe, c'est que la solution se trouve dans [a,]m : alors, on affecte à b la valeur de m afin de pouvoir continuer le processus
On continue le processus d=jusqu'à obtenir un encadrement avec la précision p voulue
Realiser votre programme python.
Merci de votre aide.
Oups… Bonjour,
Je suis bloquée au tout début, on nous a donné un algorithme à trou en language naturel, mais je n'arrive pas à le traduire en language python.
Algorithme:
VARIABLES :
precision EST_DU_TYPE NOMBRE
a EST_DU_TYPE NOMBRE
b EST_DU_TYPE NOMBRE
m EST_DU_TYPE NOMBRE
DEBUT DE L'ALGORYTHME
precision PREND_LA_VALEUR ……….
Lire a
Lire b
TANT QUE (………………………) FAIRE
DEBUT TANT QUE
m prend la valeur
SI(……………………) ALORS
DEBUT SI
b prend la valeur
FIN SI
SINON
DEBUT SINON
a prend la valeur
FIN SINON
Fin tant que
Afficher a
Afficher " solution"
afficher b
FIN ALGORITHME
Bonjour,
j'ai également ce devoir à faire et je pense avoir trouvé le langage naturel sauf pour "précision PREND_LA_VALEUR"
Voici ce que je pense avoir réussie à compléter
TANT QUE b-a>= p FAIRE
SI f(a)*f(m)<=0 ALORS
b prend la valeur m
a prend la valeur
Suis-je sur la bonne voie ?
Merci
salut
tu te noie un peu
on pose la fonction sur laquelle tu veux travailler admettons f(x) = x ^ 3 - 2 * x avec a = 1
et b= 2.
le programme commence par a =1
b = 2
on debute une boucle par exemple de type " do -- loop until " ( faire jusqu'a ce que ..)
on calcul le milieu de a et b
si
le signe de f(b) = au signe de f(m) alors
b devient m
fin du si
si
le signe de f(a) = au signe de f(m) alors
a devient ....à toi
fin du si
jusqu' a ce que f(m) soit compris entre deux valeur par exemple -0,01 et +0,01
on demande la valeur de m
à toi ...
..j'ai fais quelques test avec une fonction bidon comme y = 3x-4 et a =1 et b=5
et une autre fonction f(x)= f(x) = x ^ 3 - 2 * x avec a = 1 et b= 2. ..la precision du m est tres bonne
salut,
un exemple dont on peut s'inspirer mais il ne faut en aucun cas le recopier,
le professeur n'apprecierait pas
def f(x):
return -(3000.0-200*((1+x)**12-1)/x)
def Resolution(a,b,p):
while b-a>10**(-p):
g=f(a);d=f((a+b)/2);
if g*d<0:
b=(a+b)/2;
else:
a=(a+b)/2;
return [a,b]
Resolution(0.01,1,12) renvoie [0.0397003021513956, 0.039700302152295995]
Merci pour votre aide seulement je ne comprends pas votre raisonnement pour :
while b-a>10**(-p)
Que représente (-p) et pourquoi 10** ?
Merci d'avance
Bonjour,
Tout d'abord merci pour vos réponses.
J'ai taché d'avancer dans mes recherches. Voici ce que je pense avoir trouvé qu'en pensez vous ?
def f(x) :
y= -1.2*x**+12*x-17
return(y)
a=float(input("saisir la valeur de a"))
b=float(input("saisir la valuer de b"))
p=float(input("saisir la valeur de p"))
while b-a>10**(-p) :
g=f(a);h=f((a+b/2));
if g*h<0 :
b=a+b/2
else :
a=a+b/2;
print(a)
print(p)
print(b)
Notre professeur de mathématiques nous a demandé de tester notre programme sur la fonction : Def f(x) :
y=-1,2x²+12x-17
Je pense que j'avais oublié de mettre ma puissance à deux dans mon programme.
Le voici donc après de nouvelles modifications
def f(x) :
y= -1.2*x**2+12*x-17
return(y)
a=float(input("saisir la valeur de a"))
b=float(input("saisir la valuer de b"))
p=float(input("saisir la valeur de p"))
while b-a>10**(-p) :
g=f(a);h=f((a+b/2));
if g*h<0 :
b=(a+b)/2
else :
a=(a+b)/2;
print(a)
print(p)
print(b)
Merci pour votre réponse, la précision est elle toujours b-a>10**(-p) car je n'en comprends pas vraiment le sens. Est elle différente pour ma fonction :
def f(x) :
y= -1.2*x**2+12*x-17
la fonction est donnée
la precision est le choix de l'utilisateur
a priori aucun rapport entre les 2
salut
def f(x) :
return(-1.2*x**2+12*x-17)
Je comprends le programme peut donc t-il être comme cela ? Les résultats me semblent étranges :
def f(x) :
return (-1.2*x**2+12*x-17)
a=float(input("saisir la valeur de a"))
b=float(input("saisir la valuer de b"))
p=float(input("saisir la valeur de p"))
while b-a>=p :
g=f(a);h=f((a+b/2))
if g*h<=0 :
b=(a+b)/2
else :
a=(a+b)/2
print(a)
print(p)
print(b)
Je commence à comprendre mais pour quelle raison la précision doit elle être 10**-p cette formule n'est pas présente dans l'énoncé.
"On continue le processus d=jusqu'à obtenir un encadrement avec la précision p voulue"
en effet l'enonce dit p pour la precision par exemple 0.001 ou 10^-3
pour p tu devras donc taper par exemple 0.001
Merci pour cette réponse. Est ce normal que les résultats du programme sont le plus souvent identiques aux variables entrées ? avec ce programme
def f(x) :
return(-1.2*x**2+12*x-17)
a=float(input("saisir la valeur de a"))
b=float(input("saisir la valuer de b"))
p=float(input("saisir la valeur de p"))
while b-a>=10**(-p) :
g=f(a);m=(a+b)/2
if g*f(m)<=0 :
b=m
else :
a=m
print(a)
print(p)
print(b)
def f(x) :
return(-1.2*x**2+12*x-17)
a=float(input("saisir la valeur de a"))
b=float(input("saisir la valuer de b")) // il faut que f(a) et f(b) soient de signes contraires par ex 1 et 3
p=float(input("saisir la valeur de p")) // si tu entres 0.001 (si tu entres 3)
while b-a>=10**(-p) : // ici il faut mettre b-a>p (ici il faut mettre 10**-3)
g=f(a);m=(a+b)/2
if g*f(m)<=0 :
b=m
else :
a=m
print(a)
print(p)
print(b)
Merci beaucoup votre aide nous a été très précieuse !
Je retiens donc ce programme :
def f(x) :
return(-1.2*x**2+12*x-17)
a=float(input("saisir la valeur de a"))
b=float(input("saisir la valuer de b"))
p=float(input("saisir la valeur de p"))
while b-a>=10**(-p) :
g=f(a);m=(a+b)/2
if g*f(m)<=0 :
b=m
else :
a=m
print(a)
print(p)
print(b)
on peut encore simplifier :
def f(x) :
return(-1.2*x**2 + 12*x - 17)
a = float(input("saisir la valeur de a"))
b = float(input("saisir la valeur de b"))
p = float(input("saisir la valeur de p"))
while b - a >= 10**(-p) :
m = (a + b)/2
if f(a) * f(m) <= 0 :
b = m
else :
a = m
print(a, b, p)
il n'est peut etre pas utile d'afficher p à la fin ?
Il serait preferable d'ecrire une fonction mais c'est peut etre ce que prevoit de faire le professeur de maelys05.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :