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

Reply via email to