I have these problems about polynomials and I've spent about 4 hours on this, but I just can't get it. I'm new to Python and programming and I've tried working it out on paper, but I just don't know.
Write and test a Python function negate(p)
that negates the polynomial represented by the list of its coeffeicients p
and returns a new polynomial (represented as a list). In other words, write a function that makes the list of numbers negative.
Write a Python function eval_polynomial(p, x)
that returns the value of P(x)
, where P
is the polynomial represented by the list of its coefficients p
. For example, eval_polynomial([1, 0, 3], 2)
should return 1*2^2 + 0*2 + 3 = 7. Use a single while loop.
Write and test a function multiply_by_one_term(p, a, k)
that multiplies a given polynomial p
, represented by a list of coefficients, by ax^k
and returns the product as a new list.
I would really appreciate it if someone could help me.
I'd recommend using numpy.poly1d
and numpy.polymul
, where the coefficients are a0*x2 + a1*x + a2
.
For example, to represent 3*x**2 + 2*x + 1
:
p1 = numpy.poly1d([3,2,1])
And with the resulting poly1d
object you can operate using *
, /
and so on...:
print(p1*p1)
# 4 3 2
#9 x + 12 x + 10 x + 4 x + 1
If you want to build your own functions, assuming that p contains the coefficients in order: a0 + a1*x + a2*x**2 + ...
:
def eval_polynomial(p,x):
return sum((a*x**i for i,a in enumerate(p)))
def multiply_by_one_term(p, a, k):
return [0]*k + [a*i for i in p]
My evaluate function uses exponentials, which can be avoided with Horner's rule, as posted in another answer, which is available in Numpy's polyval
function