#!/usr/bin/env python # -*- coding: UTF-8 -*- """ écriture d'un programme pour évaluer des polynomes + fonction de multiplication d'un polynôme pas un scalaire + fonction d'addition de deux polynômes """ from math import * def polyeval(x,a): """ application de l'agorithme de Horner cf. http://fr.wikipedia.org/wiki/M%C3%A9thode_de_Ruffini-Horner """ n = len(a) - 1 # n = ordre du polynôme p =0. for i in range(n,-1,-1): p = p*x +a[i] return p def polyscal(s,a): """ polynôme multiplié par un scalaire s """ b = [] for coef in a: b.append(coef*s) return b # on retourne les coefficients multipliés par s def polyadd(a,b): """ Addition de deux polynômes de coefficients a et b """ 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.append(0) # 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 # différents tests : x = 2. a = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] print(polyeval(x,a)) coefm = 2.75 print(polyscal(coefm,a)) varx = 0.5 varcoef = [1., 2., 3., 4., 5., 6., 7., 8., 9., 10.] print(polyeval(varx,varcoef)) for j in range(0,11,1): rep = sin(polyeval(float(j) * 0.1,varcoef)) print(rep) u = [1, 2, 4, 8, 16] v = [1, 3, 9, 27, 81, 243, 729] print(u,v,polyadd(u,v))