# [Numpy-discussion] Problem with roots and complex coefficients

Nils Wagner nwagner@iam.uni-stuttgart...
Thu Apr 19 10:44:17 CDT 2007

lorenzo bolla wrote:
> dear all,
> I've some problems with numpy.roots.
> take a look at the following code:
>
> ========================================
> import numpy
>
> OK = numpy.roots([1, 1, 1])
> OK = numpy.roots([1j, 1])
> KO = numpy.roots([1, 1j, 1])
> ========================================
>
> it fails with this error message, trying to execute the last line:
>
> TypeError: can't convert complex to float; use
> abs(z)/usr/lib/python2.4/site-packages/numpy/lib/polynomial.py in
> roots(p)
>     119     if N > 1:
>     120         # build companion matrix and find its eigenvalues (the
> roots)
> --> 121         A = diag(NX.ones((N-2,), p.dtype), -1)
>     122         A[0, :] = -p[1:] / p[0]
>     123         roots = _eigvals(A)
>
> /usr/lib/python2.4/site-packages/numpy/lib/twodim_base.py in diag(v, k)
>      66             i = arange(0,n+k)
>      67             fi = i+(i-k)*n
> ---> 68         res.flat[fi] = v
>      69         return res
>      70     elif len(s)==2:
>
> TypeError: can't convert complex to float; use abs(z)
>
> any ideas?
> thanks,
> Lorenzo
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion@scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion
>
Works fine for me. Maybe you are using an old numpy version.

>>> from numpy import *
>>> roots([1, 1, 1])
array([-0.5+0.8660254j, -0.5-0.8660254j])
>>> roots([1j, 1])
array([-0.+1.j])
>>> roots([1, 1j, 1])
array([  0.00000000e+00-1.61803399j,   1.38777878e-17+0.61803399j])
>>> import numpy
>>> numpy.__version__
'1.0.3.dev3716'

Nils