def findPolynomial( n, k ): poly = findpoly( n, int( k ) ) if poly is None: poly = findpoly( n, int( k ), tol = 1e-10 ) if poly is None: poly = findpoly( n, int( k ), tol = 1e-7 ) if poly is None: return [ 0 ] else: return poly
def findPolynomial( n, k ): '''Calls the mpmath findpoly function to try to identify a polynomial of degree <= k for which n is a zero.''' poly = findpoly( n, int( k ) ) if poly is None: poly = findpoly( n, int( k ), tol = 1e-10 ) if poly is None: poly = findpoly( n, int( k ), tol = 1e-7 ) if poly is None: return [ 0 ] else: return poly
def nsimplify_real(x): orig = mpmath.mp.dps xv = x._to_mpmath(bprec) try: # We'll be happy with low precision if a simple fraction if not (tolerance or full): mpmath.mp.dps = 15 rat = mpmath.findpoly(xv, 1) if rat is not None: return Rational(-int(rat[1]), int(rat[0])) mpmath.mp.dps = prec newexpr = mpmath.identify(xv, constants=constants_dict, tol=tolerance, full=full) if not newexpr: raise ValueError if full: newexpr = newexpr[0] expr = sympify(newexpr) if x and not expr: # don't let x become 0 raise ValueError if expr.is_finite is False and xv not in [mpmath.inf, mpmath.ninf]: raise ValueError return expr finally: # even though there are returns above, this is executed # before leaving mpmath.mp.dps = orig
def findPolynomialOperator(n, k): ''' Calls the mpmath findpoly function to try to identify a polynomial of degree <= k for which n is a zero. ''' poly = findpoly(n, int(k)) if poly is None: poly = findpoly(n, int(k), tol=1e-10) if poly is None: poly = findpoly(n, int(k), tol=1e-7) if poly is None: return [0] else: return poly
def findpoly(a, tol=1.0e-15, maxcoeff=100000, max_degree=10): return mpmath.findpoly(a, n=max_degree, tol=tol, maxcoeff=maxcoeff)