<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 $$
\def\CC{\bf C}
\def\QQ{\bf Q}
\def\RR{\bf R}
\def\ZZ{\bf Z}
\def\NN{\bf N}
$$
Tracer une fonction
Step1:  La librairie Sympy utilise matplotlib, une autre librairie de Python, pour faire des dessins. Pour activer l'affichage des graphiques dans Jupyter, on écrit d'abord ceci dans une cellule
Step2:  Tracer une fonction $\RR\to\RR$
On importe la fonction plot qui permet de dessiner des fonctions
Step3:  Un premier exemple. Par défaut, l'intervalle pour les $x$ est $[-10,10]$ 
Step4:  <img src="images/sin_x.png" alt="image" width="264" />
Un deuxième exemple sur l'intervalle $[-100, 100]$ 
Step5:  <img src="images/sinx_x.png" alt="image" width="264" />
On trace une parabole de couleur rouge dans l'intervale $[-5, 5]$ avec un titre
Step6:  <img src="images/youpi.png" alt="image" width="264" />
Tracer plusieurs fonctions $\RR\to\RR$
On trace plusieurs fonctions sur le même intervalle de la façon suivante. Dans cet exemple, on a aussi spécifier une limite inférieure et supérieure pour l'axe des $y$ 
Step7:  <img src="images/x_x2_x3.png" alt="image" width="226" />
Pour dessiner les trois fonctions avec des couleurs différentes, il faut créer un dessin à la fois et ensuite les combiner. L'option show=False permet d'éviter d'afficher les dessins intermédiaires
Step8:  On ajoute à p1 les graphes p2 et p3 
Step9:  Maintenant p1 contient les trois graphes
Step10:  On affiche le graphe des trois fonctions
Step11:  <img src="images/x_x2_x3_colors.png" alt="image" width="226" />
Tracer une fonction $\RR^2\to\RR$
On importe la fonction plot3d du sous-module sympy.plotting 
Step12:  Un premier exemple
Step13:  <img src="images/x2_y2.png" alt="image" width="264" />
Un deuxième exemple
Step14:  <img src="images/sin10x_cos4y.png" alt="image" width="264" />
On trouvera d'autres exemples en consultant la documentation de plot? et plot3d? ou dans la section Plotting du tutoriel de Sympy
Step15:  La fonction plot_parametric permet de tracer des fonctions paramétrés $\RR\to\RR^2$. Par exemple, on trace la courbe de Lissajous lorsque $a=3$ et $b=2$ 
Step16:  <img src="images/lissajous.png" alt="image" width="226" />
Dessiner une fonction $\RR\to\RR^3$
La fonction plot3d_parametric_line permet de tracer des courbes dans l'espace 3d. Par exemple, on trace une hélice
Step17:  <img src="images/helice.png" alt="image" width="302" />
Dessiner une fonction $\RR^2\to\RR^3$
La fonction plot3d_parametric_surface permet de tracer des surfaces dans $\RR^3$. Par exemple, on trace un tore
Step18:  <img src="images/tore.png" alt="image" width="302" />
Dessiner les solutions d'une équation implicite
Step19:  La fonction plot_implicit permet de tracer les solutions d'une équation implicite
Step20:  <img src="images/rotated_ellipse.png" alt="image" width="453" />
On peut modifier les étendues des variables x et y de la façon suivante (le dessin n'est pas affiché dans ces notes)
Step21:  Tracer une région de $\RR^2$
La fonction plot_implicit peut aussi servir à dessiner une région de points qui satisfont une inégalité
Step22:  <img src="images/region.png" alt="image" width="302" />
Pour tracer la région définie par plusieurs inégalités, on utilise la fonction And de sympy
Step23:  <img src="images/region_bornee.png" alt="image" width="302" />
Dessiner une fonction complexe avec mpmath
mpmath est une librairie Python pour faire des calculs en précision arbitraire sur les nombres flottants. Elle permet aussi de faire des dessins de fonctions complexes.
La façon d'importer la librairie mpmath n'est pas exactement la même selon qu'on utilise une installation normale de SymPy ou qu'on utilise SageMath
Step24:  Rappelons que sans la ligne suivante, les dessins ne s'afficheront pas
Step25:  La syntaxe des arguments n'est pas exactement la même que pour la fonction plot de SymPy. Il faut définir une fonction Python avec la commande def ou encore sur une ligne avec lambda. Par exemple, la fonction identité peut s'écrire lambda z
Step26:  <img src="images/z.png" alt="image" width="264" />
Les couleurs de l'arc en ciel doivent être interprétés comme l'argument d'un nombre complexe (rouge pour un nombre réel positif). Le module du nombre complexe est représenté par la transparence (0=noir opaque, $\infty$ = oo = blanc transparent).
De la même façon, on ne peut pas utiliser le I de sympy avec mpmath, il faut utiliser les nombres complexes de Python. Le dessin suivant illustre la multiplication par le nombre complexe $i$, c'est-à-dire une rotation de 90 degrés
Step27:  Les pixels en rouges sont envoyés sur la droite réelle positive par la fonction lambda z
Step28:  <img src="images/z5_1.png" alt="image" width="264" />
Cela permet aussi d'étudier les zéros de la fonction zeta de Riemann
<ASSISTANT_TASK:>
Python Code:
from __future__ import division, print_function   # Python 3
from sympy import init_printing
init_printing(use_latex='mathjax',use_unicode=False)  # Affichage des résultats
Explanation: $$
\def\CC{\bf C}
\def\QQ{\bf Q}
\def\RR{\bf R}
\def\ZZ{\bf Z}
\def\NN{\bf N}
$$
Tracer une fonction
End of explanation
%matplotlib inline
Explanation: La librairie Sympy utilise matplotlib, une autre librairie de Python, pour faire des dessins. Pour activer l'affichage des graphiques dans Jupyter, on écrit d'abord ceci dans une cellule:
End of explanation
from sympy import plot  
Explanation: Tracer une fonction $\RR\to\RR$
On importe la fonction plot qui permet de dessiner des fonctions:
End of explanation
from sympy import sin
from sympy.abc import x
plot(sin(x))
Explanation: Un premier exemple. Par défaut, l'intervalle pour les $x$ est $[-10,10]$ :
End of explanation
plot(sin(x)/x, (x,-100,100))
Explanation: <img src="images/sin_x.png" alt="image" width="264" />
Un deuxième exemple sur l'intervalle $[-100, 100]$ :
End of explanation
plot(x**2+x-6, (x,-5,5), line_color='red', title='Youpi')
Explanation: <img src="images/sinx_x.png" alt="image" width="264" />
On trace une parabole de couleur rouge dans l'intervale $[-5, 5]$ avec un titre:
End of explanation
plot(x, x**2, x**3, (x, -2, 2), ylim=(-2,2))
Explanation: <img src="images/youpi.png" alt="image" width="264" />
Tracer plusieurs fonctions $\RR\to\RR$
On trace plusieurs fonctions sur le même intervalle de la façon suivante. Dans cet exemple, on a aussi spécifier une limite inférieure et supérieure pour l'axe des $y$ :
End of explanation
p1 = plot(x,    (x, -1, 1), show=False, line_color='b')
p2 = plot(x**2, (x, -1, 1), show=False, line_color='r')
p3 = plot(x**3, (x, -1, 1), show=False, line_color='g')
Explanation: <img src="images/x_x2_x3.png" alt="image" width="226" />
Pour dessiner les trois fonctions avec des couleurs différentes, il faut créer un dessin à la fois et ensuite les combiner. L'option show=False permet d'éviter d'afficher les dessins intermédiaires:
End of explanation
p1.extend(p2)
p1.extend(p3)
Explanation: On ajoute à p1 les graphes p2 et p3 :
End of explanation
print(p1)
Explanation: Maintenant p1 contient les trois graphes:
End of explanation
p1.show()
Explanation: On affiche le graphe des trois fonctions:
End of explanation
from sympy.plotting import plot3d
Explanation: <img src="images/x_x2_x3_colors.png" alt="image" width="226" />
Tracer une fonction $\RR^2\to\RR$
On importe la fonction plot3d du sous-module sympy.plotting :
End of explanation
from sympy.abc import x,y
plot3d(x**2+y**2)
Explanation: Un premier exemple:
End of explanation
plot3d(sin(x*10)*cos(y*4), (x, -1, 1), (y, -1, 1))
Explanation: <img src="images/x2_y2.png" alt="image" width="264" />
Un deuxième exemple:
End of explanation
from sympy import sin, cos
from sympy.abc import u, v
Explanation: <img src="images/sin10x_cos4y.png" alt="image" width="264" />
On trouvera d'autres exemples en consultant la documentation de plot? et plot3d? ou dans la section Plotting du tutoriel de Sympy: http://docs.sympy.org/latest/modules/plotting.html
Dessiner une fonction $\RR\to\RR^2$
Dans cette section et les suivantes, on aura utilisera les fonctions et variables symboliques suivantes:
End of explanation
from sympy.plotting import plot_parametric
plot_parametric(cos(3*u), sin(2*u), (u, -5, 5))
Explanation: La fonction plot_parametric permet de tracer des fonctions paramétrés $\RR\to\RR^2$. Par exemple, on trace la courbe de Lissajous lorsque $a=3$ et $b=2$ :
End of explanation
from sympy.plotting import plot3d_parametric_line
plot3d_parametric_line(cos(u), sin(u), u, (u, -15, 15))
Explanation: <img src="images/lissajous.png" alt="image" width="226" />
Dessiner une fonction $\RR\to\RR^3$
La fonction plot3d_parametric_line permet de tracer des courbes dans l'espace 3d. Par exemple, on trace une hélice:
End of explanation
from sympy.plotting import plot3d_parametric_surface
X = cos(u)*(5+2*cos(v))
Y = sin(u)*(5+2*cos(v))
Z = 2*sin(v)
plot3d_parametric_surface(X, Y, Z, (u, -.5, 4), (v, -5, 5))
Explanation: <img src="images/helice.png" alt="image" width="302" />
Dessiner une fonction $\RR^2\to\RR^3$
La fonction plot3d_parametric_surface permet de tracer des surfaces dans $\RR^3$. Par exemple, on trace un tore:
End of explanation
from sympy import plot_implicit, Eq
from sympy.abc import x, y
Explanation: <img src="images/tore.png" alt="image" width="302" />
Dessiner les solutions d'une équation implicite
End of explanation
eq = Eq(x**2+y**2+x*y-2*x, 5)
eq
plot_implicit(eq)
Explanation: La fonction plot_implicit permet de tracer les solutions d'une équation implicite:
End of explanation
plot_implicit(eq, (x,-2,5), (y,-5,3))
Explanation: <img src="images/rotated_ellipse.png" alt="image" width="453" />
On peut modifier les étendues des variables x et y de la façon suivante (le dessin n'est pas affiché dans ces notes):
End of explanation
plot_implicit(y > 2*x+1)
Explanation: Tracer une région de $\RR^2$
La fonction plot_implicit peut aussi servir à dessiner une région de points qui satisfont une inégalité:
End of explanation
from sympy import And
plot_implicit(And(y>2*x+1, y<5*x, x+y<5))
Explanation: <img src="images/region.png" alt="image" width="302" />
Pour tracer la région définie par plusieurs inégalités, on utilise la fonction And de sympy:
End of explanation
from sympy import mpmath    # Sympy (installation normale)
import mpmath               # SageMath
Explanation: <img src="images/region_bornee.png" alt="image" width="302" />
Dessiner une fonction complexe avec mpmath
mpmath est une librairie Python pour faire des calculs en précision arbitraire sur les nombres flottants. Elle permet aussi de faire des dessins de fonctions complexes.
La façon d'importer la librairie mpmath n'est pas exactement la même selon qu'on utilise une installation normale de SymPy ou qu'on utilise SageMath:
End of explanation
%matplotlib inline
Explanation: Rappelons que sans la ligne suivante, les dessins ne s'afficheront pas:
End of explanation
mpmath.cplot(lambda z: z, [-10, 10], [-10, 10])
Explanation: La syntaxe des arguments n'est pas exactement la même que pour la fonction plot de SymPy. Il faut définir une fonction Python avec la commande def ou encore sur une ligne avec lambda. Par exemple, la fonction identité peut s'écrire lambda z:z en Python.
On trace la fonction identité pour comprendre la signification de l'image obtenue:
End of explanation
I = complex(0,1)         # le nombre complexe I de Python
mpmath.cplot(lambda z: I*z, [-10, 10], [-10, 10])
Explanation: <img src="images/z.png" alt="image" width="264" />
Les couleurs de l'arc en ciel doivent être interprétés comme l'argument d'un nombre complexe (rouge pour un nombre réel positif). Le module du nombre complexe est représenté par la transparence (0=noir opaque, $\infty$ = oo = blanc transparent).
De la même façon, on ne peut pas utiliser le I de sympy avec mpmath, il faut utiliser les nombres complexes de Python. Le dessin suivant illustre la multiplication par le nombre complexe $i$, c'est-à-dire une rotation de 90 degrés:
End of explanation
mpmath.cplot(lambda z: z**5-1, [-2, 2], [-2, 2])
Explanation: Les pixels en rouges sont envoyés sur la droite réelle positive par la fonction lambda z: I*z.
<img src="images/Iz.png" alt="image" width="264" />
Le dessin suivant permet de voir les cinq racines cinquième de l'unité:
End of explanation
from mpmath import zeta
mpmath.cplot(zeta, [-10, 10], [-50, 50])
Explanation: <img src="images/z5_1.png" alt="image" width="264" />
Cela permet aussi d'étudier les zéros de la fonction zeta de Riemann:
End of explanation
<END_TASK>