Ordre de travail avec des expressions de polynômes
Bonjour
J'essaie de comprendre python et de travailler les bibliothèques de calcul. Là, mon but est d'afficher une décomposition en éléments simples d'un polynôme. Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| import sympy as sp
x=sp.Symbol('x')
p=64*x**6-1
list=sp.factor_list(p)
#list=sp.factor_list(sp.Poly(p)) # ne marche pas parce que les multiplications développent automatiquement
p=1
for i in range(len(list[1])) :
if list[1][i][1]==1 :
p=p*(list[1][i][0])
else :
p=p*(list[1][i][0])**list[1][i][1]
p=list[0]*p # Le coefficient du monome de plus haut degré
display(p)
for i in range(len(list[1])) :
sol=sp.solve(list[1][i][0],x)
if len(sol)==1 :
print(sol[0]," d'ordre ",list[1][i][1])
else :
print(list[1][i][0]," sans racine réelle d'ordre ",list[1][i][1])
# Pour les racines complexes
p=64*x**6-1
list=sp.factor_list(p,extension=sp.roots(p))
display(list)
p=1 # Le coefficient du monome de plus haut degré
for i in range(len(list[1])) :
if list[1][i][1]==1 :
p=p*(list[1][i][0])
else :
p=p*(list[1][i][0])**list[1][i][1]
display(list[1][i]," => ",p) # affichage pour bien vérifier l'ordre d'arrivée
p=list[0]*p
display(p)
print ("liste des racines :")
for i in range(len(list[1])) :
print(list[1][i][0]," => ",x-list[1][i][0]," d'ordre ",list[1][i][1]) |
J'ai deux problèmes au niveau des racines complexes :
1) J'ai fait afficher une à une les opérations effectuées pour générer le polynôme décomposer. Le polynôme n'est pas restitué dans le bon sens.
2) Le coefficient du monôme du plus haut degré, je dois l'introduire à la fin, sinon, il est rentré en facteur dans le premier terme utilisé. C'est à dire que je dois initialiser p par p=1 et conclure par p=list[0]*p. Si je ne fais qu'initialiser par p=list[0], ça ne marche pas.
édit : Une autre question : comment ne récupérer que le 𝑥3−1, de Poly(𝑥3−1,𝑥,𝑑𝑜𝑚𝑎i𝑛=ℤ) ?