Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#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 :-)

, 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 :

Tant que [i]condition est vraie[/i]:
    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 :

    m=(a+b)/2
    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

for i in range(127,233):
    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 :

for i in range(127,233,17):
    print(i, end=" ")

Dichotomie toujours :  valeur approchée de $\sqrt 5$ à $10^{-12}$ près :

a,b=1,3
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 :

for     (...)   :
while (...)   :
if      (...)   :
    instructions
elif   (...)   :
    instructions
else:
    instructions
def nom_de_fonction (paramètres):

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 :

def Plus_Frequent(chaine):    
    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

Pied de page des forums