Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révisionLes deux révisions suivantes | |||
teaching:progappchim:polynomes-10 [2012/11/21 16:21] – créée villersd | teaching:progappchim:polynomes-10 [2012/11/22 09:45] – villersd | ||
---|---|---|---|
Ligne 32: | Ligne 32: | ||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
def polyshift (a): | def polyshift (a): | ||
- | """ | + | """ |
b=[0]+a | b=[0]+a | ||
return b | return b | ||
Ligne 47: | Ligne 47: | ||
b.append(a[i]/ | b.append(a[i]/ | ||
return b | return b | ||
- | </ | + | </ |
- | [[polynomes-11|Suite...]] | + | ===== 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:// | ||
+ | <sxh python; title : polymult_BF.py> | ||
+ | # | ||
+ | # -*- coding: UTF-8 -*- | ||
+ | def polymult_BF(a, | ||
+ | n=len(a)-1 | ||
+ | m=len(b)-1 | ||
+ | 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 : | ||
+ | while(len(c)< | ||
+ | c.append(0) | ||
+ | for k in range(p+1): | ||
+ | for i in range(len(a)): | ||
+ | for j in range(len(b)): | ||
+ | if(k==i+j): | ||
+ | c[k]=c[k]+(a[i]*b[j]) | ||
+ | return c | ||
+ | |||
+ | x=[1,1] | ||
+ | prod=[1, | ||
+ | for i in range(10): | ||
+ | prod=polymult_BF(x, | ||
+ | print prod | ||
+ | </ | ||
+ | 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 : | ||
+ | <sxh python; title : polymult.py> | ||
+ | # | ||
+ | # -*- coding: UTF-8 -*- | ||
+ | def polymult(a, | ||
+ | n=len(a)-1 | ||
+ | m=len(b)-1 | ||
+ | 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 : | ||
+ | for k in range(p+1): | ||
+ | c.append(0) | ||
+ | for i in range(n+1): | ||
+ | for j in range(m+1): # on considère tous les termes de b | ||
+ | c[i+j]+=a[i]*b[j] | ||
+ | |||
+ | return c | ||
+ | |||
+ | x=[1,1] | ||
+ | prod=[1, | ||
+ | for i in range(10): | ||
+ | prod=polymult(x, | ||
+ | print prod | ||
+ | </ | ||
+ | |||
+ | ===== 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' | ||
+ | <sxh python; title : polylegendre.py> | ||
+ | # | ||
+ | # -*- coding: UTF-8 -*- | ||
+ | def polylegendre(nmax): | ||
+ | """ | ||
+ | cf. http:// | ||
+ | """ | ||
+ | rep=[[1.], | ||
+ | if nmax < 1: # si nmax est inférieur au degré 1, on renvoie le polynôme de degré 0 | ||
+ | rep=[[1.]] | ||
+ | if nmax > 1: # pour le degré max supérieur à deux, on calcule les polynômes suivants | ||
+ | for n in range(2, | ||
+ | rep.append(polyadd(polyscal((2*n-1.)/ | ||
+ | return rep | ||
+ | |||
+ | def polyscal(s, | ||
+ | """ | ||
+ | b=[] | ||
+ | for coef in a: | ||
+ | b.append(coef*s) | ||
+ | return b # on retourne les coefficients multipliés par s | ||
+ | |||
+ | def polyshift(a): | ||
+ | """ | ||
+ | b=[0]+a | ||
+ | return b | ||
+ | |||
+ | def polyadd(a, | ||
+ | """ | ||
+ | """ | ||
+ | r=a[:] # on travaille sur une copie de a pour ne pas le modifier | ||
+ | t=b[:] # idem pour b | ||
+ | g=[] # polynôme somme | ||
+ | n1=len(r) # ordre du premier polynôme | ||
+ | n2=len(t) # ordre du second polynôme | ||
+ | if n1>n2: # premier polynôme de plus haut degré que le second | ||
+ | for i in range (n1-n2): | ||
+ | t.append(0) | ||
+ | elif n1<n2: # second polynôme de plus haut degré que le premier | ||
+ | for i in range (n2-n1): | ||
+ | | ||
+ | # r et t ont à présent la même longueur | ||
+ | for i in range (len(r)): | ||
+ | g.append(r[i]+t[i]) | ||
+ | return g # on retourne les coefficients additionnés dans la liste g | ||
+ | |||
+ | # 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 | ||
+ | print polylegendre(k)[k] | ||
+ | </ | ||
+ | |||
+ | [[polynomes-11|Reste à créer un graphe...]] |