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édente | ||
teaching:progappchim:polynomes-7 [2012/11/09 11:25] – villersd | teaching:progappchim:polynomes-7 [2019/02/25 11:06] (Version actuelle) – 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' | + | + fonction de multiplication d' |
- | + fonction d' | + | + fonction d' |
""" | """ | ||
from math import * | from math import * | ||
def polyeval(x, | def polyeval(x, | ||
- | """ | + | """ |
+ | | ||
cf. http:// | cf. http:// | ||
""" | """ | ||
- | n=len(a)-1 # n = ordre du polynome | + | n = len(a) - 1 # n = ordre du polynôme |
- | p=a[n] | + | p =0. |
- | for i in range(n-1,-1,-1): | + | for i in range(n, |
- | p=p*x+a[i] | + | p = p*x +a[i] |
return p | return p | ||
- | def polyscal(a,s): | + | def polyscal(s,a): |
- | """ | + | """ |
- | b=[] | + | polynôme |
+ | | ||
+ | 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 | + | t = b[:] # idem pour b |
- | n2=len(t) # ordre du second | + | g = [] # polynôme |
- | if n1>n2: # premier | + | 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 | + | elif n1 < n2: # second |
- | 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> | + | </ |
+ | |||
+ | 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, | ||
+ | </code> | ||
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 68: | 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 86: | 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 !]] |