How to calculate a polynomial of (s+1)(s+2)…(s+10) in a short time?

Instead of calculate them one by one, we can do it with the help of Python library – Numpy.

1. Make sure you have installed Numpy for your Python interpreter. In Ubuntu, you may just want to install *python-scipy* as it contains all the scientific calculation tools.

2. Try the following example in your python interpreter:

from numpy import *
p1 = poly1d(1, 1 ) #(S+1)
p2 = poly1d(1, 2 ) #(S+2)
p3 = poly1d(1, 3 ) #(S+3)
p4 = poly1d(1, 4 ) #(S+4)
p5 = poly1d(1, 5 ) #(S+5)
p6 = poly1d(1, 6 ) #(S+6)
p7 = poly1d(1, 7 ) #(S+7)
p8 = poly1d(1, 8 ) #(S+8)
p9 = poly1d(1, 9 ) #(S+9)
p10 = poly1d(1, 10) #(S+10)
print p1*p2*p3*p4*p5*p6*p7*p8*p9*p10

3. Then, you will an get an output like:

10 9 8 7 6 5 4 3 2
1 x - 10 x + 45 x - 120 x + 210 x - 252 x + 210 x - 120 x + 45 x - 10 x + 1

That is the answer:

x^10 - 10x^9 +45x^8 - 120x^7 + 210x^6
- 252x^5 + 210x^4 - 120x^3 + 45x^2 - 10x + 1

4. Say, we need to find the root of this polynomial. With the help of Python, we can get the roots by feeding these line into the interpreter.

(p1*p2*p3*p4*p5*p6*p7*p8*p9*p10).r #.r means root.

And, we will get an output like this:

array([ 1.04405137+0.0143565j , 1.04405137-0.0143565j ,
1.02709855+0.03755416j, 1.02709855-0.03755416j,
0.99974141+0.04619473j, 0.99974141-0.04619473j,
0.97275208+0.03706564j, 0.97275208-0.03706564j,
0.95635659+0.01406697j, 0.95635659-0.01406697j])

The polynomial has 5 complex conjugates: *1.04405137 +/- 0.0143565j, 1.02709855 +/- 0.03755416j, 0.99974141+/- 0.04619473j, 0.97275208 +/-0.03706564j, 0.97275208 +/- 0.03706564j and 0.95635659 +/- 0.01406697j *.