Lundi 07/03
Avant de construire un polynôme, il définir la strcuture algébrique qui le contient, à savoir un anneau de polynômes. Pour cela, il faut choisir dans quelle structure vivent les coefficients de ces polynômes, et également un nom de variable.
Par exemple, si les coefficients sont des entiers relatifs et si l'on souhaite que la variable soit affichée comme X
, alors on entre :
A = PolynomialRing(ZZ, "X")
A
Observons que la variable X
n'est pas encore déclarée.
# X
On la définit ainsi :
X = A.gen()
X
Voici une manière de déclarer simultanément l'anneau de polynôme en Y
et la variable Y
.
B.<Y> = PolynomialRing(ZZ)
B
Y
Les opérations usuelles sur les polynômes sont déjà définies :
X + 2
P = X**3 - 2 * X + 1
P
On peut vérfifier que P
est bien un élément de l'anneau A
print(P.parent() == A)
print(P in A)
Pour retrouver dans quel anneau les coefficients de $P$ sont définis, il y a la méthode .base_ring()
P.base_ring()
Il est également possible de composer des polynômes :
P(X**2 - 1)
Ou de leur appliquer des opérations arithmétiques :
P % (X**2 - 1)
P // (X**2 - 1)
Il existe une fonction générique pour obtenir les racines d'un polynôme. Cette fonction retourne les racines appartenant à l'anneau des coefficients du polynôme considéré. Dans l'exemple suivant, il est écrit que $4$ est une racine de $P(X)$ de multiplicité $1$. En revanche, les racines $1/2$ et $1/3$ sont omises, car $P$ a été défini sur l'anneau des entiers.
P = (X - 4) * (2*X - 1) * (3*X - 1)
print(P)
print(P.roots())
On peut évaluer un polynôme en une entrée :
P(1)
P(2)
Notons qu'on peut l'évaluer sur autre chose qu'un élément de l'anneau des coefficents de $P$ :
P(1/2)
Pour obtenir davantage de racines, on peut préciser l'anneau dans lequel on souhaite des obtenir, ici les rationnels :
P.roots(QQ)
On peut également essayer de factoriser un polynôme dans la structure à laquelle il appartient (donc ici, dans $\mathbb{ZZ}[X]$)
P.factor()
Pour dériver un polynôme :
P.derivative()
Pour calculer un pgcd :
gcd(P, X**2-1)
Pour retrouver les coefficients d'un polynômes, il faut faire attention. La commande de base ne retourne que les coefficients non-nuls, dans l'ordre de degré de croissant :
print(P)
print(P.coefficients())
Si l'on souhaite la liste de tous les coefficients (avec les $0$), il faut ajouter l'argument sparse=False
.
Q = 2 * X**10 + 1
print(Q.coefficients())
print(Q.coefficients(sparse=False))
Si l'on souhaite obtenir le coefficient du monôme de degré $i = 2$ d'un polynôme :
P[2]
Les commandes pour obtenir le degré d'un polynôme, son efficient dominant, et son coefficient constant
print(P.degree())
print(P.leading_coefficient())
print(P.constant_coefficient())
Enfin, pour tracer le graphe d'un polynôme, il y a toujours la fonction plot()
:
plot(P, xmin=-0.5, xmax=4.5)