Inscription / Connexion Nouveau Sujet
Niveau seconde
Partager :

python algorithme

Posté par
apo20031
16-04-19 à 14:20

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.

Posté par
sanantonio312
re : python algorithme 16-04-19 à 14:21

Bonjour quand même ,
Tu as certainement commencé.
Qu'as-tu trouvé?
Où bloques-tu?

Posté par
apo20031
re : python algorithme 16-04-19 à 14:32

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

Posté par
sanantonio312
re : python algorithme 16-04-19 à 14:40

Avant de le traduire en Python, remplis les trous du langage naturel

Posté par
maelys05
re : python algorithme 16-04-19 à 15:04

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

Posté par
flight
re : python algorithme 16-04-19 à 15:41

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 ...

Posté par
flight
re : python algorithme 16-04-19 à 15:43

..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  

Posté par
apo20031
re : python algorithme 16-04-19 à 16:34

bonjour,

Ma camarade @maelys05 avait essayer ce programme si dessous, est-il incorrect?

python algorithme

Posté par
alb12
re : python algorithme 16-04-19 à 18:28

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]

Posté par
maelys05
re : python algorithme 16-04-19 à 18:53

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

Posté par
alb12
re : python algorithme 16-04-19 à 19:29

si p=7 alors la precision est 10^-7 qu'on ecrit 10**-7 en python

Posté par
maelys05
re : python algorithme 17-04-19 à 10:36

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)

Posté par
alb12
re : python algorithme 17-04-19 à 14:08

x** ???
attention aux parentheses (a+b)/2

Posté par
maelys05
re : python algorithme 17-04-19 à 17:06

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)

Posté par
alb12
re : python algorithme 17-04-19 à 17:41

correct je pense, les ; ne sont pas utiles
le mieux est de l'executer par exemple avec Edupython

Posté par
maelys05
re : python algorithme 17-04-19 à 18:37

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

Posté par
alb12
re : python algorithme 17-04-19 à 19:06

la fonction est donnée
la precision est le choix de l'utilisateur
a priori aucun rapport entre les 2

Posté par
carpediem
re : python algorithme 17-04-19 à 19:10

salut

Citation :
def f(x) : 
    return(-1.2*x**2+12*x-17) 

suffit amplement et évite une affectation "locale" qui peut perturber le système

Posté par
maelys05
re : python algorithme 17-04-19 à 19:12

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)

Posté par
alb12
re : python algorithme 17-04-19 à 19:17

10**-p pour la precision

Posté par
maelys05
re : python algorithme 17-04-19 à 19:20

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é.

Posté par
alb12
re : python algorithme 17-04-19 à 19:51

"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

Posté par
maelys05
re : python algorithme 17-04-19 à 19:59

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)

Posté par
alb12
re : python algorithme 17-04-19 à 20:32

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)

Posté par
maelys05
re : python algorithme 17-04-19 à 20:48

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)

Posté par
alb12
re : python algorithme 17-04-19 à 20:53

ok
si tu entres pour a,b,p resp 1,3,7
tu obtiens
1.7085970044136047
7.0
1.7085970640182495

Posté par
maelys05
re : python algorithme 17-04-19 à 20:59

C'est exact je trouve également ces valeurs merci  beaucoup !

Posté par
alb12
re : python algorithme 17-04-19 à 21:43

tres bien, bonne continuation

Posté par
carpediem
re : python algorithme 17-04-19 à 22:49

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)

Posté par
alb12
re : python algorithme 18-04-19 à 09:33

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.

Posté par
apo20031
re : python algorithme 18-04-19 à 17:55

Merci beaucoup pour toutes vos réponses !

Posté par
carpediem
re : python algorithme 18-04-19 à 19:12

de rien



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1674 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !