Rapport de TP, Séance 5#

Manipulations de base en Sage#

Calculer en Sage les expressions suivantes:

  • \(\displaystyle\frac{\partial}{\partial a}\left(1 + F(a, 2ab) + b\right)\)

  • \(\displaystyle\sum_{i=0}^{i=n} i^2\)

  • \(\displaystyle\sum_{n=1}^{\infty} 2^{-n}\)

  • \(\displaystyle\sum_{i=0}^{\infty} 1/i^2\)

Indications: var, function, diff, sum

Factorisations d’un polynôme#

sage: x = var('x')
sage: p = 54*x^4+36*x^3-102*x^2-72*x-12
sage: factor(p)

Cette réponse est-elle satisfaisante? Il s’agit bien d’une factorisation de \(p\), mais son optimalité dépend fortement du contexte! Pour le moment Sage considère \(p\) comme une expression symbolique, qui se trouve être polynomiale. Il ne peut pas savoir si l’on souhaite factoriser \(p\) en tant que produit de polynômes à coefficients entiers ou à coefficients rationnels (par exemple). Pour prendre le contrôle, nous allons préciser dans quel ensemble (domaine de calcul?) nous souhaitons considérer \(p\).

Pour commencer, nous allons considérer p comme un polynôme à coefficient entiers. Nous définissons donc l’anneau \(R=Z[x]\) de ces polynômes:

R = ZZ['x']; R

Puis nous convertissons p dans cet anneau:

q = R(p); q

À l’affichage on ne voit pas de différence, mais q sait qu’il est un élément de \(R\):

sage: parent(q)

Du coup, sa factorisation est sans ambiguïté:

factor(q)

On procède de même sur le corps des rationels:

R = QQ['x']; R
q = R(p); q
factor(R(p))

Dans ce nouveau contexte, la factorisation est encore non ambiguë; mais différente de précédemment. Notons au passage que Sage sait que \(R\) est un anneau euclidien:

R.category()

et donc en particulier un anneau où la factorisation est unique.

Cherchons maintenant une factorisation complète sur les nombres complexes. Une première option est de s’autoriser une approximation numérique des nombres complexes avec 16 bits de précision:

R = ComplexField(16)['x']; R
q = R(p); q
factor(R(p))

Une autre est d’agrandir un peu le corps des rationnels; ici, on va rajouter \(\sqrt{2}\).

R = QQ[sqrt(2)]['x']; R
q = R(p); q
factor(R(p))

Enfin, peut-être souhaite-t’on que les coefficients soient considérés modulo 5 ?

R = GF(5)['x']; R
q = R(p); q
factor(R(p))

Fichiers de code#

  • poly.py

Lancement des tests#

!sage -t poly.py

Exemple de calcul sur les polynômes#

%run poly.py
X = PolyDense.X()
P = X^5*(5/2) + X^2*3 + 5; P
P^5