Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#26 24-01-2020 12:49:40
- freddy
- Membre chevronné
- Lieu : Paris
- Inscription : 27-03-2009
- Messages : 7 457
Re : Trigo math aide
Salut l'ami !
j'avais en tête ça, adapté au cas particulier de l'équation de notre petit génie (sans bouillir) en herbes ! :-)
Comme tu sais faire des graphiques très pédagogiques, j'espère que notre ami comprendra mieux l'intérêt de la méthode et qu'à l'avenir, il cherchera mieux à comprendre les idées avant de formuler des jugements hâtifs et déplacés. S'il n'apprend pas vite la modestie en la matière, il va finir par se manger de belles tartes dans un futur très proche, au moins ici :-)
Dans le lien wiki que je donne, on trouvera recensées les autres méthodes, que notre ami s'instruise :-)
Là, Fred en a exposé quatre, avec le graphique pour la méthode de Lagrange.
Dernière modification par freddy (24-01-2020 14:16:33)
De la considération des obstacles vient l’échec, des moyens, la réussite.
Hors ligne
#27 24-01-2020 13:04:41
- 72Messo10
- Membre
- Inscription : 27-12-2019
- Messages : 205
Re : Trigo math aide
En faite j'arrive pas à comprendre les boucles sur Python
Si tu pourrais m'expliquer stp
Hors ligne
#28 24-01-2020 20:51:08
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Trigo math aide
Re,
Dans la vie courante, qu'est-ce que le terme boucle doit évoquer ?
Un cercle, une forme qui retourne à son point de départ...
Tu as deux sortes de boucles :
- Les boucles for
- Les boucles while (on peut les utiliser à la place des premières).
While, en anglais, c'est durant, pendant que, Tant que...
Une boucle while a cette structure :
Instructions
Je vais modifier ma condition dans la recherche de $x$ tel que $\cos(x)=0.4$
from math import cos,degrees,radians
a,b=60,90
while abs(b-a)>=10**-12:
m=(a+b)/2
if cos(radians(m))>0.4:
a=m
else:
b=m
print(round(m,12))
qui me donne :
66.421821521798
Traduction :
Tant que la valeur absolue de l'écart entre les deux bornes a et b (faire):
m=moyenne arithmétique de a et b
Si cos(m) >0.4:
b=m # la borne supérieure est trop grande : on prend b= m
Sinon:
a=m # la borne inférieure est trop faible : on prend a=m
On sort de la boucle lorsque la condition n'est plus vérifiée c'est à dire lorsque $|b-a|<10^{-12}$
Pourquoi ai-je utilisé TANT QUE ? Parce que je ne peux pas savoir combien de fois je vais devoir répéter la séquence :
if cos(radians(m))>0.4:
a=m
else:
b=m
Parfois, tu es obligé d'utiliser, gérer un compteur (un compte-tours) à l'intérieur de la boucle.
Tu utilises une boucle lorsque tu as un travail répétitif, toujours le même...
La boucle for possède un compteur intégré (un compte-tours) qui va commencer un décompte à partir d'une valeur donnée, jusqu'à une autre valeur donnée+1.
Que tu demandes de compter les tours en partant de 5 jusqu'à 12, ou de 0 à 7, il y aura 7 tours...
Cela veut dire que tu utilises une boucle for si tu sais au départ combien de tours tu vas faire...
Exemple :
Tu veux voir afficher tous les entiers compris entre 1 et 232, multiples de 17 (il faut demander 233 pour avoir 232 : arrivé au nombre 233 Python sortira de la boucle sans tour supplémentaire
if i%17==0:
print(i, end=" ")
qui te donne :
17 34 51 68 85 102 119 136 153 170 187 204 221
Ce code fait trop de calculs, pourquoi ?
Le compteur i qui est utilisé pour un nombre entier entre 17 et 200 inclus, après 17, teste si 18, 19, 20, 21, 22 a pour reste 0 dans la division par 17...
C'est complètement inutile.
Toi, tu le fais, mais Python est obéissant : il fait strictement ce que tu lui dis de faire...
Or la boucle for ou range plus exactement admet un 3e paramètre : le pas...
Du coup, comme je sais que les multiples de 17 se trouvent de 17 en 17, j'ajoute un pas de 17, et je n'ai plus de test à faire, juste demander de compter de 17 en 17 :
print(i, end=" ")
Dichotomie toujours : valeur approchée de $\sqrt 5$ à $10^{-12}$ près :
while b-a>10**-n:
m=(a+b)/2
if m**2>5:
b=m
else:
a=m
print (m)
Résultat du calcul ci-dessus
2.23606797750017
Résultat donné par la fonction Python sqrt
2.23606797749979
@+
Arx Tarpeia Capitoli proxima...
En ligne
#29 24-01-2020 21:57:41
- 72Messo10
- Membre
- Inscription : 27-12-2019
- Messages : 205
Re : Trigo math aide
Ah d'accord merci je viens de comprendre mais ducoup les indentations sont obligatoires mais je sais pas quand les mettre ou pas
Hors ligne
#30 25-01-2020 08:55:40
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Trigo math aide
Re,
Quoi de mieux pour comprendre Python que d'examiner quelques codes...
Voir :
http://www.bibmath.net/forums/viewtopic … 642#p80642
http://www.bibmath.net/forums/viewtopic.php?id=12117
http://www.bibmath.net/forums/viewtopic.php?id=11695
Oui, l'indentation est la clef de voute de Python...
Tout bloc doit être indenté (lorsqu'une ligne se termine par deux points)
Donc après :
instructions
elif (...) :
instructions
else:
instructions
Et si toutes les instructions à l'intérieur du bloc 2 seront indentées de 4 espaces par rapport à cette première ligne...
Exemple avec plusieurs blocs enchâssés :
if chaine=="":
return 0,""
alphabet=[chr(i) for i in range(97,123)]
occurrences=[]
for lettre in alphabet:
total=0
if lettre in chaine:
for caractere in chaine:
if caractere==lettre:
total+=1
occurrences.append(total)
else:
occurrences.append(0)
maxi=max(occurrences)
for i in range(26):
if occurrences[i]==maxi:
break
return maxi,alphabet[i]
chaine="J'ai simplement dit que je préfère utiliser une variable de plus et retourner lettreplusfrequente, lettrecherchee, lettre_attendue, lettrereponse peu importe pourvu que le nom soit clair, plutôt que alphabet[ i]"
maximum, lettre=Plus_Frequent(chaine)
if lettre=="":
print ("La chaîne entrée était vide.")
else:
print ("La lettre minuscule non accentuée",lettre,"était présente", maximum, "fois dans la chaine.")
@+
Arx Tarpeia Capitoli proxima...
En ligne
#31 25-01-2020 09:19:35
- 72Messo10
- Membre
- Inscription : 27-12-2019
- Messages : 205
Re : Trigo math aide
Merci beaucoup de ton aide je crois avoir compris
Hors ligne
#32 25-01-2020 10:37:46
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : Trigo math aide
Bonbjour
Version bien plus courte et plus "sophistiquée" :
def Plus_Frequent(chaine):
if chaine=="":
return 0,""
alphabet=[chr(i) for i in range(97,123)]
occurrences=[chaine.count(lettre) for lettre in alphabet]
maxi=max(occurrences)
return maxi,alphabet[occurrences.index(maxi)]
chaine="J'ai simplement dit que je préfère utiliser une variable de plus et retourner lettreplusfrequente, lettrecherchee, lettre_attendue, lettrereponse, peu importe pourvu que le nom soit clair, plutôt que alphabet[ i]"
maximum, lettre=Plus_Frequent(chaine)
if lettre=="":
print ("La chaîne entrée était vide.")
else:
print ("La lettre minuscule non accentuée",lettre,"était présente", maximum, "fois dans la chaine.")
@+
Arx Tarpeia Capitoli proxima...
En ligne