Différences
Ci-dessous, les différences entre deux révisions de la page.
| 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> |
| + | # | ||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
| def polyderiv(a): | def polyderiv(a): | ||
| - | """ | ||
| """ | """ | ||
| - | b = a[:] #copie de la liste des coefficients du polynôme de départ | + | |
| - | n = len(b)-1 | + | """ |
| + | | ||
| + | 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]) | b.pop(b[0]) | ||
| 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> |
| + | # | ||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
| def polyx(a): | def polyx(a): | ||
| - | """ | + | """ |
| + | | ||
| 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] # | b = [0] # | ||
| - | for coef in range(len(a)): | + | for coef in range(len(a)): |
| b.append(a[coef]) | b.append(a[coef]) | ||
| return b | return b | ||
| - | </sxh> | + | </code> |
| Les listes pouvant être concaténées, | Les listes pouvant être concaténées, | ||
| - | <sxh python; title : polyshift.py> | + | <code python polyshift.py> |
| + | # | ||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
| def polyshift (a): | def polyshift (a): | ||
| - | """ | + | """ |
| - | b = [0]+a # cela revient à " | + | |
| + | | ||
| + | b = [0] + a # cela revient à " | ||
| 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> |
| + | # | ||
| + | # -*- coding: UTF-8 -*- | ||
| def polyintegr(a): | def polyintegr(a): | ||
| - | """ | + | """ |
| + | | ||
| """ | """ | ||
| b = [0] #on indique un coefficient indépendant nul en début de la liste (constante d' | b = [0] #on indique un coefficient indépendant nul en début de la liste (constante d' | ||
| Ligne 49: | Ligne 59: | ||
| b.append(a[i]/ | b.append(a[i]/ | ||
| 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:// | 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:// | ||
| - | <sxh python; title : polymult_BF.py> | + | <code python polymult_BF.py> |
| - | # | + | #!/usr/bin/env python |
| # -*- coding: UTF-8 -*- | # -*- coding: UTF-8 -*- | ||
| def polymult_BF(a, | def polymult_BF(a, | ||
| Ligne 63: | Ligne 73: | ||
| while(len(c)< | while(len(c)< | ||
| c.append(0) | c.append(0) | ||
| - | for k in range(p+1): | + | for k in range(p+1): |
| - | for i in range(len(a)): | + | for i in range(len(a)): |
| for j in range(len(b)): | for j in range(len(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 = polymult_BF(x, | ||
| - | print prod | + | print(prod) |
| - | </sxh> | + | </code> |
| OK, cela fonctionne, mais il semble possible d' | OK, cela fonctionne, mais il semble possible d' | ||
| 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/env python |
| # -*- coding: UTF-8 -*- | # -*- coding: UTF-8 -*- | ||
| def polymult(a, | def polymult(a, | ||
| - | n = len(a)-1 | + | n = len(a) - 1 |
| - | m = len(b)-1 | + | m = len(b) - 1 |
| - | 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 = [] |
| for k in range(p+1): | for k in range(p+1): | ||
| c.append(0) | c.append(0) | ||
| - | for i in range(n+1): | + | for i in range(n+1): |
| 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 = polymult(x, | ||
| - | 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' | Proposition de GH, étudiant ba2 2012-2013, complétée par des commentaires. La fonction nécessite d' | ||
| - | <sxh python; title : polylegendre.py> | + | <code python polylegendre.py> |
| - | # | + | #!/usr/bin/env python |
| # -*- coding: UTF-8 -*- | # -*- coding: UTF-8 -*- | ||
| def polylegendre(nmax): | def polylegendre(nmax): | ||
| - | """ | + | """ |
| + | | ||
| cf. http:// | cf. http:// | ||
| """ | """ | ||
| - | rep = [[1.], | + | rep = [[1.], [0.,1.]] # les deux premiers polynômes (degrés 0 et 1) pour l' |
| 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, | + | for n in range(2, |
| rep.append(polyadd(polyscal((2*n-1.)/ | rep.append(polyadd(polyscal((2*n-1.)/ | ||
| return rep | return rep | ||
| | | ||
| def polyscal(s, | def polyscal(s, | ||
| - | """ | + | """ |
| + | | ||
| b = [] | b = [] | ||
| for coef in a: | for coef in a: | ||
| Ligne 126: | Ligne 138: | ||
| def polyshift(a): | def polyshift(a): | ||
| - | """ | + | """ |
| - | b = [0]+a # cela revient à " | + | |
| + | b = [0] + a # cela revient à " | ||
| return b | return b | ||
| def polyadd(a, | def polyadd(a, | ||
| - | """ | + | """ |
| + | | ||
| """ | """ | ||
| 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] | + | 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...]] | ||