Nous allons voir comment créer un nuage de points représentant une suite numérique (arithmétique, géométrique ou autre) avec Python.

Le principe est très simple: utiliser matplotlib, une librairie de Python, pour construire le nuage de points associés à n’importe quelle suite numérique.

Nuage de points d’une suite arithmétique avec Python

Prenons l’exemple de la suite \( (u_n) \) définie pour tout entier naturel \(n\) par:$$\begin{cases}u_0=-3\\u_{n+1}=u_n+2,5\end{cases}$$

import matplotlib.pyplot as plt

def u(n):
    if n == 0:
        return -3 # valeur de u(0)
    
    return u(n-1) + 2.5

x = [ n for n in range(10) ] 
y = [ u(n) for n in range(10) ]

plt.scatter(x,y)

plt.title('Nuage de points : suite arithmétique')
plt.xlabel('x')
plt.ylabel('y')

plt.show()
nuage de points d'une suite arithmétique avec Python

L’idée est de construire deux listes:

  • une liste “x” contenant toutes les valeurs de l’indice n (ligne 9);
  • une liste “y” contenant toutes les valeurs de \(u_n\) pour n variant dans la liste “x”.

Remarquez que nous avons construit les listes par compréhension, ce qui va plus vite. Sinon, à la place des lignes 9 et 10, on aurait pu écrire:

x , y = [] , []
for n in range(10):
    x.append(n)
    y.append( u(n) )

Pour notre exemple, les listes “x” et “y” donnent alors:

x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [-3, -0.5, 2.0, 4.5, 7.0, 9.5, 12.0, 14.5, 17.0, 19.5]

Ensuite, on demande à la fonction scatter de mettre tous les points de coordonnées \( (x_i;y_i) \).

Bien entendu, je me suis ici limité à 10 termes, mais on peut moduler ce nombre en changeant le paramètre de la fonction range aux lignes 9 et 10.

Nuage de points d’une suite géométrique avec Python

Prenons l’exemple des suites \( (u_n) \) et \( (v_n) \) définies pour tout entier naturel \(n\) par:$$\begin{cases}u_0=2\\u_{n+1}=1,05u_n\end{cases}\quad\text{et}\quad\begin{cases}v_0=4\\v_{n+1}=0,7v_n\end{cases}$$

import matplotlib.pyplot as plt

def u(n):
    if n == 0:
        return 2 # valeur de u(0)
    
    return u(n-1) * 1.05

def v(n):
    if n == 0:
        return 4 # valeur de v(0)
    
    return v(n-1) * 0.7

x = [ n for n in range(10) ] 
y = [ u(n) for n in range(10) ]
z = [ v(n) for n in range(10) ]

plt.scatter(x , y , c = 'coral' , label = 'u(n): q > 1')
plt.scatter(x , z , c = 'blue' , label = 'v(n): 0 < q < 1')

plt.title('Nuage de points : suites géométriques')
plt.legend()
plt.savefig('nuage-points-suites-geometriques-python.jpg')
plt.show()

Afin de construire plusieurs nuages de points, il suffit de faire appel à scatter autant de fois qu’il y a de nuages à construire. Pour les différencier, il faudra alors utiliser des couleurs.

La liste des couleurs est disponible sur la page https://matplotlib.org/stable/gallery/color/named_colors.html.

nuages de points de suites géométriques avec Python

Nuages de points d’une suite quelconque avec Python

Pour simplifier les choses, on pourrait imaginer une fonction trace qui tracerait toutes les suites d’un seul coup. Je vous propose alors le programme suivant:

Partie réservée aux abonné·e·s de ce site.
Pour un abonnement à vie (10 €), allez dans la boutique.

Ici, la difficulté est d’informer l’expression de chacune des suites. J’ai opté pour la syntaxe lambda. Par exemple,

u = lambda k: 1.05*u(k-1) if k>=1 else 2.5

désignera la suite géométrique de premier terme 2,5 et de raison 1,05.

Cela donne par exemple:

u = lambda k: 1.05*u(k-1) if k>=1 else 2.5
v = lambda k: 0.95*v(k-1) if k>=1 else 7
w = lambda k: 0.5*w(k-1) if k>=1 else 10

L = [u,v,w]
C = ['coral','blue','green']
LAB = ['u','v','w']
titre = 'Nuage de points : suites géométriques'

trace(20,L,C,LAB,'Nuage de points : suites géométriques',titre)
nuages de points de suites géométriques avec Python