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.
