Hi Alexandre,

On Sun, Sep 1, 2013 at 5:05 PM, Alexandre Eudes
<[email protected]> wrote:
> Hello Everyone,
> I have noted some stranges behaviours of solve for polynomial in my use of
> sympy.
>
> In case of 4th degree polynomial with 2 two conjugates solutions, solve
> return only two of the four solutions.
> The problem seems to appear only with real coefficients, integer polynomial
> solutions are fine.

Is there a reason you need floating point coefficients? In my opinion,
one should use floating point only as a last resort.

> On the other side, sympy roots always gives the good answer.
>
> Example :
>>>> import sympy as sy
>>>> s = sy.S("s")
>>>> expr =  4.0*s**4 + 3.0*s**3 + 3.0*s**2 - 4.0*s + 4.0
>>>> rt= sy.roots(expr)
>>>> sl= sy.solve(expr)
>>>> print sl,"\n",rt
> [0.490766420298022 - 0.526081774461482*I, 0.490766420298022 +
> 0.526081774461482*I]
> {-0.865766420298022 - 1.08737810369128*I: 1, 0.490766420298022 -
> 0.526081774461482*I: 1, -0.865766420298022 + 1.08737810369128*I: 1,
> 0.490766420298022 + 0.526081774461482*I: 1}
>
> Similarly, solving for 5th degree polynomial return strange error :
>
>>>> sy.solve(s**5+s**4-1.0)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "sympy/sympy/solvers/solvers.py", line 958, in solve
>     solution = nfloat(solution, exponent=False)
>   File "sympy/sympy/core/function.py", line 2219, in nfloat
>     return type(expr)([nfloat(a, n, exponent) for a in expr])
>   File "sympy/sympy/core/function.py", line 2235, in nfloat
>     rv = rv.xreplace(dict(reps))
>   File "sympy/sympy/core/basic.py", line 1106, in xreplace
>     return self.func(*args)
>   File "sympy/sympy/polys/rootoftools.py", line 62, in __new__
>     raise PolynomialError("only univariate polynomials are allowed")
> sympy.polys.polyerrors.PolynomialError: only univariate polynomials are
> allowed
>
> Should I had an issue in the tracker or this problems are already known ?

Note that this works:

In [1]: solve(x**5+x**4-1)
Out[1]:
⎡      ⎛ 5    4       ⎞        ⎛ 5    4       ⎞        ⎛ 5    4       ⎞
⎣RootOf⎝x  + x  - 1, 0⎠, RootOf⎝x  + x  - 1, 1⎠, RootOf⎝x  + x  - 1, 2⎠, RootO

 ⎛ 5    4       ⎞        ⎛ 5    4       ⎞⎤
f⎝x  + x  - 1, 3⎠, RootOf⎝x  + x  - 1, 4⎠⎦

but this doesn't:

In [2]: solve(x**5+x**4-1.0)

yes, I think you should report it. I am attaching a pdf of what
Mathematica does in this case ---
the integer case work the same as in sympy, but the floating point
case returns numerical solution,
while SymPy fails.

Ondrej

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
For more options, visit https://groups.google.com/groups/opt_out.

Attachment: solve.pdf
Description: Adobe PDF document

Reply via email to