Aller au contenu

Maths et sciences - Calculs et tracés avec sympy

Avant de démarrer⚓︎

Python

Nous utilisons ici Python. Pour se familiariser avec l'introduction de Python dans votre site, se reporter au tutoriel spécifique :

Tutoriel créer son site avec Python

PLus particulèrement : écrire des exercices Python

Bac à sable

Depuis la version v.2.0.1 le site modèle à cloner contient une page "Bac à sable" qui permet de tester sympy pour le calcul formel ou les tracés, ainsi que la tortue.

Si vous avez une version antérieure, vous pouvez tout simplement recopier le répertoire sympy, py_sandbox et la page bac_a_sable.md dans docs.

lien vers le dépôt du site à cloner

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') }}
Rendu


###(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() }}

Rendu


###(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') }}

Rendu


###(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

Lien pour tester du code Python en ligne avec ou sans turtle, sympy et matplotlib⚓︎

Ressouce Educative Libre, sans aucune installation :

https://mcoilhac.forge.apps.education.fr/tester-code-calcul-formel-graphique-animation-avec-python/

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