Ah, I was afraid of that. Looking at the code, I'm not sure if the
algorithm provides a better way than continually refining with smaller
epsilon until you get a separation, but I don't know the details of
the algorithm so that could be wrong. I will note that you can use
refine_root() once you have your intervals to just refine a single
interval, which would at least be a little more efficient.

Aaron Meurer

On Tue, May 21, 2024 at 4:30 PM Ani J <anij...@gmail.com> wrote:
>
> 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 asme...@gmail.com 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 <ani...@gmail.com> 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 asme...@gmail.com 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 <ani...@gmail.com> 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 asme...@gmail.com 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 <smi...@gmail.com> 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 ani...@gmail.com 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 sympy+un...@googlegroups.com.
>> >> >> > 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 sympy+un...@googlegroups.com.
>> >> > 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 sympy+un...@googlegroups.com.
>> > 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 sympy+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sympy/a97ce484-8cbf-4b1f-934f-ae7bd908c3adn%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 sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAKgW%3D6%2BYDyOO%2BJjXpqdpuCPmeOp89ttBSd-xZNFCSU4fUgn7bQ%40mail.gmail.com.

Reply via email to