Outils pour utilisateurs

Outils du site


teaching:progappchim:polynomes-10

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
teaching:progappchim:polynomes-10 [2016/02/23 13:27]
villersd
teaching:progappchim:polynomes-10 [2017/02/24 11:53] (Version actuelle)
villersd
Ligne 3: Ligne 3:
 ===== Dérivation ===== ===== Dérivation =====
 Proposé et testé par RL, étudiant ba2 2012-2013. Proposé et testé par RL, étudiant ba2 2012-2013.
-<sxh python; title : derivation.py>​+<code python derivation.py>​ 
 +#​!/​usr/​bin/​env python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 def polyderiv(a):​ def polyderiv(a):​
-    """​dérivation d'un polynôme 
     """​     """​
-    b = a[:]  #copie de la liste des coefficients du polynôme de départ +    ​dérivation d'un polynôme 
-    n = len(b)-1 ​ #ordre du polynôme+    """​ 
 +    ​b = a[:]       ​#copie de la liste des coefficients du polynôme de départ 
 +    n = len(b) -1  #ordre du polynôme
     for i in range (n+1):     for i in range (n+1):
         b[i] = b[i] * i  #on redéfinit chaque coefficient i de la liste par ce même coefficient*le degré         b[i] = b[i] * i  #on redéfinit chaque coefficient i de la liste par ce même coefficient*le degré
     b.pop(b[0]) ​ #on supprime le premier élément de la liste (terme indépendant)     b.pop(b[0]) ​ #on supprime le premier élément de la liste (terme indépendant)
     return b     return b
-</sxh>+</code>
  
 ===== Multiplication par x ===== ===== Multiplication par x =====
 Proposition de AP, étudiant ba2 2012-2013 : Proposition de AP, étudiant ba2 2012-2013 :
-<sxh python; title : polyx.py>​+<code python polyx.py>​ 
 +#​!/​usr/​bin/​env python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 def polyx(a): def polyx(a):
-    """​polyx est un fonction qui multiplie un polynôme par x.+    """​ 
 +    ​polyx est un fonction qui multiplie un polynôme par x.
     Cela revient à rajouter un 0 à gauche de la liste passée en argument de la fonction (a).     Cela revient à rajouter un 0 à gauche de la liste passée en argument de la fonction (a).
     """​     """​
     b = [0]               #​Nouvelle liste dont le premier terme vaut 0.     b = [0]               #​Nouvelle liste dont le premier terme vaut 0.
-    for coef in range(len(a)): ​          ​#Pour tout les coefficients de la liste a de degré n, on ajoute la liste b.+    for coef in range(len(a)): ​   #Pour tout les coefficients de la liste a de degré n, on ajoute la liste b
         b.append(a[coef])         b.append(a[coef])
     return b     return b
-</sxh>+</code>
 Les listes pouvant être concaténées,​ on peut écrire cela plus simplement encore : Les listes pouvant être concaténées,​ on peut écrire cela plus simplement encore :
-<sxh python; title : polyshift.py>​+<code python polyshift.py>​ 
 +#​!/​usr/​bin/​env python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
 def polyshift (a): def polyshift (a):
-    """​Multiplication du polynôme par la variable x"""​ +    """​ 
-    b = [0]+a   # cela revient à "​shifter"​ la liste des coefficients en insérant un 0 "à gauche"​+    ​Multiplication du polynôme par la variable x 
 +    ​"""​ 
 +    b = [0] + a   # cela revient à "​shifter"​ la liste des coefficients en insérant un 0 "à gauche"​
     return b     return b
-</sxh>+</code>
  
 ===== Intégration ===== ===== Intégration =====
 Sur base de la proposition de RL, étudiant ba2 2012-2013 : Sur base de la proposition de RL, étudiant ba2 2012-2013 :
-<sxh python; title : polyintegr.py>​+<code python polyintegr.py>​ 
 +#​!/​usr/​bin/​env python 
 +# -*- coding: UTF-8 -*-
 def polyintegr(a):​ def polyintegr(a):​
-    """​intégration d'un polynôme+    """​ 
 +    ​intégration d'un polynôme
     """​     """​
     b = [0]  #on indique un coefficient indépendant nul en début de la liste (constante d'​intégration nulle)     b = [0]  #on indique un coefficient indépendant nul en début de la liste (constante d'​intégration nulle)
Ligne 49: Ligne 59:
         b.append(a[i]/​(i+1)) #le coefficient du terme correspondant après intégration est ajouté         b.append(a[i]/​(i+1)) #le coefficient du terme correspondant après intégration est ajouté
     return b     return b
