algorithme

Retrouver tous les sujets résolus.
Répondre
Cédric

algorithme

Message par Cédric » mar. 10 nov. 2020 19:34

Bonjour,
pourquoi le script ci-dessous fait avec Edupython ne représente-t-il pas les points de la suite définie par U0=0
et U(n+1)=U(n)+2n+2 quand je rentre par exemple plotu(3) dans la console ?
Je ne suis pas sûr de ce 'r' et de son intérêt (je me suis inspiré d'autres exemples du livre de Barbazo ...).
Merci de votre aide !

from lycee import *
def u(n):
u=0
for k in range(n):
u=u+2*k+2
return n
import matplotlib.pyplot as plt
def plotu(n):
for k in range(n+1):
plt.plot(k,u(k),'r')
plt.show()
sos-math(21)
Messages : 10354
Enregistré le : lun. 30 août 2010 11:15

Re: algorithme

Message par sos-math(21) » mar. 10 nov. 2020 22:28

Bonjour,
si tu veux que cela retourne le terme d'indice \(n\) de ta suite :
il faut déclarer une variable u à 0 (c'est le \(u_0\) ) : c'est ce que tu as fait
il faut ensuite répéter le calcul défini par récurrence n fois en partant de \(k=0\) : c'est ce que tu as fait
En revanche on renvoie u, pas n (je pense que c'est une faute de frappe)

Code : Tout sélectionner

def u(n):
    """calcule le terme de rang n de la suite """
    u = 0
    for k in range(n):
            u = u + 2*k + 2
    return u
    
Pour le tracé, c'est presque bon, mais il vaut mieux construire deux listes : une liste d'abscisses et une liste d'ordonnées puis appeler la fonction plt.plot sur ces deux listes, en précisant que tu veux des points (lettre 'o'), avec la couleur rouge (lettre 'r').

Code : Tout sélectionner

def graphique_u(n):
    """affiche la représentation des termes de la suite de  0 à n inclus"""
    abscisses = [k for k in range(n+1)]
    ordonnees = [u(k) for k in abscisses]
    plt.plot(abscisses,ordonnees, 'or')
    plt.show()
Un appel de cette fonction d'affichage

Code : Tout sélectionner

graphique_u(12)
donne le graphique suivant
trace_matplotlib.png
Bonne continuation
Cédric

Re: algorithme

Message par Cédric » mer. 11 nov. 2020 11:30

Bonjour et merci beaucoup !
oui, j'avais fait une erreur de frappe.
Merci pour votre script qui est plus clair que :

from lycee import *
import matplotlib.pyplot as plt
def u(n):
u=0
for k in range(n):
u=u+2*k+2
return u
def plotu(n):
for k in range(n+1):
plt.plot(k,u(k),'r.')
plt.show()
sos-math(21)
Messages : 10354
Enregistré le : lun. 30 août 2010 11:15

Re: algorithme

Message par sos-math(21) » mer. 11 nov. 2020 11:51

Bonjour,
en effet pour matplotlib, d'un point de vue de la mémoire de l'ordinateur, il vaut mieux créer les listes d'abscisses et d'ordonner et faire un seul appel à plt.plot plutôt que n appels à plt.plot.
Vérifie que cela marche bien comme demandé.
Bonne continuation
Répondre