slt,
pour tuner un peu plus ton algo
1)
#Combien de fois ce sera testé (ici 10⁶), détermine la précision du résultat
généralement on ecrit
- Code: Tout sélectionner
tant que error > epsilone
ou eventuellement
- Code: Tout sélectionner
tant que error > epsilone && steps < 10**6
steps++
avec error = abs(sin(millieu) - sin(B)*X) et epsilone très petit (positif) genre 1e-6
ca permet de pas se farcir 10**6 iterations si on a déjà la précision souhaitée..
2) de la même manière (mais tu l'observeras problement jamais sur cet algo), ta boucle for n'a pas de condition de sortie (hormis 10**6 iter) donc si tu trouves le resultat à l'iter 2, ben tu te farcies qd même toutes les autres

c'est adressé avec 1 ci-dessus, même sinon simplement return resultat en plein dans le for
3) le resultat == 'erreur' est impossible
>, ou <, ou ==, ya pas d'autres possibilités, donc directement
if >, elif <, else, mais encore une fois si tu fais la sortie via epsilone, tu as juste
if >
else #(c'est inférieur, le cas d'égalité c'est pas important)
le cas d'égalité est plus à gérer en particulier, vu que c'est une solution 'comme une autre' prise dans la bande epsilone
4) pour être plus usinagaz, tu sais qu'avec python tu peux passer des fonctions donc par ex, l'equation tu la réécris
sin(milieu) - sin(B)*X = 0
ici, tu remarques que tu avais testé
- Code: Tout sélectionner
if sin(milieu) > sin(B)*X
mais tu peux aussi écrire
- Code: Tout sélectionner
if sin(milieu) - sin(B)*X > 0
donc si tu poses une fonction f(milieu) = sin(milieu)-sin(B)*X
tu peux écrire
- Code: Tout sélectionner
if f(milieu)>0
et donc tu peux écrire ton algo(SinA_egal_XfoisSinB à renommer de fait) avec en param la fonction supplémentaire
- Code: Tout sélectionner
def SinA_egal_XfoisSinB (f, B, X):
min = 0
max = pi/2
steps = 0
err = 1
eps = 1e-6
resultat = 2 #ne doit jamais arriver vu que sin prend ses valeurs dans 0;[pi/2~=1.5]
while err > eps and steps < 10**6:
milieu = (min + max) /2 #Je fais la moyenne
if f(milieu, B, X) < 0:
min = milieu
else:
max = milieu
err = abs(f(milieu, B, X))
return resultat
on peut faire un peu mieux (en particulier pour pas se farcir B et X à passer à SinA_egal_XfoisSinB, peut-être vois-tu, le terme c'est closure)