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/15 15:49] – 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> | + | </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 !]] | ||