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 Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
teaching:progappchim:polynomes-7 [2012/11/22 11:07] – villersd | teaching:progappchim:polynomes-7 [2019/02/22 11:26] – villersd | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Polynômes : comment les multiplier par un scalaire et les additionner ====== | ====== Polynômes : comment les multiplier par un scalaire et les additionner ====== | ||
- | <sxh python; title : poly07-scal-add.py> | + | <code python poly07-scal-add.py> |
- | # | + | #!/usr/bin/env python |
# -*- coding: UTF-8 -*- | # -*- coding: UTF-8 -*- | ||
- | """ | + | """ |
+ | écriture d'un programme pour évaluer | ||
des polynomes | des polynomes | ||
+ fonction de multiplication d'un polynôme pas un scalaire | + fonction de multiplication d'un polynôme pas un scalaire | ||
Ligne 11: | Ligne 12: | ||
def polyeval(x, | def polyeval(x, | ||
- | """ | + | """ |
+ | | ||
cf. http:// | cf. http:// | ||
""" | """ | ||
- | n=len(a)-1 # n = ordre du polynôme | + | n = len(a) - 1 # n = ordre du polynôme |
- | p=0. | + | p =0. |
for i in range(n, | for i in range(n, | ||
- | p=p*x+a[i] | + | p = p*x +a[i] |
return p | return p | ||
def polyscal(s, | def polyscal(s, | ||
- | """ | + | """ |
- | b=[] | + | |
+ | | ||
+ | b = [] | ||
for coef in a: | for coef in a: | ||
b.append(coef*s) | b.append(coef*s) | ||
Ligne 28: | Ligne 32: | ||
def polyadd(a, | def polyadd(a, | ||
- | """ | ||
""" | """ | ||
- | r=a[:] # on travaille sur une copie de a pour ne pas le modifier | + | |
- | t=b[:] # idem pour b | + | """ |
- | g=[] | + | |
- | n1=len(r) # ordre du premier polynôme | + | t = b[:] # idem pour b |
- | n2=len(t) # ordre du second polynôme | + | g = [] # polynôme somme |
- | if n1>n2: # premier polynôme de plus haut degré que le second | + | n1 = len(r) |
- | for i in range (n1-n2): | + | n2 = len(t) |
+ | if n1 > n2: | ||
+ | for i in range(n1-n2): | ||
t.append(0) | t.append(0) | ||
- | elif n1<n2: # second polynôme de plus haut degré que le premier | + | elif n1 < n2: # second polynôme de plus haut degré que le premier |
- | for i in range (n2-n1): | + | for i in range(n2-n1): |
| | ||
# r et t ont à présent la même longueur | # r et t ont à présent la même longueur | ||
- | for i in range (len(r)): | + | for i in range(len(r)): |
- | g.append(r[i]+t[i]) | + | g.append(r[i] + t[i]) |
return g # on retourne les coefficients additionnés dans la liste g | return g # on retourne les coefficients additionnés dans la liste g | ||
# différents tests : | # différents tests : | ||
- | x=2. | + | x = 2. |
- | a=[1, | + | a = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] |
- | print polyeval(x, | + | print(polyeval(x, |
- | varx=0.5 | + | coefm = 2.75 |
- | varcoef=[1., | + | print(polyscal(coefm, |
- | print polyeval(varx, | + | |
+ | varx = 0.5 | ||
+ | varcoef = [1., 2., 3., 4., 5., 6., 7., 8., 9., 10.] | ||
+ | print(polyeval(varx, | ||
for j in range(0, | for j in range(0, | ||
- | rep=sin(polyeval(float(j)*0.1, | + | rep = sin(polyeval(float(j) * 0.1, |
- | print rep | + | print(rep) |
- | u=[1, | + | u = [1, 2, 4, 8, 16] |
- | v=[1, | + | v = [1, 3, 9, 27, 81, 243, 729] |
- | print u, | + | print(u, |
- | </sxh> | + | </code> |
Dans le fonction polyadd ci-dessus, l' | Dans le fonction polyadd ci-dessus, l' | ||
| | ||
+ | |||
+ | Si on utilise les astuces de programmation les plus " | ||
+ | |||
+ | <code python> | ||
+ | def polyadd2(a, | ||
+ | """ | ||
+ | utilisation de la librairie itertools avec itertools.zip_longest | ||
+ | ref : https:// | ||
+ | """ | ||
+ | return [u + v for u, v in itertools.zip_longest(a, | ||
+ | </ | ||
Il est temps de créer des graphes de fonctions polynomiales. Comment faire ? Quelles librairies utiliser ? | Il est temps de créer des graphes de fonctions polynomiales. Comment faire ? Quelles librairies utiliser ? | ||
Ligne 71: | Ligne 90: | ||
Voici un programme simple pour une fonction particulière (une sinusoïde amortie) : | Voici un programme simple pour une fonction particulière (une sinusoïde amortie) : | ||
- | <sxh python; title : simple-plot-sinus-amorti.py> | + | <code python simple-plot-sinus-amorti.py> |
- | # | + | #!/usr/bin/env python |
- | # -*- coding: | + | # -*- coding: |
- | # sinusoïde amortie | + | """ |
+ | graphe d' | ||
+ | """ | ||
from pylab import * | from pylab import * | ||
def sin_amort(t): | def sin_amort(t): | ||
- | s1 = sin(pi*t) | + | s1 = sin(pi * t) |
- | e1 = exp(-t/ | + | e1 = exp(- t /8.) |
- | return s1*e1 | + | return s1 * e1 |
xvals = arange(0., 40., 0.1) | xvals = arange(0., 40., 0.1) | ||
Ligne 89: | Ligne 110: | ||
plot(xvals, sin_amort(xvals), | plot(xvals, sin_amort(xvals), | ||
show() | show() | ||
- | </sxh> | + | </code> |
Il faut donc faire un programme similaire en introduisant la fonction nécessaire et en adaptant les appels. | Il faut donc faire un programme similaire en introduisant la fonction nécessaire et en adaptant les appels. | ||
[[polynomes-8|Réponse à la page suivante !]] | [[polynomes-8|Réponse à la page suivante !]] |