Aller au contenu

Calculs et tracés avec sympy

la bibliothèque sympy

La bibliothèque sympy permet de réaliser du calcul formel, de tracer simplement en 2D des courbes paramétrées, des courbes implicites, des régions et en 3D des fonctions de deux variables, des courbes et des surfaces paramétrées.

Beaucoup d'exemples à parir du paragraphe 5 dans l'introduction à sympy par Vincent Jalby

Pour des calculs⚓︎

Comment utiliser sympy pour des calculs formels

Commencer par exécuter le code. Vous pourrez écrire vos calculs dans la partie console (en dessous de l'éditeur, à côté de >>>).

Par exemple :

developper

Vous pouvez aussi définir des fonctions dans la partie éditeurs, exécuter le code, et ensuite utiliser la console :

avec fonction

Code à copier
{{ IDE('scripts/sympy_vide') }}
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Fichier sympy_vide.py
from sympy import *
x = symbols('x')
# Vous pouvez ajouter des fonctions ci-dessous.
# Commencer par exécuter ce code puis écrire vos calculs dans la console en bas à côté des >>>
# Vos éventuelles fonctions ci-dessous :

Pour des graphiques⚓︎

Le principe

Le fichier Python

Le fichier Python dans lequel se trouve le code qui permet de tracer la figure désirée doit contenir une section # --- PYODIDE:env --- # dont le début est le suivant :

# --- PYODIDE:env --- #
from sympy import *
import sympy.plotting as plotting

def plot(*a, **kw):
    plotting.plot(*a, **kw)
    PyodidePlot.clear_current_figure_title()

Cela permettra d'utiliser les syntaxes habituelles de la bibliothèque sympy

Le fichier Markdown

Le principe est d'appeler :

  • Une fois la macro

    {{ IDE(...) }}
    

  • Autant de fois que de fenêtres graphiques désirées, la macro :

    {{ figure(...) }}
    

  • Dans le cas où l'on désire plusieurs fenêtres, il faut les identifier. On appelera donc par exemple pour deux fenêtres :

    {{ figure('cible_1') }}
    
    {{ figure('cible_2') }}
    

Tracé d'un seul graphique⚓︎

Code Markdown dans le fichier .md
{{ IDE('scripts/graphe_ex1.py') }}
{{ figure() }}
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Votre figure

Votre tracé sera ici

Fichier python utilisé pour cet exemple
graphe_ex1.py
# --- PYODIDE:env --- #
from sympy import *
import sympy.plotting as plotting

def plot(*a, **kw):
    plotting.plot(*a, **kw)
    PyodidePlot.clear_current_figure_title()

PyodidePlot().target()     # Cible la figure dans laquelle tracer la figure dans la page

# --- PYODIDE:code --- #
# Les imports suivants ont été faits dans du code caché : 
# from sympy import *

x = symbols('x')
# Modifier la ligne ci-dessous qui sert d'exemple
plot(exp(x), x, ln(x), (x,-5,5), ylim=(-5,5), legend=True)

Tracé de plusieurs graphiques dans des fenêtre différentes⚓︎

Le principe est exactement le même pour l'utilisation de la bibliothèque sympy que pour la bibliothèque matplotlib (Utiliser la bibliothèque matplotlib)

  • Il faudra par exemple ajouter dans les sections # --- PYODIDE:env --- # de chaque fichier python:
    fig1 = PyodidePlot('cible_1')et fig2 = PyodidePlot('cible_2') ainsi que fig1.target() et fig2.target()
  • Les figures seront tracées en utilisant les macros :
    {{ figure(...) }}
    
Code Markdown dans le fichier .md
{{ IDE('scripts/fct_carre') }}
{{ figure('cible_1') }}

{{ IDE('scripts/fct_sqrt') }}
{{ figure('cible_2') }}
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Votre figure

Votre tracé sera ici

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Votre figure

Votre tracé sera ici

Fichiers Python utilisés pour cet exemple
fct_carre.py
# --- PYODIDE:env --- #
from sympy import *
import sympy.plotting as plotting

def plot(*a, **kw):
    plotting.plot(*a, **kw)
    PyodidePlot.clear_current_figure_title()

fig1=PyodidePlot('cible_1')
fig1.target()     # Cible la figure dans laquelle tracer la figure dans la page

# --- PYODIDE:code --- #
# Les imports suivants ont été faits dans du code caché : 
# from sympy import *

x = symbols('x')
plot(x**2, (x,-5,5), ylim=(-1,5), legend=True)
fct_sqrt.py
# --- PYODIDE:env --- #
from sympy import *
import sympy.plotting as plotting

def plot(*a, **kw):
    plotting.plot(*a, **kw)
    PyodidePlot.clear_current_figure_title()

fig2=PyodidePlot('cible_2')
fig2.target()     # Cible la figure dans laquelle tracer la figure dans la page

# --- PYODIDE:code --- #
# Les imports suivants ont été faits dans du code caché : 
# from sympy import *

x = symbols('x')
plot(sqrt(x), (x,0,9), ylim=(0,3), legend=True)

Documentation officielle de Frédéric Zinelli

Crédits pour l'intégration de la bibliothèque sympy : Frédéric Zinelli