def _minpoly_pow(ex, pw, x, dom, mp=None): """ Returns ``minpoly(ex**pw, x)`` Parameters ========== ex : algebraic element pw : rational number x : indeterminate of the polynomial dom: ground domain mp : minimal polynomial of ``p`` Examples ======== >>> from sympy import sqrt, QQ, Rational >>> from sympy.polys.numberfields import _minpoly_pow, minpoly >>> from sympy.abc import x, y >>> p = sqrt(1 + sqrt(2)) >>> _minpoly_pow(p, 2, x, QQ) x**2 - 2*x - 1 >>> minpoly(p**2, x) x**2 - 2*x - 1 >>> _minpoly_pow(y, Rational(1, 3), x, QQ.frac_field(y)) x**3 - y >>> minpoly(y**Rational(1, 3), x) x**3 - y """ pw = sympify(pw) if not mp: mp = _minpoly_compose(ex, x, dom) if not pw.is_rational: raise NotAlgebraic("%s doesn't seem to be an algebraic element" % ex) if pw < 0: if mp == x: raise ZeroDivisionError('%s is zero' % ex) mp = _invertx(mp, x) if pw == -1: return mp pw = -pw ex = 1/ex y = Dummy(str(x)) mp = mp.subs({x: y}) n, d = pw.as_numer_denom() res = Poly(resultant(mp, x**d - y**n, gens=[y]), x, domain=dom) _, factors = res.factor_list() res = _choose_factor(factors, x, ex**pw, dom) return res.as_expr()
def _minpoly_pow(ex, pw, x, dom, mp=None): """ Returns ``minpoly(ex**pw, x)`` Parameters ========== ex : algebraic element pw : rational number x : indeterminate of the polynomial dom: ground domain mp : minimal polynomial of ``p`` Examples ======== >>> from sympy import sqrt, QQ, Rational >>> from sympy.polys.numberfields import _minpoly_pow, minpoly >>> from sympy.abc import x, y >>> p = sqrt(1 + sqrt(2)) >>> _minpoly_pow(p, 2, x, QQ) x**2 - 2*x - 1 >>> minpoly(p**2, x) x**2 - 2*x - 1 >>> _minpoly_pow(y, Rational(1, 3), x, QQ.frac_field(y)) x**3 - y >>> minpoly(y**Rational(1, 3), x) x**3 - y """ pw = sympify(pw) if not mp: mp = _minpoly_compose(ex, x, dom) if not pw.is_rational: raise NotAlgebraic("%s doesn't seem to be an algebraic element" % ex) if pw < 0: if mp == x: raise ZeroDivisionError('%s is zero' % ex) mp = _invertx(mp, x) if pw == -1: return mp pw = -pw ex = 1 / ex y = Dummy(str(x)) mp = mp.subs({x: y}) n, d = pw.as_numer_denom() res = Poly(resultant(mp, x**d - y**n, gens=[y]), x, domain=dom) _, factors = res.factor_list() res = _choose_factor(factors, x, ex**pw, dom) return res.as_expr()
def _minpoly_pow(ex, pw, x, mp=None): """ Returns ``minpoly(ex**pw, x)`` Parameters ========== p : algebraic number mp : minimal polynomial of ``p`` pw : rational number x : indeterminate of the polynomial Examples ======== >>> from sympy import sqrt >>> from sympy.polys.numberfields import _minpoly_pow, minpoly >>> from sympy.abc import x >>> p = sqrt(1 + sqrt(2)) >>> _minpoly_pow(p, 2, x) x**2 - 2*x - 1 >>> minpoly(p**2, x) x**2 - 2*x - 1 """ pw = sympify(pw) if not mp: mp = _minpoly1(ex, x) if not pw.is_rational: raise NotAlgebraic("%s doesn't seem to be an algebraic number" % ex) if pw < 0: if mp == x: raise ZeroDivisionError('%s is zero' % ex) mp = _invertx(mp, x) if pw == -1: return mp pw = -pw ex = 1 / ex y = Dummy(str(x)) mp = mp.subs({x: y}) n, d = pw.as_numer_denom() res = resultant(mp, x**d - y**n, gens=[y]) _, factors = factor_list(res) res = _choose_factor(factors, x, ex**pw) return res
def _minpoly_pow(ex, pw, x, mp=None): """ Returns ``minpoly(ex**pw, x)`` Parameters ========== p : algebraic number mp : minimal polynomial of ``p`` pw : rational number x : indeterminate of the polynomial Examples ======== >>> from sympy import sqrt >>> from sympy.polys.numberfields import _minpoly_pow, minpoly >>> from sympy.abc import x >>> p = sqrt(1 + sqrt(2)) >>> _minpoly_pow(p, 2, x) x**2 - 2*x - 1 >>> minpoly(p**2, x) x**2 - 2*x - 1 """ pw = sympify(pw) if not mp: mp = _minpoly1(ex, x) if not pw.is_rational: raise NotAlgebraic("%s doesn't seem to be an algebraic number" % ex) if pw < 0: if mp == x: raise ZeroDivisionError('%s is zero' % ex) mp = _invertx(mp, x) if pw == -1: return mp pw = -pw ex = 1/ex y = Dummy(str(x)) mp = mp.subs({x:y}) n, d = pw.as_numer_denom() res = resultant(mp, x**d - y**n, gens=[y]) _, factors = factor_list(res) res = _choose_factor(factors, x, ex**pw) return res