J'aimerais voir Syracuse …

il n'y a pas que l'astro dans les sciences.
Répondre
Avatar de l’utilisateur
Vincent Boudon
Messages : 18933
Inscription : sam. 5 juil. 2008 12:36
Localisation : Dijon
Contact :

J'aimerais voir Syracuse …

Message par Vincent Boudon » sam. 23 déc. 2023 13:23

Allez, pas d'astronomie, mais un peu de maths :mrgreen: Des maths très simples, mais qui font se prendre la tête aux matheux depuis des décennies.

Due originellement à Lothar Collatz, la conjecture dite de Syracuse (du nom de l'université du même nom, près de New York, qui l'a popularisée) est vraiment simple : prenez un nombre entier quelconque. Si il est pair, divisez-le par 2, sinon multipliez le par 3 et ajoutez 1. Cela donne un nouveau nombre. Recommencez la même procédure à partir de celui-ci. Vous obtenez une suite de nombres. Il semble qu'au bout d'un certain nombre d'itérations (le "temps de vol"), la suite "atterrisse" toujours sur le nombre 1, ce qui donne ensuit invariablement 4, 2, 1, 4, 2, 1, …

Sauf que personne n'a jamais su démontrer cette conjecture. On ignore si il n'existerait pas au moins un nombre, très grand (car on en a déjà testé vraiment beaucoup), tel que la suite n'arrive jamais à 1. Certains s'y sont cassé les dents, d'autres ont prétendu avoir réussi (y compris récemment un personnage médiatique aux motivations douteuses(*)), mais non, rien à faire.

(*) En fait la vidéo n'en parle pas, malgré l'image-titre !

Mathador vous conte cette histoire (avec la collaboration sympathique d'autres youtubeurs) :



Pour ceux que ça intéresse, j'ai fait un petit programme Python qui trace cette suite jusqu'à son "atterrissage" et je joins aussi une figure en exemple.
# Suite de Syracuse
import math
import matplotlib.pyplot as plt
#
n = 837799
#
cntmax = 5
axmult = 0.01
#
x = []
y = []
#
m = n
x.append(0)
y.append(m)
#
cnt = 0
stop = 0
i = 1
#
while cnt < cntmax:
i = i+1
x.append(i-1)
if m%2 == 0:
y.append(m/2)
else:
y.append(3*m+1)
m = y[i-1]
if m == 1:
cnt = cnt+1
if cnt == 1:
stop = i-1
#
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,y,"r:",linewidth=0.5)
ax.plot(x,y,"b.",markersize=1)
ax.plot(x[stop],y[stop],"ro",markersize=2)
t = ax.yaxis.get_offset_text()
t.set_size(10)
plt.axis([0,i-1,-axmult*max(y),max(y)*(1+axmult)])
plt.xlabel('Itération',fontsize=10)
plt.ylabel('Valeur',fontsize=10)
plt.tick_params(axis='both', which='major', labelsize=10)
plt.title("Suite de Syracuse pour n = "+str(n)+", temps de vol = "+str(stop),fontsize=12)
plt.grid(True)
plt.show()
plt.savefig('Syracuse.png',dpi=600)
Syracuse.png
Vincent

Répondre