PolynomialError in solving inequality with sqrt

44 views
Skip to first unread message

Dario Beraldi

unread,
Oct 5, 2014, 8:05:04 AM10/5/14
to sy...@googlegroups.com
Hello,

Apologies if I'm missing something trivial here...

I have the function y= sqrt(4*x**2 - 9) for which I want to know the real domain of definition. I.e. the answer should be: y is defined for x <= -3/2 and x >= 3/2.

If I try solve(y >= 0) I get a PolynomialError. I could do solve(y**2 >= 0)  to get the "right" answer but it feels like a hack and I'm wondering whether there is a better strategy to solve this inequality. Any idea?

I.m using sympy 0.7.5 and this below is the bit of code to reproduce my question above.

Many thanks!
Dario

isympy

x= symbols('x')
y= sqrt(4*x**2 - 9)

## That's Ok:
solve(y**2 >= 0) ## im(x) = 0 ∧ (re(x) ≥ 3/2 ∨ re(x) ≤ -3/2)

## Or even better:
x= symbols('x', real= True)
y= sqrt(4*x**2 - 9)
solve(y**2 >= 0) ## x ≥ 3/2 ∨ x ≤ -3/2

## This doesn't work:
x= symbols('x')
y= sqrt(4*x**2 - 9)
solve(y >= 0)
---------------------------------------------------------------------------
PolynomialError                           Traceback (most recent call last)
<ipython-input-14-8865cc4d86ab> in <module>()
----> 1 solve(y >= 0)

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sympy/solvers/solvers.pyc in solve(f, *symbols, **flags)
    686         elif isinstance(fi, (bool, C.BooleanAtom)) or fi.is_Relational:
    687             return reduce_inequalities(f, assume=flags.get('assume'),
--> 688                                        symbols=symbols)
    689
    690         # Any embedded piecewise functions need to be brought out to the

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sympy/solvers/inequalities.pyc in reduce_inequalities(inequalities, assume, symbols)
    514
    515     for gen, exprs in poly_part.items():
--> 516         poly_reduced.append(reduce_rational_inequalities([exprs], gen, assume))
    517
    518     for gen, exprs in abs_part.items():

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sympy/solvers/inequalities.pyc in reduce_rational_inequalities(exprs, gen, assume, relational)
    219                     expr.together().as_numer_denom(), gen)
    220             except PolynomialError:
--> 221                 raise PolynomialError("only polynomials and "
    222                     "rational functions are supported in this context")
    223

PolynomialError: only polynomials and rational functions are supported in this context


Ondřej Čertík

unread,
Oct 6, 2014, 9:49:28 AM10/6/14
to sympy
Hi Dario,
I think you found a bug. Thanks for reporting this. I made this:

https://github.com/sympy/sympy/issues/8206

(Feel free to report similar bugs directly to the bug trucker if you want.)

Ondrej

Dario Beraldi

unread,
Oct 6, 2014, 10:14:54 AM10/6/14
to sy...@googlegroups.com
Hi Ondrej,

Ok, thanks for letting me know. For the time being, would you agree that removing the root by exponentiation, as in solve(y**2 >= 0, is an acceptable workaround?

(I have started playing with sympy and I really like it, I might post more questions in the near future!)

Dario

Ondřej Čertík

unread,
Oct 6, 2014, 4:43:42 PM10/6/14
to sympy
Hi Dario,

On Mon, Oct 6, 2014 at 8:14 AM, Dario Beraldi <dario....@gmail.com> wrote:
> Hi Ondrej,
>
> Ok, thanks for letting me know. For the time being, would you agree that
> removing the root by exponentiation, as in solve(y**2 >= 0, is an acceptable
> workaround?

Looks like it, yes. See also the comments at the issue I posted.

>
> (I have started playing with sympy and I really like it, I might post more
> questions in the near future!)

Absolutely, please do!

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 sympy+un...@googlegroups.com.
> To post to this group, send email to sy...@googlegroups.com.
> Visit this group at http://groups.google.com/group/sympy.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sympy/d430b751-95f4-4014-a210-2a464caa1237%40googlegroups.com.
>
> For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages