You might try
def distinct_intervals(p): P=Poly(p) iv = P.intervals() print(iv) for i in
range(len(iv)-1): (lo,hi),n=iv[i] (LO,HI),N=iv[i+1] while hi==LO: if
lo!=hi: (lo,hi),n=iv[i]=P.refine_root(lo,hi,(hi-lo)/2),n else: assert
LO!=HI (LO,HI),N=iv[i+1]=P.refine_root(LO,HI,(HI-LO)/2),N return i
On Wed, 22 May 2024 at 01:10, Ani J wrote:
>
> Thank you for the quick response.
>
> Yes, it looks like refine_root() does the job more efficiently. Thank you for
> the note.
>
> I am facing issues in getting _find_poly_sign_univariate function to work.
> When I run from sympy import find_poly_si
Thank you for the quick response.
Yes, it looks like refine_root() does the job more efficiently. Thank you
for the note.
I am facing issues in getting _find_poly_sign_univariate function to work.
When I run from sympy import find_poly_sign, I get the following error:
ImportError: cannot imp
On Wed, 22 May 2024 at 00:23, Ani J wrote:
>
> The polynomial 4x^2 - 9 has rational roots, whereas the output of the print
> statement is: [((-2, -1), 1), ((1, 2), 1)]
> All intervals here are of length more than 0.
> It would be great if in general it is possible that the endpoints of
> differe
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 hav
On Tuesday, May 21, 2024 at 3:49:12 PM UTC-7 Oscar wrote:
On Tue, 21 May 2024 at 22:02, Aaron Meurer wrote:
>
> 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.
For rational roots the
On Tue, 21 May 2024 at 22:02, Aaron Meurer wrote:
>
> 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.
For rational roots the intervals are of length 0. For irrational roots
the root lies in
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.interv
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,
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. Y
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
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 + 1
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
Aar
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 2
14 matches
Mail list logo