Exemplo n.º 1
0
def polydiv(c1, c2):
    """
    Divide one polynomial by another.
    Returns the quotient-with-remainder of two polynomials `c1` / `c2`.
    The arguments are sequences of coefficients, from lowest order term
    to highest, e.g., [1,2,3] represents ``1 + 2*x + 3*x**2``.
    Parameters
    ----------
    c1, c2 : array_like
        1-D arrays of polynomial coefficients ordered from low to high.
    Returns
    -------
    [quo, rem] : ndarrays
        Of coefficient series representing the quotient and remainder.
    See Also
    --------
    polyadd, polysub, polymulx, polymul, polypow
    Examples
    --------
    >>> from numpy.polynomial import polynomial as P
    >>> c1 = (1,2,3)
    >>> c2 = (3,2,1)
    >>> P.polydiv(c1,c2)
    (array([3.]), array([-8., -4.]))
    >>> P.polydiv(c2,c1)
    (array([ 0.33333333]), array([ 2.66666667,  1.33333333])) # may vary
    """
    # c1, c2 are trimmed copies
    [c1, c2] = pu.as_series([c1, c2])
    if c2[-1] == 0:
        raise ZeroDivisionError()

    # note: this is more efficient than `pu._div(polymul, c1, c2)`
    lc1 = len(c1)
    lc2 = len(c2)
    if lc1 < lc2:
        return c1[:1] * 0, c1
    elif lc2 == 1:
        return c1 / c2[-1], c1[:1] * 0
    else:
        dlen = lc1 - lc2
        scl = c2[-1]
        c2 = c2[:-1] / scl
        i = dlen
        j = lc1 - 1
        while i >= 0:
            c1[i:j] -= c2 * c1[j]
            i -= 1
            j -= 1
        return c1[j + 1:] / scl, pu.trimseq(c1[:j + 1])
Exemplo n.º 2
0
 def test_trimseq(self):
     for i in range(5):
         tgt = [1]
         res = pu.trimseq([1] + [0] * 5)
         assert_equal(res, tgt)
Exemplo n.º 3
0
def trimseq(seq):
    from numpy.polynomial.polyutils import trimseq
    return trimseq(seq)
 def test_trimseq(self) :
     for i in range(5) :
         tgt = [1]
         res = pu.trimseq([1] + [0]*5)
         assert_equal(res, tgt)
Exemplo n.º 5
0
def trimseq(seq) :
    from numpy.polynomial.polyutils import trimseq
    return trimseq(seq)
Exemplo n.º 6
0
 def __mul__(self, c1, c2):
     # c1, c2 are trimmed copies
     [c1, c2] = pu.as_series([c1, c2])
     ret = np.convolve(c1, c2)
     return pu.trimseq(ret)