Partage
  • Partager sur Facebook
  • Partager sur Twitter

Courbe MaxValues Syracuse

    22 décembre 2016 à 14:09:23

    Bonjour, je vous poste ce message afin que vous puissiez me débloquer à un endroit de mon code où je ne sais pas comment m'y prendre.

    Voici ci-dessous le code :

    """Altitude du vol de Syracuse : """
    
    import matplotlib.pyplot as plt
     
    def alt_vol_syracuse(n):
        alt_vol = []
        while n != 1:
            alt_vol.append(n)
            if n % 2 == 0:
                n = n // 2
            else:
                n = 3*n + 1
        alt_vol.append(n)
        return alt_vol
    
    alt_vol = []
    for i in range(2, 10000):
        alt_vol.append(alt_vol_syracuse(i))
        alt_max = []
        for j in alt_vol:
            j = tuple(j)
            alt_max.append(max(j))
        
    
    plt.plot(i, alt_max, '.b', markersize=2) #Je ne sais pas comment faire.
    
    plt.title("Altitute max du vol de Syracuse en fonction de n")
    plt.xlabel("n")
    plt.ylabel("Altitute max")
    
    plt.show(4) # affiche la figure 4 a l'ecran

    Ainsi, ce que je voudrais obtenir c'est la courbe ci-dessous.

    MaxValues Syracuse

    Répondez-moi quand vous aurez du temps libre.

    Je vous en serai très reconnaissant.

    Merci de votre compréhension.

    • Partager sur Facebook
    • Partager sur Twitter
      23 décembre 2016 à 1:12:04

      J'ai plusieurs questions:

      - de la ligne 16 à 22, je ne comprends pas pourquoi ta boucle j (lignes 20-22) est incluse dans ta boucle i. Ligne 18 tu construis une liste de listes. Ligne 19, tu remets ta liste alt_max à zero ou tu l'initialise (et ceci sera fait à chaque tour de boucle i, effaçant tes résultats). Ligne 20 tu parcoures les sous listes. Ligne 21, pourquoi cette conversion en tuple ? Ligne 22, tu prends le max de chaque sous liste.

      - alors oui tu as un résultat, mais tu as parcouru toutes les sous listes à chaque tour de boucle pour ensuite effacer tes maximums pour chaque nouveau tour. Seul le dernier tour te permet d'avoir tes résultats.

      - je suppose que ta ligne 25 doit tracer les droites ? alt_max, je vois l'idée, mais i ? C'est celui de ta boucle ligne 17 ? Il faudrait préciser les valeurs de i soit en mettant ta ligne 25 dans la boucle, soit en mettant les valeurs de i dans une variable pour pouvoir les retrouver. En l'état, ton programme ne peut pas deviner que i c'est celui de ta boucle.

      - Dernier problème, je ne comprends pas comment tu obtiens ce graphe avec différentes droites. Comment fais-tu varier la pente ? En modifiant la ligne 12 ?

      • Partager sur Facebook
      • Partager sur Twitter
        23 décembre 2016 à 9:39:49

        Bonjour,

        Ce graphique représente les altitudes maximales atteintes selon n (dans la suite de Syracuse).

        L'idée était la suivante :

        - Pour i variant de 2 à 10 000, je stocke les listes obtenus d'après la suite de Syracuse dans une liste nommée : alt_vol.

        - Puis, dans chaque sous-listes contenues dans alt_vol, je prends les maximums que je stocke dans une autre liste nommée : alt_max (rôle de j).

        - Après ce que je ne vois pas c'est comment je peux tracer cette courbe en ayant une liste du type : 

        [(i1, a1), (i2, a2), ..., (in, an)] avec i : les nombres n testés dans la suite et a : l'altitude maximale obtenue pour chacun de ces nombres n.

        Répondez-moi quand vous aurez du temps libre.

        Je vous en serai très reconnaissant.

        Merci de votre compréhension.

        • Partager sur Facebook
        • Partager sur Twitter
          23 décembre 2016 à 9:59:05

          Oui, mais tes couples [(i1, a1), ..., (in, an)] ne permettent de tracer qu'une seule courbe, alors que sur ton graphique, il y a un infinité de courbes !

          Quoiqu'il en soit, avant d'aller plus loin, tu devrais corriger ton code selon mes précédentes remarques (inclusion des boucles lignes 16-22 et valeurs de l'argument i ligne 25).

          Enfin, ton problème est sur la fonction .plot() qui est censée afficher les points ? As-tu pensé à consulter la documentation et à tester jusqu'à trouver comment elle fonctionne ? ( http://matplotlib.org/api/pyplot_api.html ; un exemple http://matplotlib.org/users/pyplot_tutorial.html )

          La première chose que je constate c'est que tu devrais avoir:

          plt.plot(i, alt_max,...)

          avec i et alt_max des listes de valeurs. Seulement, dans ton code comme je te l'expliquait, le i ligne 25 ne correspond à rien et surtout pas à une liste.

          -
          Edité par Voiid 23 décembre 2016 à 15:58:06

          • Partager sur Facebook
          • Partager sur Twitter

          Courbe MaxValues Syracuse

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown