It doesn't look like just taking the minimum length works.
Consider the following program:


   - from sympy import Poly
   - from sympy.abc import x
   - from sympy import div, ZZ, QQ, RR
   - p = Poly(x**6 + 19/5*x**5 + 131/50*x**4 - x**2 - 19/5*x - 131/50, x, 
   domain='QQ')
   - print(p.intervals())
   - print(p.intervals(eps=0.5))


like just taking the minimum length works. The first output is: [((-3, -2), 
1), ((-1, -1), 1), ((-1, 0), 1), ((1, 1), 1)]
Here the minimum interval length (>0) is 1. Even using 0.5 as the interval 
length in the next line prints: [((-3, -14/5), 1), ((-1, -1), 1), ((-1, 
-4/5), 1), ((1, 1), 1)]
but this has -1 as the common endpoint between the second and the third 
interval.
It would be great if the intervals have different endpoint. For now, I just 
start a while loop with eps=1 and keep dividing eps by 2, 
until I get different endpoints. Hope this works for now.

Best

On Tuesday, May 21, 2024 at 2:02:20 PM UTC-7 [email protected] wrote:

> I'm not sure if it's enough to just take the minimum length of the
> intervals that overlap and set eps to something smaller than that.
> Someone more familiar with the inner workings of the algorithm would
> have to verify whether that would work or if it could still leave
> intersecting endpoints.
>
> IMO, we should just fix the function to not return intersecting
> endpoints in the first place. The intervals aren't really isolating if
> they intersect.
>
> Aaron Meurer
>
> On Tue, May 21, 2024 at 2:58 PM Ani J <[email protected]> wrote:
> >
> > Yes, this seems like a good option, so keep reducing eps in a while loop 
> until the endpoints of all intervals are different, right?
> >
> > On Tuesday, May 21, 2024 at 1:55:54 PM UTC-7 [email protected] wrote:
> >>
> >> I don't know if there's an existing option to do this. It seems like
> >> it would be useful. You can always lower the eps to make the intervals
> >> smaller:
> >>
> >> >>> Poly(x**6 + 19/5*x**5 + 131/50*x**4 - x**2 - 19/5*x - 131/50, x, 
> domain='QQ').intervals(eps=0.1)
> >> [((-29/10, -26/9), 1), ((-1, -1), 1), ((-10/11, -9/10), 1), ((1, 1), 1)]
> >>
> >> Aaron Meurer
> >>
> >> On Tue, May 21, 2024 at 2:51 PM Ani J <[email protected]> wrote:
> >> >
> >> >
> >> > Oh! I see, but i believe that the intervals overlap on the endpoints, 
> is it possible to make the intervals completely disjoint??
> >> > For example consider the following program:
> >> >
> >> > from sympy import Poly
> >> > from sympy.abc import x
> >> > from sympy import div, QQ
> >> > p = Poly(x**6 + 19/5*x**5 + 131/50*x**4 - x**2 - 19/5*x - 131/50, x, 
> domain='QQ')
> >> > p.intervals()
> >> >
> >> > The intervals that this outputs is: [((-3, -2), 1), ((-1, -1), 1), 
> ((-1, 0), 1), ((1, 1), 1)]
> >> >
> >> > Here we can see that the point -1 is a common endpoint between the 
> second and
> >> >
> >> > the third term. Is it possible to enforce that there be no common 
> point?
> >> >
> >> >
> >> > Best
> >> >
> >> > On Tuesday, May 21, 2024 at 10:27:15 AM UTC-7 [email protected] 
> wrote:
> >> >>
> >> >> Yes, this is the case. The documentation for this method could 
> perhaps
> >> >> be improved, but the key word is "isolating", meaning each interval
> >> >> contains exactly one root. You can also read more about the algorithm
> >> >> that is referenced in the docstring
> >> >> https://en.wikipedia.org/wiki/Vincent%27s_theorem
> >> >>
> >> >> Aaron Meurer
> >> >>
> >> >>
> >> >> On Tue, May 21, 2024 at 9:18 AM Chris Smith <[email protected]> 
> wrote:
> >> >> >
> >> >> > I strongly suspect that the roots returned by `Poly.intervals` 
> have only one root in them (by definition). If you use 
> `refine_root(lo,hi,eps)` to refine the root bounds to arbitrary width and 
> give it an interval in which there is more than one root, it will raise an 
> error.
> >> >> >
> >> >> > /c
> >> >> > On Tuesday, May 21, 2024 at 6:06:14 AM UTC-5 [email protected] 
> wrote:
> >> >> >>
> >> >> >> Is it possible to use SymPy library to get intervals (with 
> rational endpoints) such that there is exactly one root in the interval? I 
> would like to use an implementation of RRI algorithm for my purpose. I 
> believe that the interval function does this. Is this correct? Is it 
> guaranteed that the output intervals are guaranteed to not have any common 
> points?
> >> >> >>
> >> >> >>
> >> >> > --
> >> >> > 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 view this discussion on the web visit 
> https://groups.google.com/d/msgid/sympy/807f8910-040d-475b-91b6-a5002cedeea0n%40googlegroups.com
> .
> >> >
> >> > --
> >> > 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 view this discussion on the web visit 
> https://groups.google.com/d/msgid/sympy/884eb7ff-0762-4771-a81f-930c13dada2dn%40googlegroups.com
> .
> >
> > --
> > 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 view this discussion on the web visit 
> https://groups.google.com/d/msgid/sympy/c987974b-cf39-4c8a-ad0a-579b61778513n%40googlegroups.com
> .
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/a97ce484-8cbf-4b1f-934f-ae7bd908c3adn%40googlegroups.com.

Reply via email to