Une simulation des suites de Collatz

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
syrac

Une simulation des suites de Collatz

par syrac » 15 Fév 2015, 13:47

Voici un algorithme qui permet de générer des suites de Collatz ne comprenant que leurs termes impairs :

Image

L’argument i fourni à la fonction iSuivant est un nombre impair non divisible par 3. Elle renvoie la valeur du terme impair suivant dans la suite de Collatz de i. Elle fonctionne donc par récurrence (dont la conception dépend du langage de programmation utilisé). La fonction récurrente doit se poursuivre aussi longtemps que le terme produit pas iSuivant est impair et plus grand que 1.

La valeur du diviseur de 3i+1 est tirée du tableau associatif assoc. La clé, c’est-à-dire le terme à gauche d’une flèche, correspond à (i mod 96), et le diviseur recherché est la valeur qui lui est associée.

Compte tenu du fait que tout terme pair d’une suite de Collatz est le résultat d’un terme impair multiplié un nombre quelconque de fois par 2, cet algorithme ne peut pas gérer l’ensemble des termes pairs d’une suite. Une fois sur quatre la suite produite se terminera par un entier pair, car le tableau associatif de 32 paires clé ;) valeur ne peut pas contenir l’ensemble des puissances de 2 pouvant diviser un entier pair. C’est pourquoi la fonction récurrente doit s’assurer que chaque valeur produite par iSuivant est bien impaire et plus grande que 1, et s’arrêter si ce n’est pas le cas. Ceci dit, la suite générée par cet algorithme se terminera 3 fois sur 4 par 1.

Voici le graphe de la trajectoire de 21547, originale à gauche et simplifiée à droite. Les deux ont la même forme générale, bien que la seconde soit beaucoup plus lisse (ce qui se comprend aisément) :

Image

Sur 32 paires, le tableau assoc divise 16 fois par 2, 8 fois par 4, 4 fois par 8, 2 fois par 16 et 2 fois par 32. Ceci nous donne le tableau des probabilités de diviser 3i+1 par 2, 4, 8, 16 ou 32 :

Image

Autrement dit, après une division par 2 la valeur du terme impair suivant est sensiblement égale à une fois et demie celle de son prédécesseur. Mais dans tous les autres cas, c’est-à-dire lorsque le diviseur est supérieur à 2, le terme impair suivant est plus petit que son prédécesseur. Comme 1/4+1/8+1/16+1/16 = 1/2, on voit qu’une suite de Collatz a autant de chances de croître que de décroître. Si elle décroît toujours c’est simplement parce que chaque division par une valeur supérieure à 2 lui fait perdre beaucoup plus que ce qu’une division par 2 lui fait gagner :

Image

La somme des quatre derniers pourcentages est égale à 141 %. Où sont passés les 9 % permettant d’équilibrer les 150 % de gain de la division par 2 ? L’explication est simple : si cet algorithme avait pris en compte la division par 64, 128, 256, etc., cette somme aurait tendu vers 150 %. En effet, 4,5 + 2,25 + 1,125 + 0,5625 + … + 4,09273*10^-12 = 9. On a bien un équilibre entre 150% de gain et 150 % de perte. On ne le perçoit pas à l’échelle d’une suite isolée, ce qui ne peut vouloir dire qu’une chose : l’ensemble des suites de Collatz est en équilibre, dans ce sens que les diviseurs de 3n+1 y sont également distribués. Rien n’empêche d’aller plus loin et de dire que la décroissance d’une suite de Collatz est un phénomène localisé, résultant d’une vision partielle de la réalité. Mais bon, en tout cas une chose est sûre, c’est que la distribution des diviseurs y joue un rôle crucial.

Pour le vérifier j’ai imaginé le petit jeu suivant : effectuer un tirage aléatoire des lettres a, b, c, d, e (correspondant à 2, 4, 8, 16, 32) après avoir attribué à chacune un poids équivalent au tableau des probabilités ci-dessus, ce qui fait que a, par exemple, aura autant de chances d’être tiré que b, c, d et e réunis. Mathematica gère tout cela très bien via la fonction RandomChoice, en l’occurrence RandomChoice[{0.5, 0.25, 0.125, 0.0625, 0.0625 } ;) {a, b, c, d, e}, 50], donc un échantillon de 50 lettres. Après obtention de mes 50 lettres pseudo-aléatoirement choisies, je prends un terme initial virtuel égal à 1 000 000 puis je parcours la chaine de lettres : si la première est a je multiplie 1 000 000 par 1,5 ; s’il s’agit de b je le multiplie par 0,75, et par 0.38 s’il s’agit de c, etc. Je répète cette opération récursivement pour chacune des 50 lettres. Voici quelques résultats :

Image

Je suis persuadé qu’avec des suites de plus de 50 lettres le résultat final aurait toujours tendu vers zéro. En fait, le nombre initial choisi et le nombre d’étapes sont intimement liés pour ce qui concerne le résultat final.

Ces suites décroissent systématiquement, ceci malgré la présence massive de lettres a. Voici le graphe de la quatrième suite de lettres, qui ressemble à s’y méprendre à une suite de Collatz simplifiée :

Image

Plus une suite comporte de lettres a successives et plus son graphe affiche des pics marqués. Dans cet exemple, plus de la moitié des lettres sont des a (27 sur 50). Je pense donc que ce sont les divisions de 3n+1 par 2 qui donnent cet aspect chaotique à une suite de Collatz.

Image

La distribution et le comportement de ces suites de lettres ne sont pas totalement aléatoires, puisqu’ils sont fondés sur le même mécanisme qu’une suite de Collatz. S’ils l’étaient, alors une suite pourrait diverger, ce qui n’a jamais été le cas au cours de mes nombreux tests. Reste à savoir si la distribution des diviseurs de 3n+1 au sein d’une suite de Collatz peut être qualifiée ou non de pratiquement aléatoire. J’ai bien sûr ma petite idée là-dessus, mais il n’empêche que de nombreux problèmes qu’il est impossible de formaliser ou de modéliser peuvent être simulés par une méthode de Monte-Carlo, comme c’est le cas ici.



nodjim
Membre Complexe
Messages: 3241
Enregistré le: 24 Avr 2009, 16:35

par nodjim » 15 Fév 2015, 17:33

Il y a un temps, je m'étais intéressé à la forme des nombres dont le suite donnait obligatoirement un nombre plus grand.
Voici comment j'opérais:
2k+1 impair donc---->3(2k+1)/2=3k+2 de parité dépendante de k.
si k pair:
2(2k)+1=4k+1---->6k+2--->3k+1 <4k+1 on laisse tomber ce cas.
si k impair:
2(2k+1)+1=4k+3--->3(2k+1)+2=6k+5 impair--->3(6k+5)+1/2=9k+8>4k+3 on garde.

Reste le seul cas
4k+3---->9k+8 de parité dépendante de k.
et on discute à nouveau selon la parité de k.

8k+3--->9k+4 on garde
8k+7--->27k+26 on garde

etc....

syrac

par syrac » 15 Fév 2015, 18:01

nodjim a écrit:Il y a un temps, je m'étais intéressé à la forme des nombres dont le suite donnait obligatoirement un nombre plus grand.

Comme je viens de l'expliquer, la seule possibilité de voir la suite croître est de diviser 3n+1 une ou plusieurs fois consécutivement par 2. Sont concernés les nombres impairs i tels que i mod 96 = 7, 11, 19, 23, 31, 35, 43, 47, 55, 59, 67, 71, 79, 83, 91 ou 95. Dans ces cas-là 3i+1 ne sera divisible qu'une seule fois par 2, ce qui fera croître la suite. Pour généraliser, ce sont les nombres i tels que

i mod 96 = 12k-1 et 12k-5, 0 < k < 9

Je voudrais apporter une précision à mon précédent post. La probabilité de tomber sur un diviseur 2^k de 3n+1 est de 1/2^k, si bien que le tableau des probabilités devrait se présenter ainsi :

Image

Le fait d’avoir ci-dessus attribué une probabilité de 1/16 à la division par 32 était donc une approximation, nécessitée par le faible nombre de lettres utilisées. En utilisant 8 lettres au lieu de 5 on améliore la précision de la simulation d’une suite de Collatz. La partie « perte », c’est-à-dire la somme de 1/4+1/8+ … +1/256 est égale à 127/256, donc très proche de 1/2. En attribuant à la lettre h une probabilité de 1/128 au lieu de 1/256 on atteint la valeur exacte de 1/2, mais le risque est plus grand de tomber sur une valeur qui va précipiter la suite dans des abîmes dont elle ne se relèvera pas. Il est à mon avis préférable de laisser à h une probabilité d’apparition de 1/256, soit 4 chances sur 1000.

Si on multiplie à chaque étape le nombre initial par la valeur exacte de i2/i1, on élimine l’accumulation d’approximations, si bien qu’il serait peut-être possible de tomber sur la valeur finale 1 au détour d’un test, et de faire le rapprochement entre valeur initiale, nombre d’étapes et résultat final.

syrac

par syrac » 15 Fév 2015, 20:59

Il existe un moyen très simple de savoir quel nombre initial conduira une suite de lettres au résultat final 1. Appelons R le résultat final. Pour peu qu'on ait utilisé la valeur exacte de chaque i2/i1, c'est-à-dire sa forme rationnelle, beaucoup plus précise qu'une approximation, il suffit de prendre 1 pour nombre initial et, à la fin du calcul, de faire 1/R. Cette simple opération donne la valeur qu'il aurait fallu attribuer au nombre initial pour tomber sur le résultat final R = 1. :lol3:

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 11 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite