Calcul symbolique avec sympy

Le système de calcul formel sympy se présente sous forme d'un paquetage python.

Il est moins efficace que les systèmes commerciaux comme maple, mathematica, etc. Mais il est libre, open-source, léger, simple, et totalement écrit en Python.

Ce genre de système s'utilise de préférence en mode interprété. Vous pouvez utiliser la console ou idle, mais un notebook jupyter (ou ipython sur les distributions plus anciennes) est nettement préférable.

1) Parcourez rapidement le tutoriel. Ne lisez pas tout. Repérez rapidement comment définir des variables et former des expressions.

In [1]:
from sympy import *
In [2]:
var('x y z')
Out[2]:
(x, y, z)
In [3]:
P = 2*x**3-4*x+1; P
Out[3]:
2*x**3 - 4*x + 1

2) Essayez la commande expand : retrouvez le triangle de Pascal en développant $(1+x)^n$ pour $n$ de 1 à 14.

In [4]:
expand((1+x)*(1-y))
Out[4]:
-x*y + x - y + 1

3) Il faut être capable de récupérer les coefficients d'un polynôme ou d'un développement limité. Python est un langage orienté objet. Les résultats de vos calculs sont des objets. Souvenez vous qu'on accède aux attributs d'un objet X au moyen de la fonction dir :

dir(X) vous dit tout ce que X sait faire. Ayant repéré une fonction f (ou une méthode X.f), on accède à son aide en ligne au moyen de help(f).

In [5]:
# A ce stade, P n'est pas encore du type polynôme
type(P)
Out[5]:
sympy.core.add.Add
In [6]:
# Ça peut s'arranger
P = P.as_poly()
In [7]:
# Et on a maintenant de nombreuse méthodes intéressantes
P.all_coeffs()
Out[7]:
[2, 0, -4, 1]

4) On peut obtenir un développement limité au moyen de la fonction ou de la méthode series. La méthode removeO() permet de se débarasser du terme d'erreur :

In [8]:
F = x/(1-x-x**2)
P = series(F,x,0,12).removeO(); P
Out[8]:
89*x**11 + 55*x**10 + 34*x**9 + 21*x**8 + 13*x**7 + 8*x**6 + 5*x**5 + 3*x**4 + 2*x**3 + x**2 + x
In [9]:
P = P.as_poly()
ff = P.all_coeffs();ff
Out[9]:
[89, 55, 34, 21, 13, 8, 5, 3, 2, 1, 1, 0]
In [10]:
ff.reverse(); ff
Out[10]:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

5) Trouvez les 12 premiers termes du développement en série de $$C(x) = \frac{1-\sqrt{1-4x}}{2}$$ et interrogez l'encyclopédie en ligne. Que pensez-vous de la fiche ?

In []: