Exemplo n.º 1
0
 def refine_root(f, s, t, eps=None, steps=None, fast=False):
     """Refine an isolating interval to the given precision. """
     if not f.lev:
         return dup_refine_real_root(f.rep, s, t, f.dom, eps=eps, steps=steps, fast=fast)
     else:
         raise PolynomialError(
             "can't refine a root of a multivariate polynomial")
Exemplo n.º 2
0
 def refine_root(f, s, t, eps=None, steps=None, fast=False):
     """Refine an isolating interval to the given precision. """
     if not f.lev:
         return dup_refine_real_root(f.rep,
                                     s,
                                     t,
                                     f.dom,
                                     eps=eps,
                                     steps=steps,
                                     fast=fast)
     else:
         raise PolynomialError(
             "can't refine a root of a multivariate polynomial")
def test_dup_refine_real_root():
    f = [1, 0, -2]

    assert dup_refine_real_root(f, QQ(1), QQ(1), ZZ, steps=1) == (QQ(1), QQ(1))
    assert dup_refine_real_root(f, QQ(1), QQ(1), ZZ, steps=9) == (QQ(1), QQ(1))

    raises(ValueError, "dup_refine_real_root(f, QQ(-2), QQ(2), ZZ)")

    s, t = QQ(1, 1), QQ(2, 1)

    assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(2, 1))
    assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(1, 1), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(4, 3), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(10, 7))

    s, t = QQ(1, 1), QQ(3, 2)

    assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(4, 3), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(7, 5), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(10, 7))
    assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(17, 12))

    s, t = QQ(1, 1), QQ(5, 3)

    assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(5, 3))
    assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(1, 1), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(7, 5), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(13, 9))
    assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(10, 7))

    s, t = QQ(-1, 1), QQ(-2, 1)

    assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (-QQ(2, 1), -QQ(1, 1))
    assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (-QQ(3, 2), -QQ(1, 1))
    assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (-QQ(3, 2), -QQ(4, 3))
    assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (-QQ(3, 2), -QQ(7, 5))
    assert dup_refine_real_root(f, s, t, ZZ,
                                steps=4) == (-QQ(10, 7), -QQ(7, 5))

    raises(RefinementFailed, "dup_refine_real_root(f, QQ(0), QQ(1), ZZ)")

    s, t, u, v, w = QQ(1), QQ(2), QQ(24, 17), QQ(17, 12), QQ(7, 5)

    assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1, 100)) == (u, v)
    assert dup_refine_real_root(f, s, t, ZZ, steps=6) == (u, v)

    assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1, 100), steps=5) == (w, v)
    assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1, 100), steps=6) == (u, v)
    assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1, 100), steps=7) == (u, v)

    s, t, u, v = QQ(-2), QQ(-1), QQ(-3, 2), QQ(-4, 3)

    assert dup_refine_real_root([1, 0, -2], s, t, ZZ,
                                disjoint=QQ(-5)) == (s, t)
    assert dup_refine_real_root([1, 0, -2], s, t, ZZ, disjoint=-v) == (s, t)
    assert dup_refine_real_root([1, 0, -2], s, t, ZZ, disjoint=v) == (u, v)

    s, t, u, v = QQ(1), QQ(2), QQ(4, 3), QQ(3, 2)

    assert dup_refine_real_root([1, 0, -2], s, t, ZZ, disjoint=QQ(5)) == (s, t)
    assert dup_refine_real_root([1, 0, -2], s, t, ZZ, disjoint=-u) == (s, t)
    assert dup_refine_real_root([1, 0, -2], s, t, ZZ, disjoint=u) == (u, v)
Exemplo n.º 4
0
def test_dup_refine_real_root():
    f = [1,0,-2]

    assert dup_refine_real_root(f, QQ(1), QQ(1), ZZ, steps=1) == (QQ(1), QQ(1))
    assert dup_refine_real_root(f, QQ(1), QQ(1), ZZ, steps=9) == (QQ(1), QQ(1))

    raises(ValueError, "dup_refine_real_root(f, QQ(-2), QQ(2), ZZ)")

    s, t = QQ(1,1), QQ(2,1)

    assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(2, 1))
    assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(1, 1), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(4, 3), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(10, 7))

    s, t = QQ(1,1), QQ(3,2)

    assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(4, 3), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(7, 5), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(10, 7))
    assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(17, 12))

    s, t = QQ(1,1), QQ(5,3)

    assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (QQ(1, 1), QQ(5, 3))
    assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (QQ(1, 1), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (QQ(7, 5), QQ(3, 2))
    assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (QQ(7, 5), QQ(13, 9))
    assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (QQ(7, 5), QQ(10, 7))

    s, t = QQ(-1,1), QQ(-2,1)

    assert dup_refine_real_root(f, s, t, ZZ, steps=0) == (-QQ(2, 1), -QQ(1, 1))
    assert dup_refine_real_root(f, s, t, ZZ, steps=1) == (-QQ(3, 2), -QQ(1, 1))
    assert dup_refine_real_root(f, s, t, ZZ, steps=2) == (-QQ(3, 2), -QQ(4, 3))
    assert dup_refine_real_root(f, s, t, ZZ, steps=3) == (-QQ(3, 2), -QQ(7, 5))
    assert dup_refine_real_root(f, s, t, ZZ, steps=4) == (-QQ(10, 7), -QQ(7, 5))

    raises(RefinementFailed, "dup_refine_real_root(f, QQ(0), QQ(1), ZZ)")

    s, t, u, v, w = QQ(1), QQ(2), QQ(24,17), QQ(17,12), QQ(7,5)

    assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1,100)) == (u, v)
    assert dup_refine_real_root(f, s, t, ZZ, steps=6) == (u, v)

    assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1,100), steps=5) == (w, v)
    assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1,100), steps=6) == (u, v)
    assert dup_refine_real_root(f, s, t, ZZ, eps=QQ(1,100), steps=7) == (u, v)

    s, t, u, v = QQ(-2), QQ(-1), QQ(-3,2), QQ(-4,3)

    assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=QQ(-5)) == (s, t)
    assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=-v) == (s, t)
    assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=v) == (u, v)

    s, t, u, v = QQ(1), QQ(2), QQ(4,3), QQ(3,2)

    assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=QQ(5)) == (s, t)
    assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=-u) == (s, t)
    assert dup_refine_real_root([1,0,-2], s, t, ZZ, disjoint=u) == (u, v)