Exemplo n.º 1
0
def root_factors(f, *gens, **args):
    """
    Returns all factors of a univariate polynomial.

    **Examples**

    >>> from sympy.abc import x, y
    >>> from sympy.polys.polyroots import root_factors

    >>> root_factors(x**2-y, x)
    [x - y**(1/2), x + y**(1/2)]

    """
    args = dict(args)
    filter = args.pop('filter', None)

    F = Poly(f, *gens, **args)

    if not F.is_Poly:
        return [f]

    if F.is_multivariate:
        raise ValueError('multivariate polynomials not supported')

    x = F.gens[0]

    zeros = roots(F, filter=filter)

    if not zeros:
        factors = [F]
    else:
        factors, N = [], 0

        for r, n in zeros.iteritems():
            factors, N = factors + [Poly(x-r, x)]*n, N + n

        if N < F.degree():
            G = reduce(lambda p,q: p*q, factors)
            factors.append(F.exquo(G))

    if not isinstance(f, Poly):
        return [ f.as_expr() for f in factors ]
    else:
        return factors
Exemplo n.º 2
0
def root_factors(f, *gens, **args):
    """
    Returns all factors of a univariate polynomial.

    **Examples**

    >>> from sympy.abc import x, y
    >>> from sympy.polys.polyroots import root_factors

    >>> root_factors(x**2-y, x)
    [x - y**(1/2), x + y**(1/2)]

    """
    args = dict(args)
    filter = args.pop('filter', None)

    F = Poly(f, *gens, **args)

    if not F.is_Poly:
        return [f]

    if F.is_multivariate:
        raise ValueError('multivariate polynomials not supported')

    x = F.gens[0]

    zeros = roots(F, filter=filter)

    if not zeros:
        factors = [F]
    else:
        factors, N = [], 0

        for r, n in zeros.iteritems():
            factors, N = factors + [Poly(x - r, x)] * n, N + n

        if N < F.degree():
            G = reduce(lambda p, q: p * q, factors)
            factors.append(F.exquo(G))

    if not isinstance(f, Poly):
        return [f.as_expr() for f in factors]
    else:
        return factors