Inscription / Connexion Nouveau Sujet
Niveau première
Partager :

Pyton /algorithme - Lancer de balle

Posté par
Dav33
15-02-22 à 15:52

Bonjour,
ci dessous l'énoncé de mon problème :

On lance une balle du haut d'un mur. soit (x;y) les coordonnées du point représentant cette balle dans un repère orthonormée (x et y sont des longueur en mètre)
On modélise l'équation de la courbe fx=-0.25x²+1.9x+7.28

Le script Python doit permettre d'estimer le maxi de f.
Compléter les ligne 7 et 11 sachant que qu'en exécutant le script  on obtient comme sortie : 10.89 atteint en 3.799999
Le script :
1    def f(x) :
2    return +0.25*x**2+1.9*x+7.28
3    x=2
4    xatteint=x
5    max=f(2)
6    while x<5
7    if f(x) .................
8               max=f(x)
9               xatteint=x
10   x=x+0.01
11   print (..............,"atteint en",...........)

Expliquer les choix des valeurs 2 et 5 dans les lignes 3 et 6 du script.

Je n'arrive pas à completer ce script et je ne comprend pas le choix des 2 valeurs 2 et 5.
Merci pour votre aide.

Posté par
carita
re : Pyton /algorithme - Lancer de balle 15-02-22 à 16:04

bonjour

n'y a-t-il pas d'autres questions avant ?
par exemple, concernant la variation de la fonction f ?

que ne comprends-tu pas de ce programme ?
quelles lignes te posent difficultés ?

Posté par
carita
re : Pyton /algorithme - Lancer de balle 15-02-22 à 16:09

avec les bonnes indentations :

def f(x) :
    return -0.25*x**2+1.9*x+7.28

x=2
xatteint=x
max=f(2)
while x<5:
    if f(x).......:
        max=f(x)
        xatteint=x
    x=x+0.01
print (....., "atteint en",.......) 

Posté par
Dav33
re : Pyton /algorithme - Lancer de balle 15-02-22 à 16:27

Merci pour ce retour.
Il y a effectivement un courbe associé. Il s'agit d'un parabole orienté vers le bas qui schématise le lancer de la balle.

Ligne 7 je dois compléter les ....
J'ai bien compris que l'on crée une boucle (while) et que l'on met un critère si (if) qui précise que si f(x) décroit ou dimunue alors la max a été atteint et que l'on donne le résultat en ligne 11 : print xatteint atteint en , f(x)max.
Mais je nage un peu de ces fonctions !

De plus je ne sais pas justifier les chois des nombre 2 et 5 sauf de penser que sur la courbe que l'on a taper sur la calculatrice (demandé en première question) on voit bien que le sommet de la parabole se situe grossièrement entre é et 5.

Posté par
carita
re : Pyton /algorithme - Lancer de balle 15-02-22 à 16:38

on y va dans l'ordre :
"...courbe associé. Il s'agit d'un parabole orienté vers le bas qui schématise le lancer de la balle."

à partir de ce graphique, "à la louche",
tu peux faire une estimation d'entre quelle et quelle valeurs des abscisses la parabole atteint son maximum.

qu'en penses-tu ?
(tu peux insérer le graphique ici si tu veux)

Posté par
malou Webmaster
re : Pyton /algorithme - Lancer de balle 15-02-22 à 16:46

bonjour carita
bonjour Dav33

pur mettre ton graphique :

attentionextrait de c_faq la FAQ du forum :

Q05 - Puis-je insérer une image dans mon message ? Comment faire ? Quelle image est autorisée ?



Posté par
Dav33
re : Pyton /algorithme - Lancer de balle 15-02-22 à 16:50

Ci joint la courbe. Le sommet est situé a environ S (3.8,10.89)

Pyton /algorithme - Lancer de balle

Posté par
carita
re : Pyton /algorithme - Lancer de balle 15-02-22 à 16:58

ok
imaginons que tu ne connaisses pas les coordonnées du sommet.

on peut estimer, sans prendre de risque, que l'abscisse de ce sommet est compris entre 2 et 5,
même si on très très myope et sans lunette
d'accord ?

c'est cet intervalle [2;5] qui va servir dans le programme.
on part de x=2, on calcule son image f(2)
puis prendre la valeur suivante, calculer son image...
puis la suivante, calculer son image...
répéter cette opération jusqu'à ce que - comme tu l'as bien décrit -  f(x) diminue !
on saura alors que l'on a atteint (et même dépassé...) le max de f (i.e. l'ordonnée du sommet)

je rédige la suite et je reviens.

Posté par
carita
re : Pyton /algorithme - Lancer de balle 15-02-22 à 17:07

J'ai bien compris que l'on crée une boucle (while)
et que l'on met un critère si (if) qui précise que si f(x) décroit ou dimunue
alors la max a été atteint et
que l'on donne le résultat en ligne 11 : print xatteint atteint en , f(x)max.


