Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
itc:tps:tp3:exercice1_courbe

Table des matières

Exercice 1 : Tracé d'une courbe avec matplotlib

Divers modules permettent de tracer des courbes d'équation $y = f(x)$. On utilisera ici le module pyplot de matplotlibvoir documentation.

D'autres préfèrent le module pylab de la même bibliothèque.

Pour représenter graphiquement une fonction $f$ sur un segment $[a, b]$ on peut construire une subdivision $(a_i)_{0\leqslant i\leqslant n}$ de $[a,b]$ avec $a_i= a +i \,\frac{b-a}{n}$, soit en Python :

X = [a+i*(b-a)/n for i in range(n+1)]

N'oubliez qu'il faut $n+1$ bornes pour délimiter $n$ intervalles !

À partir de la subdivision précédente, on peut calculer les images $f(x)$ correspondantes, ce qui est immédiat en Python :

Y = [f(x) for x in X]

Il reste à demander l'affichage. Pour cela on fournit les tableaux X et Y à la fonction plot et on peut également ajouter des options de mise en forme : plot(X, Y, options).

On obtient la ligne brisée reliant les points de coordonnées $(a_i\,;\,f(a_i))_{0 \leqslant i \leqslant n}$. Bien sûr, si on choisit n = len(X) assez grand, cette ligne donne l'illusion d'une courbe douce.

import matplotlib.pyplot as plt

def dessin(f, a, b, n):
    """
    Affiche la représentation graphique de f sur [a;b]
    """
    X = [a + i*(b-a)/n for i in range(n+1)]
    Y = [f(x) for x in X]
    plt.figure()
    plt.plot(X, Y, 'r')
    plt.show()

# Création d'une fonction
f1 = lambda x: x**3 - 3*x**2 + x - 5

# On aurait aussi bien pu faire :
'''
def f1(x):
    return x**3 - 3*x**2 + x - 5
'''

dessin(f1, -3, 5, 100)

Des remarques

Le module numpy

Numpy est un module incontournable de Python. Il contient énormément de fonctions très puissantes. Numpy propose notamment des tableaux très performants utilisés en analyse de données – data science – traitement d'images…

Exemple

import matplotlib.pyplot as plt
import numpy as np

def f(x):
    if x == 0:
        return 1
    return np.sin(x)/x

plt.figure()
X = np.linspace(-15, 15, 600)
Y = [f(x) for x in X]
plt.plot(X, Y, 'b')
plt.axhline(linewidth=2, color='k')
plt.axvline(linewidth=2, color='k')
plt.title('la fonction f(x)= sin(x)/x')
plt.axis([-15, 15, -0.5, 1.3])
plt.show()

Des remarques

Vectorialisation

X est un tableau spécial, un tableau Numpy.

En ligne 11, on crée Y comme dans l'exemple précédent, Y = [f(x) for x in X].

On aurait pu faire plus court en écrivant Y = f(X). C'est possible car dans f, on utilise np.sin qui est fait exprès pour des données vectorialisée – sous forme de tableau.

Si f n'avait pas déjà été vectorialisée (par exemple si f utilisait des calculs inadaptés à un tableau Numpy) on pourrait la vectorialiser en créant une version : fvec = np.vectorialize(f).

On pourrait penser que vectorialiser ne change pas grand chose, que ce n'est qu'un gadget typographique. Eh bien c'est plus que cela : Numpy est optimisé dans un langage plus rapide que Python si bien que si on utilise les mécanismes de Numpy, l'exécution sera beaucoup plus rapide.

À faire

À vous de représenter quelques fonctions bien choisies sur des intervalles pertinents, après interaction visuelle avec les retours du logiciel, en utilisant de manière pertinente et efficace les fonctions et les méthodes du module pyplot.

On peut aussi, représenter, pour ceux qui savent ce que c’est, des arcs paramétrés, des courbes planes définies par une équation cartésienne, des courbes et des surfaces, en perspective, dans l’espace à trois dimensions, des lignes de niveaux, des figures géométriques de toutes sortes. Tout ceci est désormais en dehors du programme de mathématiques.

Exemple d'une courbe paramétrée :

import matplotlib.pyplot as plt
import numpy as np
plt.figure()
T = np.linspace(0, 6.28, 100)
X = np.cos(2*T)
Y = np.sin(3*T)
plt.plot(X, Y, 'b')
plt.show()