-</sxh>+</code>
  
 ===== Multiplication de deux polynômes ===== ===== Multiplication de deux polynômes =====
 Proposition de BF, étudiant ba2 2012-2013, complétée par des commentaires et une application sur des puissances d'un binôme générant les coefficients du [[http://​fr.wikipedia.org/​wiki/​Triangle_de_Pascal|triangle de Pascal]] : Proposition de BF, étudiant ba2 2012-2013, complétée par des commentaires et une application sur des puissances d'un binôme générant les coefficients du [[http://​fr.wikipedia.org/​wiki/​Triangle_de_Pascal|triangle de Pascal]] :
-<sxh python; title : polymult_BF.py>​ +<code python polymult_BF.py>​ 
-#​!/​usr/​bin/​python+#!/usr/bin/env python
 # -*- coding: UTF-8 -*- # -*- coding: UTF-8 -*-
 def polymult_BF(a,​b):​ def polymult_BF(a,​b):​
Ligne 63: Ligne 73:
     while(len(c)<​p+1):​     while(len(c)<​p+1):​
         c.append(0)         c.append(0)
-    for k in range(p+1): ​ # pour toutes les puissances du polynôme c +    for k in range(p+1): ​           # pour toutes les puissances du polynôme c 
-        for i in range(len(a)): ​ # on considère tous les termes de a+        for i in range(len(a)): ​    ​# on considère tous les termes de a
             for j in range(len(b)):​ # on considère tous les termes de b             for j in range(len(b)):​ # on considère tous les termes de b
-                if k == (i + j):  # si les degrés combinés valent k, on met à jour le coefficient k : +                if k == (i + j):    # si les degrés combinés valent k, on met à jour le coefficient k : 
-                    c[k] = c[k] + (a[i]*b[j])+                    c[k] = c[k] + (a[i] * b[j])
     return c     return c
  
-x = [1,1] +x = [1, 1] 
-prod = [1,1]+prod = [1, 1]
 for i in range(10): for i in range(10):
     prod = polymult_BF(x,​prod)     prod = polymult_BF(x,​prod)
-    print prod +    print(prod) 
-</sxh>+</code>
 OK, cela fonctionne, mais il semble possible d'​économiser des opérations. Multiplier un polynômes de degré n par un autre de degré m devrait pouvoir se faire en n*m étapes. Or, il y a 3 structures de répétitions imbriquées,​ donc n*m*(n+m) étapes ! De plus, on ne tire pas vraiment parti de l'​initialisation du polynôme c, puisque ses coefficients sont créés dans l'​ordre. OK, cela fonctionne, mais il semble possible d'​économiser des opérations. Multiplier un polynômes de degré n par un autre de degré m devrait pouvoir se faire en n*m étapes. Or, il y a 3 structures de répétitions imbriquées,​ donc n*m*(n+m) étapes ! De plus, on ne tire pas vraiment parti de l'​initialisation du polynôme c, puisque ses coefficients sont créés dans l'​ordre.
  
 Voici une modification permettant d'en tirer parti, supprimant le balayage des puissances de c, le test, et quelques autres éléments inutiles : Voici une modification permettant d'en tirer parti, supprimant le balayage des puissances de c, le test, et quelques autres éléments inutiles :
-<sxh python; title : polymult.py>​ +<code python polymult.py>​ 
-#​!/​usr/​bin/​python+#!/usr/bin/env python
 # -*- coding: UTF-8 -*- # -*- coding: UTF-8 -*-
 def polymult(a,​b):​ def polymult(a,​b):​
-    n = len(a)-1 ​ # degré du polynôme a +    n = len(a) - 1           ​# degré du polynôme a 
-    m = len(b)-1 ​ # degré du polynôme b +    m = len(b) - 1           ​# degré du polynôme b 
-    p = n + m  # degré du polynôme c = a * b +    p = n + m                # degré du polynôme c = a * b 
-    c = [] # on va créer tous les coefficients du polynôme c, initialisés à 0 :+    c = []                   ​# on va créer tous les coefficients du polynôme c, initialisés à 0 :
     for k in range(p+1):     for k in range(p+1):
         c.append(0)         c.append(0)
-    for i in range(n+1): ​ # on considère tous les termes de a+    for i in range(n+1): ​    ​# on considère tous les termes de a
         for j in range(m+1): # on considère tous les termes de b         for j in range(m+1): # on considère tous les termes de b
             c[i+j] += a[i] * b[j]  # on incrémente le coefficient de degré k :             c[i+j] += a[i] * b[j]  # on incrémente le coefficient de degré k :
     return c     return c
  
-x = [1,1] +x = [1, 1] 
-prod = [1,1]+prod = [1, 1]
 for i in range(10): for i in range(10):
     prod = polymult(x,​prod)     prod = polymult(x,​prod)
-    print prod +    print(prod) 
-</sxh>+</code>
  
 ===== Génération par récurrence des polynômes de Legendre =====  ===== Génération par récurrence des polynômes de Legendre ===== 
 Proposition de GH, étudiant ba2 2012-2013, complétée par des commentaires. La fonction nécessite d'​autres fonctions vues précédemment,​ qui sont reprises dans le code du programme : Proposition de GH, étudiant ba2 2012-2013, complétée par des commentaires. La fonction nécessite d'​autres fonctions vues précédemment,​ qui sont reprises dans le code du programme :
-<sxh python; title : polylegendre.py>​ +<code python polylegendre.py>​ 
-#​!/​usr/​bin/​python+#!/usr/bin/env python
 # -*- coding: UTF-8 -*- # -*- coding: UTF-8 -*-
 def polylegendre(nmax):​ def polylegendre(nmax):​
-    """​Fonction générant les coefficients des polynômes de Legendre jusqu'​à l'​ordre nmax+    """​ 
 +    ​Fonction générant les coefficients des polynômes de Legendre jusqu'​à l'​ordre nmax
     cf. http://​fr.wikipedia.org/​wiki/​Polyn%C3%B4me_de_Legendre pour la formule de récurrence     cf. http://​fr.wikipedia.org/​wiki/​Polyn%C3%B4me_de_Legendre pour la formule de récurrence
     """​     """​
-    rep = [[1.],​[0.,​1.]] # les deux premiers polynômes (degrés 0 et 1) pour l'​application de la formule de récurrence+    rep = [[1.], [0.,1.]] # les deux premiers polynômes (degrés 0 et 1) pour l'​application de la formule de récurrence
     if nmax < 1: # si nmax est inférieur au degré 1, on renvoie le polynôme de degré 0     if nmax < 1: # si nmax est inférieur au degré 1, on renvoie le polynôme de degré 0
         rep = [[1.]]         rep = [[1.]]
     if nmax > 1:  # pour le degré max supérieur à deux, on calcule les polynômes suivants     if nmax > 1:  # pour le degré max supérieur à deux, on calcule les polynômes suivants
-        for n in range(2,​nmax+1):​ # P_n(x) = (2n-1)/n x P_n-1(x) + (1-n)/n P_n-2(x)+        for n in range(2,​nmax+1): ​    ​# P_n(x) = (2n-1)/n x P_n-1(x) + (1-n)/n P_n-2(x)
             rep.append(polyadd(polyscal((2*n-1.)/​n,​polyshift(rep[n-1])),​polyscal((1.-n)/​n,​rep[n-2])))             rep.append(polyadd(polyscal((2*n-1.)/​n,​polyshift(rep[n-1])),​polyscal((1.-n)/​n,​rep[n-2])))
     return rep     return rep
         ​         ​
 def polyscal(s,​a):​ def polyscal(s,​a):​
-    """​polynôme multiplié par un scalaire s """​+    """​ 
 +    ​polynôme multiplié par un scalaire s """​
     b = []     b = []
     for coef in a:     for coef in a:
Ligne 126: Ligne 138:
  
 def polyshift(a):​ def polyshift(a):​
-    """​Multiplication du polynôme par la variable x"""​ +    """​ 
-    b = [0]+a   # cela revient à "​shifter"​ la liste des coefficients en insérant un 0 "à gauche"​+    ​Multiplication du polynôme par la variable x"""​ 
 +    b = [0] + a   # cela revient à "​shifter"​ la liste des coefficients en insérant un 0 "à gauche"​
     return b     return b
  
 def polyadd(a,​b):​ def polyadd(a,​b):​
-    """​ Addition de deux polynômes de coefficients a et b+    """​ 
 +    ​Addition de deux polynômes de coefficients a et b
     """​     """​
     r = a[:] # on travaille sur une copie de a pour ne pas le modifier     r = a[:] # on travaille sur une copie de a pour ne pas le modifier
Ligne 151: Ligne 165:
 # test de la fonction générant les polynômes de Legendre : # test de la fonction générant les polynômes de Legendre :
 for  k in range(6): # on teste la fonction sur des ordres croissants for  k in range(6): # on teste la fonction sur des ordres croissants
-    print polylegendre(k)[k] ​ # on imprime juste les coefficients du polynôme de plus haut ordre ! +    print(polylegendre(k)[k] # on imprime juste les coefficients du polynôme de plus haut ordre ! 
-</sxh>+</code>
  
 [[polynomes-11|Reste à créer un graphe...]] [[polynomes-11|Reste à créer un graphe...]]
teaching/progappchim/polynomes-10.txt · Dernière modification: 2017/02/24 11:53 par villersd