tout ça c'est bien, sauf ce qui est en rouge (pb de vacabulaire)
le max de f est  l'ordonnée du sommet
et  il est atteint en xatteint (l'abscisse du sommet).

---

la fonction
def f(x) :
    return -0.25*x**2+1.9*x+7.28

est ici toute simple : elle permet de calculer l'image d'un x passé en paramètre.

à chaque fois, dans le programme, que tu souhaiteras calculer l'image d'une valeur x,
l'instruction f(x) appellera automatiquement la fonction
et te retournera l'image (=la valeur calculée)

----

question : quel est le pas choisi par le programme pour passer d'une valeur de x à la suivante ?

---
reprends le programme dans l'ordre et dis à présent quelles lignes précisément tu ne comprends pas.

Posté par
Dav33
re : Pyton /algorithme - Lancer de balle 15-02-22 à 17:26

Le pas choisi pour passer d'une valeur de x a la suivante est  x=x+0.01 non ?
Je pense avoir compris :
ligne 7 je dois compléter (en rouge) : if f(x)<f(xatteint)
et ligne 11 :

print ( f(xatteint) "atteint en" xatteint"

Est-ce  juste ?

Posté par
carita
re : Pyton /algorithme - Lancer de balle 15-02-22 à 17:35

oui, le pas est de 0.01
cela signifie que le programme va calculer (et tester) séquentiellement les images de :
2
2.01
2.02
2.03
etc..... théoriquement jusqu'à 5
mais il s'arrêtera en fait dès que la condition du if sera remplie

la conséquence du choix de ce pas, c'est que la précision des coordonnées du sommet ne sera qu'à 1/100ème près.

---

ligne 7   if f(x)<f(xatteint)  --- oui... mais non
ligne 11 :  print ( f(xatteint) "atteint en" xatteint"  --- idem

dans les 2 cas, ce n'est pas  f(xatteint) qu'il faut mettre....
à ton avis, à quoi sert la ligne 8 ?

Posté par
Dav33
re : Pyton /algorithme - Lancer de balle 15-02-22 à 17:44

La ligne 8 sert à donner le maximun de f(x)
donc ligne 7, on doit juste donner la condition si max atteint alors on arrête le compteur et on imprime les données.
Donc ligne 7 if f(x)=max
ligne 8 print (f(x)=max atteint en" x"

?? je nage ou je coule ?

Posté par
carita
re : Pyton /algorithme - Lancer de balle 15-02-22 à 18:05

La ligne 8 sert à donner le maximun de f(x)    ---  pas à donner, mais à stocker le dernier 'max' calculé

x=2       
xatteint=x       
max=f(2)          
while x<5:  
    if f(x) > max:         # si la condition est remplie, alors 
        max=f(x)           # on conserve dans max l'image du dernier x  calculée
        xatteint=x         # et on stocke la valeur de x correspondant dans xatteint
    x=x+0.01


en conservant la dernière image calculée dans la variable max,
on pourra s'en servir dans le if pour comparer avec la nouvelle image à calculer  (celle de x+0.01)

note, peut-être triviale :
if f(x) > max:      la condition est bien >max (supérieur), car la fonction est croissante avant son maximum.

à noter aussi que ce programme n'est pas optimisé.

Posté par
carita
re : Pyton /algorithme - Lancer de balle 15-02-22 à 18:25

je viens de voir une étourderie de ma part... :/
que tu as sans doute rectifiée, mais je corrige :

carita @ 15-02-2022 à 17:35

le pas est de 0.01
cela signifie que le programme va calculer (et tester) séquentiellement les images de :
2, 2.01, 2.02, 2.03, etc.....  théoriquement  jusqu'à 5
mais il s'arrêtera en fait  dès que la condition du if ne sera plus remplie

Posté par
Dav33
re : Pyton /algorithme - Lancer de balle 15-02-22 à 18:28

OK je comprend mieux.
Du coup pour la ligne 11, il suffit de noter :
ligne 11 :  print ( f(x) "atteint en" x"
il va automatiquement restituer les valeurs stockées (x et et son image fx ?
En tout cas merci beaucoup de m'avoir aider car le prof passe tres vite sur Python et je n'arrive pas à suivre.

Posté par
carita
re : Pyton /algorithme - Lancer de balle 15-02-22 à 19:07

non,  ce n'est pas x, ni f(x) en ligne 11, mais   x atteint et max .

le programme calcule les images des x sur tout l'intervalle [2;5], avec un pas de 0.01,  mais, à la fin,
dans max ,  on aura conservé l'ordonnée maximale.
et dans  x atteint, on aura conservé l'abscisse qui lui correspond.

donc en affichage :
11     print (max, "atteint en", xatteint)

bonne continuation !

Posté par
Dav33
re : Pyton /algorithme - Lancer de balle 15-02-22 à 19:12

OK.  Désolé mais j'ai visiblement beaucoup de lacune avec Python.
Encore merci pour tous ces explications .



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 1675 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 !