# Tackling Polynomial Equations with Python (Numpy)

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
```

``` 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 .