Hello! Here is my representation of polynomials in Python as dictionaries. zero = {} one = {0:1} two = {0:2} x = {1:1} x2 = {2:1} # x^2 poly = {2:3, 1:4, 0:5} # 3*x^2 + 4*x + 5
# Some functions... def add_poly(poly1, poly2): # w1(x)+w2(x) tmp = dict(poly1) for k in poly2: tmp[k] = tmp.get(k,0) + poly2[k] if tmp[k] == 0: del tmp[k] return tmp def times_poly(number, poly): # n*w(x) if number == 0: return {} tmp = {} for k in poly: tmp[k] = number*poly[k] return tmp def mul_poly(poly1, poly2): # w1(x)*w2(x) tmp = {} for i in poly1: for j in poly2: tmp[i+j] = tmp.get(i+j,0) + poly1[i]*poly2[j] return tmp def diff_poly(poly): # [c*x^n]' = c*n*x^(n-1) tmp = {} for i in poly: tmp[i-1] = i*poly[i] if -1 in tmp: del tmp[-1] return tmp def eval_poly(poly, x): # w(x), Horner i = max(i for i in poly) p = poly[i] while i > 0: i = i-1 p = p * x + poly.get(i,0) return p def combine_poly(poly1, poly2): # w1(w2(x)), Horner i = max(k for k in poly1) tmp = {0:poly1[i]} while i > 0: i = i-1 tmp = add_poly(mul_poly(tmp, poly2), {0:poly1.get(i,0)}) return tmp def pow_poly(poly, n): # return combine_poly({n:1}, poly) tmp = {0:1} while n > 0: tmp = mul_poly(tmp, poly) n = n-1 return tmp Regards, Andrzej Kapanowski
_______________________________________________ Edu-sig mailing list Edu-sig@python.org http://mail.python.org/mailman/listinfo/edu-sig