Python et polynômes

Bonjour,

cela fait écho au fil d'algèbre " Polynômes unitaires de degré minimal annulant Z/nZ" http://www.les-mathematiques.net/phorum/read.php?3,1597134,1597134#msg-1597134 ...
(je ne sais pas faire les renvois...
[Place la souris sur la recopie du titre du message, clic droit > Copier l'adresse du lien] )

Je représente donc les polynômes unitaires à l'aide de listes. Par exemple $P(X)=2+3X+6X^2+X^3$ sera représenté par la liste $~[2,3,6,1]$

Je cherche donc à construire une liste, par exemple de tous les polynômes unitaires de degré $k=3$ dont les coefficients sont dans l'ensemble $[0,1,2,3,4,5],\ (n=6)$ qui représente $\mathbb{Z}/n\mathbb{Z}$.

En plus clair si l'on peut dire, je souhaite obtenir une liste du type qui contient tous les polynômes possibles.

Enspolys = $0,0,0,1],~[1,0,0,1],~\ldots,~[5,5,5,1$.

Je dois dire que malgré de nombreuses tentatives, je patine sévère, mon idée initiale étant de changer les valeurs d'une liste initiale $[0,0,0,1]$ mais à chaque changement de coefficient d'une liste, toutes les listes construites changeaient aussi...

Espérant avoir été clair dans ma demande.
Jean-éric

Réponses

  • Tu peux utiliser la bibliothèque itertools et construire ta classe de polynômes à la main si tu y tiens.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Outch, là faut vraiment tout faire... Bon trop long à mettre en place pour l'instant.

    Pas le temps d'étudier tout cela. Merci Nicolas.
  • Non non, il faut juste une classe où tu codes les axiomes et les propriétés dont tu te sers des polynômes.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Nicolas parle de définir une classe pour manipuler les polynômes. Ce n'est pas forcément nécessaire.

    Tu peux utiliser itertools ainsi :
    from itertools import product
    for t in product(range(0,5), repeat=5):
        print(t)
    
    (je te laisse jouer avec pour avoir exactement ce que tu veux).

    À noter qu'ici tu n'auras pas la liste de tous les polynômes mais un générateur qui va t'énumérer toutes ces combinaisons (je pense que ça te suffit).
  • Bonsoir,
    Enspolys = [[i,j,k,1] for i in range(6) for j in range(6) for k in range(6)]
    
  • Après je pense deviner ton erreur, tu as du faire un truc comme:
    L = [[0,0,0,0,1]]*5
    

    Voir ici pour quelques détails.
  • @sebsheep

    c'est exactement cela... si j'ai bien compris en copiant la même liste plusieurs fois dans une autre, dès que tu changes un coefficient d'une seule toutes sont acharnées de la même manière.

    @ Philippe,

    j'avais bien pensé à cette solution, mais tu imagines bien que le nombre et le degré du polynôme change. Donc par exemple pour $n=5$ le polynôme est unitaire de degré 5

    on doit donc construire :

    Enspolys=[[i,j,k,l,m,1]....] les indices de boucles sont en nombre variable... Si tu connais un truc pour garder l'idée et le faire, je suis preneur.

    Merci en tout cas à tous les deux.

    Jean-éric
  • @sebsheep

    Ton générateur fait une partie du travail c'est clair. Reste à transformer chaque t avec des () en une liste [] avec un 1 comme dernier coefficient et là peut-être que cela le fera.

    Merci à toi.
  • Salut jean-éric,
    Voici une autre possibilité :
    def polys(n,k):
        lst = [[1]]
        for _ in range(k+1):
            lst = [[val] + pol for val in range(n) for pol in lst]
        return lst
    
    print(polys(6,3))
    
  • @ Nicolas

    T'as plié l'affaire. Cela marche parfaitement. Comme dit GaBuZaMeu j'ai réinventé l'eau chaude avec ton aide.
    http://www.les-mathematiques.net/phorum/read.php?3,1597134,1601408#msg-1601408

    Le cas n= 8 fournit bien cela :
    >>> (executing file "polynzn.py")
    2X+3X^2+2X^3+X^4
    2X+7X^2+6X^3+X^4
    6X+3X^2+6X^3+X^4
    6X+7X^2+2X^3+X^4

    [Inutile de copier le même programme dans deux messages différents. Un lien suffit. AD]
  • Attention, les crochets encadrant i passent mal ici (ils sont interprétés pas phorum et je ne vois pas de balise pour désactiver l’interprétation).
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
Connectez-vous ou Inscrivez-vous pour répondre.