def fricas_integrator(expression, v, a=None, b=None, noPole=True): """ Integration using FriCAS EXAMPLES:: sage: from sage.symbolic.integration.external import fricas_integrator # optional - fricas sage: fricas_integrator(sin(x), x) # optional - fricas -cos(x) sage: fricas_integrator(cos(x), x) # optional - fricas sin(x) sage: fricas_integrator(1/(x^2-2), x, 0, 1) # optional - fricas 1/4*sqrt(2)*(log(3*sqrt(2) - 4) - log(sqrt(2))) sage: fricas_integrator(1/(x^2+6), x, -oo, oo) # optional - fricas 1/6*sqrt(6)*pi """ if not isinstance(expression, Expression): expression = SR(expression) if a is None: result = expression._fricas_().integrate(v) else: import sage.rings.infinity if a == sage.rings.infinity.PlusInfinity(): a = "%plusInfinity" elif a == sage.rings.infinity.MinusInfinity(): a = "%minusInfinity" if b == sage.rings.infinity.PlusInfinity(): b = "%plusInfinity" elif b == sage.rings.infinity.MinusInfinity(): b = "%minusInfinity" if noPole: result = expression._fricas_().integrate( "{}={}..{}".format(v, a, b), '"noPole"') else: result = expression._fricas_().integrate("{}={}..{}".format( v, a, b)) locals = {str(v): v for v in expression.variables()} if str(result) == "potentialPole": raise ValueError("The integrand has a potential pole" " in the integration interval") return result.sage()
def fricas_integrator(expression, v, a=None, b=None, noPole=True): """ Integration using FriCAS EXAMPLES:: sage: from sage.symbolic.integration.external import fricas_integrator # optional - fricas sage: fricas_integrator(sin(x), x) # optional - fricas -cos(x) sage: fricas_integrator(cos(x), x) # optional - fricas sin(x) sage: fricas_integrator(1/(x^2-2), x, 0, 1) # optional - fricas 1/4*sqrt(2)*(log(3*sqrt(2) - 4) - log(sqrt(2))) sage: fricas_integrator(1/(x^2+6), x, -oo, oo) # optional - fricas 1/6*sqrt(6)*pi """ if not isinstance(expression, Expression): expression = SR(expression) if a is None: result = expression._fricas_().integrate(v) else: import sage.rings.infinity if a == sage.rings.infinity.PlusInfinity(): a = "%plusInfinity" elif a == sage.rings.infinity.MinusInfinity(): a = "%minusInfinity" if b == sage.rings.infinity.PlusInfinity(): b = "%plusInfinity" elif b == sage.rings.infinity.MinusInfinity(): b = "%minusInfinity" if noPole: result = expression._fricas_().integrate("{}={}..{}".format(v, a, b), '"noPole"') else: result = expression._fricas_().integrate("{}={}..{}".format(v, a, b)) locals = {str(v): v for v in expression.variables()} if str(result) == "potentialPole": raise ValueError("The integrand has a potential pole" " in the integration interval") return result.sage()
def fricas_integrator(expression, v, a=None, b=None): """ Integration using FriCAS EXAMPLES:: sage: from sage.symbolic.integration.external import fricas_integrator # optional - fricas sage: fricas_integrator(sin(x), x) # optional - fricas -cos(x) sage: fricas_integrator(cos(x), x) # optional - fricas sin(x) sage: fricas_integrator(1/(x^2-2), x, 0, 1) # optional - fricas 1/4*(log(3*sqrt(2) - 4) - log(sqrt(2)))*sqrt(2) sage: fricas_integrator(1/(x^2+6), x, -oo, oo) # optional - fricas 1/6*pi*sqrt(6) """ if not isinstance(expression, Expression): expression = SR(expression) if a is None: result = expression._fricas_().integrate(v) else: import sage.rings.infinity if a == sage.rings.infinity.PlusInfinity(): a = "%plusInfinity" elif a == sage.rings.infinity.MinusInfinity(): a = "%minusInfinity" if b == sage.rings.infinity.PlusInfinity(): b = "%plusInfinity" elif b == sage.rings.infinity.MinusInfinity(): b = "%minusInfinity" result = expression._fricas_().integrate("{}={}..{}".format(v, a, b)) locals = {str(v): v for v in expression.variables()} if str(result) == "potentialPole": raise ValueError("The integrand has a potential pole" " in the integration interval") parsed_result = result.unparsed_input_form() import sage.misc.sage_eval try: return sage.misc.sage_eval.sage_eval(parsed_result, locals=locals) except: raise ValueError("Unable to parse: {}".format(parsed_result))