# Symbolic Integration¶

class sage.symbolic.integration.integral.DefiniteIntegral

Symbolic function representing a definite integral.

EXAMPLES:

sage: from sage.symbolic.integration.integral import definite_integral
sage: definite_integral(sin(x),x,0,pi)
2

class sage.symbolic.integration.integral.IndefiniteIntegral

Class to represent an indefinite integral.

EXAMPLES:

sage: from sage.symbolic.integration.integral import indefinite_integral
sage: indefinite_integral(log(x), x) #indirect doctest
x*log(x) - x
sage: indefinite_integral(x^2, x)
1/3*x^3
sage: indefinite_integral(4*x*log(x), x)
2*x^2*log(x) - x^2
sage: indefinite_integral(exp(x), 2*x)
2*e^x

sage.symbolic.integration.integral.integral(expression, v=None, a=None, b=None, algorithm=None, hold=False)

Returns the indefinite integral with respect to the variable $$v$$, ignoring the constant of integration. Or, if endpoints $$a$$ and $$b$$ are specified, returns the definite integral over the interval $$[a, b]$$.

If self has only one variable, then it returns the integral with respect to that variable.

If definite integration fails, it could be still possible to evaluate the definite integral using indefinite integration with the Newton - Leibniz theorem (however, the user has to ensure that the indefinite integral is continuous on the compact interval $$[a,b]$$ and this theorem can be applied).

INPUT:

• v - a variable or variable name. This can also be a tuple of the variable (optional) and endpoints (i.e., (x,0,1) or (0,1)).

• a - (optional) lower endpoint of definite integral

• b - (optional) upper endpoint of definite integral

• algorithm - (default: ‘maxima’) one of

• ‘maxima’ - use maxima (the default)
• ‘sympy’ - use sympy (also in Sage)
• ‘mathematica_free’ - use http://integrals.wolfram.com/
• ‘fricas’ - use FriCAS (the optional fricas spkg has to be installed)

To prevent automatic evaluation use the hold argument.

EXAMPLES:

sage: x = var('x')
sage: h = sin(x)/(cos(x))^2
sage: h.integral(x)
1/cos(x)

sage: f = x^2/(x+1)^3
sage: f.integral(x)
1/2*(4*x + 3)/(x^2 + 2*x + 1) + log(x + 1)

sage: f = x*cos(x^2)
sage: f.integral(x, 0, sqrt(pi))
0
sage: f.integral(x, a=-pi, b=pi)
0

sage: f(x) = sin(x)
sage: f.integral(x, 0, pi/2)
1


The variable is required, but the endpoints are optional:

sage: y=var('y')
sage: integral(sin(x), x)
-cos(x)
sage: integral(sin(x), y)
y*sin(x)
sage: integral(sin(x), x, pi, 2*pi)
-2
sage: integral(sin(x), y, pi, 2*pi)
pi*sin(x)
sage: integral(sin(x), (x, pi, 2*pi))
-2
sage: integral(sin(x), (y, pi, 2*pi))
pi*sin(x)


Using the hold parameter it is possible to prevent automatic evaluation, which can then be evaluated via simplify():

sage: integral(x^2, x, 0, 3)
9
sage: a = integral(x^2, x, 0, 3, hold=True) ; a
integrate(x^2, x, 0, 3)
sage: a.simplify()
9


Constraints are sometimes needed:

sage: var('x, n')
(x, n)
sage: integral(x^n,x)
Traceback (most recent call last):
...
ValueError: Computation failed since Maxima requested additional
constraints; using the 'assume' command before evaluation
*may* help (example of legal syntax is 'assume(n>0)', see assume?
for more details)
Is n equal to -1?
sage: assume(n > 0)
sage: integral(x^n,x)
x^(n + 1)/(n + 1)
sage: forget()


Usually the constraints are of sign, but others are possible:

sage: assume(n==-1)
sage: integral(x^n,x)
log(x)


Note that an exception is raised when a definite integral is divergent:

sage: forget() # always remember to forget assumptions you no longer need
sage: integrate(1/x^3,(x,0,1))
Traceback (most recent call last):
...
ValueError: Integral is divergent.
sage: integrate(1/x^3,x,-1,3)
Traceback (most recent call last):
...
ValueError: Integral is divergent.


But Sage can calculate the convergent improper integral of this function:

sage: integrate(1/x^3,x,1,infinity)
1/2


The examples in the Maxima documentation:

sage: var('x, y, z, b')
(x, y, z, b)
sage: integral(sin(x)^3, x)
1/3*cos(x)^3 - cos(x)
sage: integral(x/sqrt(b^2-x^2), b)
x*log(2*b + 2*sqrt(b^2 - x^2))
sage: integral(x/sqrt(b^2-x^2), x)
-sqrt(b^2 - x^2)
sage: integral(cos(x)^2 * exp(x), x, 0, pi)
3/5*e^pi - 3/5
sage: integral(x^2 * exp(-x^2), x, -oo, oo)
1/2*sqrt(pi)


We integrate the same function in both Mathematica and Sage (via Maxima):

sage: _ = var('x, y, z')
sage: f = sin(x^2) + y^z
sage: g = mathematica(f)                           # optional - mathematica
sage: print g                                      # optional - mathematica
z        2
y  + Sin[x ]
sage: print g.Integrate(x)                         # optional - mathematica
z        Pi                2
x y  + Sqrt[--] FresnelS[Sqrt[--] x]
2                 Pi
sage: print f.integral(x)
x*y^z + 1/16*sqrt(pi)*((I + 1)*sqrt(2)*erf((1/2*I + 1/2)*sqrt(2)*x) + (I - 1)*sqrt(2)*erf((1/2*I - 1/2)*sqrt(2)*x) - (I - 1)*sqrt(2)*erf(sqrt(-I)*x) + (I + 1)*sqrt(2)*erf((-1)^(1/4)*x))


Alternatively, just use algorithm=’mathematica_free’ to integrate via Mathematica over the internet (does NOT require a Mathematica license!):

sage: _ = var('x, y, z')
sage: f = sin(x^2) + y^z
sage: f.integrate(x, algorithm="mathematica_free")   # optional - internet
x*y^z + sqrt(1/2)*sqrt(pi)*fresnels(sqrt(2)*x/sqrt(pi))


We can also use Sympy:

sage: integrate(x*sin(log(x)), x)
-1/5*x^2*(cos(log(x)) - 2*sin(log(x)))
sage: integrate(x*sin(log(x)), x, algorithm='sympy')
-1/5*x^2*cos(log(x)) + 2/5*x^2*sin(log(x))
sage: _ = var('y, z')
sage: (x^y - z).integrate(y)
-y*z + x^y/log(x)
sage: (x^y - z).integrate(y, algorithm="sympy")  # see Trac #14694
Traceback (most recent call last):
...
AttributeError: 'Piecewise' object has no attribute '_sage_'


We integrate the above function in Maple now:

sage: g = maple(f); g.sort()         # optional - maple
y^z+sin(x^2)
sage: g.integrate(x).sort()          # optional - maple
x*y^z+1/2*2^(1/2)*Pi^(1/2)*FresnelS(2^(1/2)/Pi^(1/2)*x)


We next integrate a function with no closed form integral. Notice that the answer comes back as an expression that contains an integral itself.

sage: A = integral(1/ ((x-4) * (x^3+2*x+1)), x); A
-1/73*integrate((x^2 + 4*x + 18)/(x^3 + 2*x + 1), x) + 1/73*log(x - 4)


We now show that floats are not converted to rationals automatically since we by default have keepfloat: true in maxima.

sage: integral(e^(-x^2),(x, 0, 0.1))
0.05623145800914245*sqrt(pi)


An example of an integral that fricas can integrate, but the default integrator cannot:

sage: f(x) = sqrt(x+sqrt(1+x^2))/x
sage: integrate(f(x), x, algorithm="fricas")      # optional - fricas
2*sqrt(x + sqrt(x^2 + 1)) + log(sqrt(x + sqrt(x^2 + 1)) - 1)
- log(sqrt(x + sqrt(x^2 + 1)) + 1) - 2*arctan(sqrt(x + sqrt(x^2 + 1)))


sage: f(x) = (x^4 - 3*x^2 + 6) / (x^6 - 5*x^4 + 5*x^2 + 4)
sage: integrate(f(x), x, 1, 2)
integrate((x^4 - 3*x^2 + 6)/(x^6 - 5*x^4 + 5*x^2 + 4), x, 1, 2)


Both fricas and sympy give the correct result:

sage: integrate(f(x), x, 1, 2, algorithm="fricas")  # optional - fricas
-1/2*pi + arctan(1/2) + arctan(2) + arctan(5) + arctan(8)
sage: integrate(f(x), x, 1, 2, algorithm="sympy")
-1/2*pi + arctan(8) + arctan(5) + arctan(2) + arctan(1/2)


ALIASES: integral() and integrate() are the same.

EXAMPLES:

Here is an example where we have to use assume:

sage: a,b = var('a,b')
sage: integrate(1/(x^3 *(a+b*x)^(1/3)), x)
Traceback (most recent call last):
...
ValueError: Computation failed since Maxima requested additional
constraints; using the 'assume' command before evaluation
*may* help (example of legal syntax is 'assume(a>0)', see assume?
for more details)
Is a positive or negative?


So we just assume that $$a>0$$ and the integral works:

sage: assume(a>0)
sage: integrate(1/(x^3 *(a+b*x)^(1/3)), x)
2/9*sqrt(3)*b^2*arctan(1/3*sqrt(3)*(2*(b*x + a)^(1/3) + a^(1/3))/a^(1/3))/a^(7/3) - 1/9*b^2*log((b*x + a)^(2/3) + (b*x + a)^(1/3)*a^(1/3) + a^(2/3))/a^(7/3) + 2/9*b^2*log((b*x + a)^(1/3) - a^(1/3))/a^(7/3) + 1/6*(4*(b*x + a)^(5/3)*b^2 - 7*(b*x + a)^(2/3)*a*b^2)/((b*x + a)^2*a^2 - 2*(b*x + a)*a^3 + a^4)


TESTS:

The following integral was broken prior to Maxima 5.15.0 - see trac ticket #3013:

sage: integrate(sin(x)*cos(10*x)*log(x), x)
-1/198*(9*cos(11*x) - 11*cos(9*x))*log(x) + 1/44*Ei(11*I*x) - 1/36*Ei(9*I*x) - 1/36*Ei(-9*I*x) + 1/44*Ei(-11*I*x)


It is no longer possible to use certain functions without an explicit variable. Instead, evaluate the function at a variable, and then take the integral:

sage: integrate(sin)
Traceback (most recent call last):
...
TypeError

sage: integrate(sin(x), x)
-cos(x)
sage: integrate(sin(x), x, 0, 1)
-cos(1) + 1


Check if trac ticket #780 is fixed:

sage: _ = var('x,y')
sage: f = log(x^2+y^2)
sage: res = integral(f,x,0.0001414, 1.); res
Traceback (most recent call last):
...
ValueError: Computation failed since Maxima requested additional constraints; using the 'assume' command before evaluation *may* help (example of legal syntax is 'assume(50015104*y^2-50015103>0)', see assume? for more details)
Is 50015104*y^2-50015103 positive, negative or zero?
sage: assume(y>1)
sage: res = integral(f,x,0.0001414, 1.); res
-2*y*arctan(0.0001414/y) + 2*y*arctan(1/y) + log(y^2 + 1.0) - 0.0001414*log(y^2 + 1.9993959999999997e-08) - 1.9997172
sage: nres = numerical_integral(f.subs(y=2), 0.0001414, 1.); nres
(1.4638323264144..., 1.6251803529759...e-14)
sage: res.subs(y=2).n()
1.46383232641443
sage: nres = numerical_integral(f.subs(y=.5), 0.0001414, 1.); nres
(-0.669511708872807, 7.768678110854711e-15)
sage: res.subs(y=.5).n()
-0.669511708872807


Check if trac ticket #6816 is fixed:

sage: var('t,theta')
(t, theta)
sage: integrate(t*cos(-theta*t),t,0,pi)
(pi*theta*sin(pi*theta) + cos(pi*theta))/theta^2 - 1/theta^2
sage: integrate(t*cos(-theta*t),(t,0,pi))
(pi*theta*sin(pi*theta) + cos(pi*theta))/theta^2 - 1/theta^2
sage: integrate(t*cos(-theta*t),t)
(t*theta*sin(t*theta) + cos(t*theta))/theta^2
sage: integrate(x^2,(x)) # this worked before
1/3*x^3
sage: integrate(x^2,(x,)) # this didn't
1/3*x^3
sage: integrate(x^2,(x,1,2))
7/3
sage: integrate(x^2,(x,1,2,3))
Traceback (most recent call last):
...
ValueError: invalid input (x, 1, 2, 3) - please use variable, with or without two endpoints


Note that this used to be the test, but it is actually divergent (though Maxima currently returns the principal value):

sage: integrate(t*cos(-theta*t),(t,-oo,oo))
0


Check if trac ticket #6189 is fixed:

sage: n = N; n
<function numerical_approx at ...>
sage: F(x) = 1/sqrt(2*pi*1^2)*exp(-1/(2*1^2)*(x-0)^2)
sage: G(x) = 1/sqrt(2*pi*n(1)^2)*exp(-1/(2*n(1)^2)*(x-n(0))^2)
sage: integrate( (F(x)-F(x))^2, x, -infinity, infinity).n()
0.000000000000000
sage: integrate( ((F(x)-G(x))^2).expand(), x, -infinity, infinity).n()
-6.26376265908397e-17
sage: integrate( (F(x)-G(x))^2, x, -infinity, infinity).n()# abstol 1e-6
0


This was broken before Maxima 5.20:

sage: exp(-x*i).integral(x,0,1)
I*e^(-I) - I


Test deprecation warning when variable is not specified:

sage: x.integral()
doctest:...: DeprecationWarning:
Variable of integration should be specified explicitly.
See http://trac.sagemath.org/12438 for details.
1/2*x^2


Test that trac ticket #8729 is fixed:

sage: t = var('t')
sage: a = sqrt((sin(t))^2 + (cos(t))^2)
sage: integrate(a, t, 0, 2*pi)
2*pi
sage: a.simplify_full().simplify_trig()
1


Maxima uses Cauchy Principal Value calculations to integrate certain convergent integrals. Here we test that this does not raise an error message (see trac ticket #11987):

sage: integrate(sin(x)*sin(x/3)/x^2, x, 0, oo)
1/6*pi


Maxima returned a negative value for this integral prior to maxima-5.24 (trac ticket #10923). Ideally we would get an answer in terms of the gamma function; however, we get something equivalent:

sage: actual_result = integral(e^(-1/x^2), x, 0, 1)
(sqrt(pi)*(erf(1)*e - e) + 1)*e^(-1)
sage: ideal_result = 1/2*gamma(-1/2, 1)
sage: error = actual_result - ideal_result
sage: error.numerical_approx() # abs tol 1e-10
0


We will not get an evaluated answer here, which is better than the previous (wrong) answer of zero. See trac ticket #10914:

sage: f = abs(sin(x))
sage: integrate(f, x, 0, 2*pi)  # long time (4s on sage.math, 2012)
integrate(abs(sin(x)), x, 0, 2*pi)


Another incorrect integral fixed upstream in Maxima, from trac ticket #11233:

sage: a,t = var('a,t')
sage: assume(a>0)
sage: assume(x>0)
sage: f = log(1 + a/(x * t)^2)
sage: F = integrate(f, t, 1, Infinity)
sage: F(x=1, a=7).numerical_approx() # abs tol 1e-10
4.32025625668262
sage: forget()


Verify that MinusInfinity works with sympy (trac ticket #12345):

sage: integral(1/x^2, x, -infinity, -1, algorithm='sympy')
1


Check that trac ticket #11737 is fixed:

sage: N(integrate(sin(x^2)/(x^2), x, 1, infinity))
0.285736646322853


Check that trac ticket #14209 is fixed:

sage: integral(e^(-abs(x))/cosh(x),x,-infinity,infinity)
2*log(2)
sage: integral(e^(-abs(x))/cosh(x),x,-infinity,infinity)
2*log(2)


Check that trac ticket #12628 is fixed:

sage: var('z,n')
(z, n)
sage: f(z, n) = sin(n*z) / (n*z)
sage: integrate(f(z,1)*f(z,3)*f(z,5)*f(z,7),z,0,oo)
22/315*pi
sage: for k in srange(1, 16, 2):
....:     print integrate(prod(f(z, ell)
....:                     for ell in srange(1, k+1, 2)), z, 0, oo)
1/2*pi
1/6*pi
1/10*pi
22/315*pi
3677/72576*pi
48481/1247400*pi
193359161/6227020800*pi
5799919/227026800*pi


Check that trac ticket #12628 is fixed:

sage: integrate(1/(sqrt(x)*((1+sqrt(x))^2)),x,1,9)
1/2

sage.symbolic.integration.integral.integrate(expression, v=None, a=None, b=None, algorithm=None, hold=False)

Returns the indefinite integral with respect to the variable $$v$$, ignoring the constant of integration. Or, if endpoints $$a$$ and $$b$$ are specified, returns the definite integral over the interval $$[a, b]$$.

If self has only one variable, then it returns the integral with respect to that variable.

If definite integration fails, it could be still possible to evaluate the definite integral using indefinite integration with the Newton - Leibniz theorem (however, the user has to ensure that the indefinite integral is continuous on the compact interval $$[a,b]$$ and this theorem can be applied).

INPUT:

• v - a variable or variable name. This can also be a tuple of the variable (optional) and endpoints (i.e., (x,0,1) or (0,1)).

• a - (optional) lower endpoint of definite integral

• b - (optional) upper endpoint of definite integral

• algorithm - (default: ‘maxima’) one of

• ‘maxima’ - use maxima (the default)
• ‘sympy’ - use sympy (also in Sage)
• ‘mathematica_free’ - use http://integrals.wolfram.com/
• ‘fricas’ - use FriCAS (the optional fricas spkg has to be installed)

To prevent automatic evaluation use the hold argument.

EXAMPLES:

sage: x = var('x')
sage: h = sin(x)/(cos(x))^2
sage: h.integral(x)
1/cos(x)

sage: f = x^2/(x+1)^3
sage: f.integral(x)
1/2*(4*x + 3)/(x^2 + 2*x + 1) + log(x + 1)

sage: f = x*cos(x^2)
sage: f.integral(x, 0, sqrt(pi))
0
sage: f.integral(x, a=-pi, b=pi)
0

sage: f(x) = sin(x)
sage: f.integral(x, 0, pi/2)
1


The variable is required, but the endpoints are optional:

sage: y=var('y')
sage: integral(sin(x), x)
-cos(x)
sage: integral(sin(x), y)
y*sin(x)
sage: integral(sin(x), x, pi, 2*pi)
-2
sage: integral(sin(x), y, pi, 2*pi)
pi*sin(x)
sage: integral(sin(x), (x, pi, 2*pi))
-2
sage: integral(sin(x), (y, pi, 2*pi))
pi*sin(x)


Using the hold parameter it is possible to prevent automatic evaluation, which can then be evaluated via simplify():

sage: integral(x^2, x, 0, 3)
9
sage: a = integral(x^2, x, 0, 3, hold=True) ; a
integrate(x^2, x, 0, 3)
sage: a.simplify()
9


Constraints are sometimes needed:

sage: var('x, n')
(x, n)
sage: integral(x^n,x)
Traceback (most recent call last):
...
ValueError: Computation failed since Maxima requested additional
constraints; using the 'assume' command before evaluation
*may* help (example of legal syntax is 'assume(n>0)', see assume?
for more details)
Is n equal to -1?
sage: assume(n > 0)
sage: integral(x^n,x)
x^(n + 1)/(n + 1)
sage: forget()


Usually the constraints are of sign, but others are possible:

sage: assume(n==-1)
sage: integral(x^n,x)
log(x)


Note that an exception is raised when a definite integral is divergent:

sage: forget() # always remember to forget assumptions you no longer need
sage: integrate(1/x^3,(x,0,1))
Traceback (most recent call last):
...
ValueError: Integral is divergent.
sage: integrate(1/x^3,x,-1,3)
Traceback (most recent call last):
...
ValueError: Integral is divergent.


But Sage can calculate the convergent improper integral of this function:

sage: integrate(1/x^3,x,1,infinity)
1/2


The examples in the Maxima documentation:

sage: var('x, y, z, b')
(x, y, z, b)
sage: integral(sin(x)^3, x)
1/3*cos(x)^3 - cos(x)
sage: integral(x/sqrt(b^2-x^2), b)
x*log(2*b + 2*sqrt(b^2 - x^2))
sage: integral(x/sqrt(b^2-x^2), x)
-sqrt(b^2 - x^2)
sage: integral(cos(x)^2 * exp(x), x, 0, pi)
3/5*e^pi - 3/5
sage: integral(x^2 * exp(-x^2), x, -oo, oo)
1/2*sqrt(pi)


We integrate the same function in both Mathematica and Sage (via Maxima):

sage: _ = var('x, y, z')
sage: f = sin(x^2) + y^z
sage: g = mathematica(f)                           # optional - mathematica
sage: print g                                      # optional - mathematica
z        2
y  + Sin[x ]
sage: print g.Integrate(x)                         # optional - mathematica
z        Pi                2
x y  + Sqrt[--] FresnelS[Sqrt[--] x]
2                 Pi
sage: print f.integral(x)
x*y^z + 1/16*sqrt(pi)*((I + 1)*sqrt(2)*erf((1/2*I + 1/2)*sqrt(2)*x) + (I - 1)*sqrt(2)*erf((1/2*I - 1/2)*sqrt(2)*x) - (I - 1)*sqrt(2)*erf(sqrt(-I)*x) + (I + 1)*sqrt(2)*erf((-1)^(1/4)*x))


Alternatively, just use algorithm=’mathematica_free’ to integrate via Mathematica over the internet (does NOT require a Mathematica license!):

sage: _ = var('x, y, z')
sage: f = sin(x^2) + y^z
sage: f.integrate(x, algorithm="mathematica_free")   # optional - internet
x*y^z + sqrt(1/2)*sqrt(pi)*fresnels(sqrt(2)*x/sqrt(pi))


We can also use Sympy:

sage: integrate(x*sin(log(x)), x)
-1/5*x^2*(cos(log(x)) - 2*sin(log(x)))
sage: integrate(x*sin(log(x)), x, algorithm='sympy')
-1/5*x^2*cos(log(x)) + 2/5*x^2*sin(log(x))
sage: _ = var('y, z')
sage: (x^y - z).integrate(y)
-y*z + x^y/log(x)
sage: (x^y - z).integrate(y, algorithm="sympy")  # see Trac #14694
Traceback (most recent call last):
...
AttributeError: 'Piecewise' object has no attribute '_sage_'


We integrate the above function in Maple now:

sage: g = maple(f); g.sort()         # optional - maple
y^z+sin(x^2)
sage: g.integrate(x).sort()          # optional - maple
x*y^z+1/2*2^(1/2)*Pi^(1/2)*FresnelS(2^(1/2)/Pi^(1/2)*x)


We next integrate a function with no closed form integral. Notice that the answer comes back as an expression that contains an integral itself.

sage: A = integral(1/ ((x-4) * (x^3+2*x+1)), x); A
-1/73*integrate((x^2 + 4*x + 18)/(x^3 + 2*x + 1), x) + 1/73*log(x - 4)


We now show that floats are not converted to rationals automatically since we by default have keepfloat: true in maxima.

sage: integral(e^(-x^2),(x, 0, 0.1))
0.05623145800914245*sqrt(pi)


An example of an integral that fricas can integrate, but the default integrator cannot:

sage: f(x) = sqrt(x+sqrt(1+x^2))/x
sage: integrate(f(x), x, algorithm="fricas")      # optional - fricas
2*sqrt(x + sqrt(x^2 + 1)) + log(sqrt(x + sqrt(x^2 + 1)) - 1)
- log(sqrt(x + sqrt(x^2 + 1)) + 1) - 2*arctan(sqrt(x + sqrt(x^2 + 1)))


sage: f(x) = (x^4 - 3*x^2 + 6) / (x^6 - 5*x^4 + 5*x^2 + 4)
sage: integrate(f(x), x, 1, 2)
integrate((x^4 - 3*x^2 + 6)/(x^6 - 5*x^4 + 5*x^2 + 4), x, 1, 2)


Both fricas and sympy give the correct result:

sage: integrate(f(x), x, 1, 2, algorithm="fricas")  # optional - fricas
-1/2*pi + arctan(1/2) + arctan(2) + arctan(5) + arctan(8)
sage: integrate(f(x), x, 1, 2, algorithm="sympy")
-1/2*pi + arctan(8) + arctan(5) + arctan(2) + arctan(1/2)


ALIASES: integral() and integrate() are the same.

EXAMPLES:

Here is an example where we have to use assume:

sage: a,b = var('a,b')
sage: integrate(1/(x^3 *(a+b*x)^(1/3)), x)
Traceback (most recent call last):
...
ValueError: Computation failed since Maxima requested additional
constraints; using the 'assume' command before evaluation
*may* help (example of legal syntax is 'assume(a>0)', see assume?
for more details)
Is a positive or negative?


So we just assume that $$a>0$$ and the integral works:

sage: assume(a>0)
sage: integrate(1/(x^3 *(a+b*x)^(1/3)), x)
2/9*sqrt(3)*b^2*arctan(1/3*sqrt(3)*(2*(b*x + a)^(1/3) + a^(1/3))/a^(1/3))/a^(7/3) - 1/9*b^2*log((b*x + a)^(2/3) + (b*x + a)^(1/3)*a^(1/3) + a^(2/3))/a^(7/3) + 2/9*b^2*log((b*x + a)^(1/3) - a^(1/3))/a^(7/3) + 1/6*(4*(b*x + a)^(5/3)*b^2 - 7*(b*x + a)^(2/3)*a*b^2)/((b*x + a)^2*a^2 - 2*(b*x + a)*a^3 + a^4)


TESTS:

The following integral was broken prior to Maxima 5.15.0 - see trac ticket #3013:

sage: integrate(sin(x)*cos(10*x)*log(x), x)
-1/198*(9*cos(11*x) - 11*cos(9*x))*log(x) + 1/44*Ei(11*I*x) - 1/36*Ei(9*I*x) - 1/36*Ei(-9*I*x) + 1/44*Ei(-11*I*x)


It is no longer possible to use certain functions without an explicit variable. Instead, evaluate the function at a variable, and then take the integral:

sage: integrate(sin)
Traceback (most recent call last):
...
TypeError

sage: integrate(sin(x), x)
-cos(x)
sage: integrate(sin(x), x, 0, 1)
-cos(1) + 1


Check if trac ticket #780 is fixed:

sage: _ = var('x,y')
sage: f = log(x^2+y^2)
sage: res = integral(f,x,0.0001414, 1.); res
Traceback (most recent call last):
...
ValueError: Computation failed since Maxima requested additional constraints; using the 'assume' command before evaluation *may* help (example of legal syntax is 'assume(50015104*y^2-50015103>0)', see assume? for more details)
Is 50015104*y^2-50015103 positive, negative or zero?
sage: assume(y>1)
sage: res = integral(f,x,0.0001414, 1.); res
-2*y*arctan(0.0001414/y) + 2*y*arctan(1/y) + log(y^2 + 1.0) - 0.0001414*log(y^2 + 1.9993959999999997e-08) - 1.9997172
sage: nres = numerical_integral(f.subs(y=2), 0.0001414, 1.); nres
(1.4638323264144..., 1.6251803529759...e-14)
sage: res.subs(y=2).n()
1.46383232641443
sage: nres = numerical_integral(f.subs(y=.5), 0.0001414, 1.); nres
(-0.669511708872807, 7.768678110854711e-15)
sage: res.subs(y=.5).n()
-0.669511708872807


Check if trac ticket #6816 is fixed:

sage: var('t,theta')
(t, theta)
sage: integrate(t*cos(-theta*t),t,0,pi)
(pi*theta*sin(pi*theta) + cos(pi*theta))/theta^2 - 1/theta^2
sage: integrate(t*cos(-theta*t),(t,0,pi))
(pi*theta*sin(pi*theta) + cos(pi*theta))/theta^2 - 1/theta^2
sage: integrate(t*cos(-theta*t),t)
(t*theta*sin(t*theta) + cos(t*theta))/theta^2
sage: integrate(x^2,(x)) # this worked before
1/3*x^3
sage: integrate(x^2,(x,)) # this didn't
1/3*x^3
sage: integrate(x^2,(x,1,2))
7/3
sage: integrate(x^2,(x,1,2,3))
Traceback (most recent call last):
...
ValueError: invalid input (x, 1, 2, 3) - please use variable, with or without two endpoints


Note that this used to be the test, but it is actually divergent (though Maxima currently returns the principal value):

sage: integrate(t*cos(-theta*t),(t,-oo,oo))
0


Check if trac ticket #6189 is fixed:

sage: n = N; n
<function numerical_approx at ...>
sage: F(x) = 1/sqrt(2*pi*1^2)*exp(-1/(2*1^2)*(x-0)^2)
sage: G(x) = 1/sqrt(2*pi*n(1)^2)*exp(-1/(2*n(1)^2)*(x-n(0))^2)
sage: integrate( (F(x)-F(x))^2, x, -infinity, infinity).n()
0.000000000000000
sage: integrate( ((F(x)-G(x))^2).expand(), x, -infinity, infinity).n()
-6.26376265908397e-17
sage: integrate( (F(x)-G(x))^2, x, -infinity, infinity).n()# abstol 1e-6
0


This was broken before Maxima 5.20:

sage: exp(-x*i).integral(x,0,1)
I*e^(-I) - I


Test deprecation warning when variable is not specified:

sage: x.integral()
doctest:...: DeprecationWarning:
Variable of integration should be specified explicitly.
See http://trac.sagemath.org/12438 for details.
1/2*x^2


Test that trac ticket #8729 is fixed:

sage: t = var('t')
sage: a = sqrt((sin(t))^2 + (cos(t))^2)
sage: integrate(a, t, 0, 2*pi)
2*pi
sage: a.simplify_full().simplify_trig()
1


Maxima uses Cauchy Principal Value calculations to integrate certain convergent integrals. Here we test that this does not raise an error message (see trac ticket #11987):

sage: integrate(sin(x)*sin(x/3)/x^2, x, 0, oo)
1/6*pi


Maxima returned a negative value for this integral prior to maxima-5.24 (trac ticket #10923). Ideally we would get an answer in terms of the gamma function; however, we get something equivalent:

sage: actual_result = integral(e^(-1/x^2), x, 0, 1)
(sqrt(pi)*(erf(1)*e - e) + 1)*e^(-1)
sage: ideal_result = 1/2*gamma(-1/2, 1)
sage: error = actual_result - ideal_result
sage: error.numerical_approx() # abs tol 1e-10
0


We will not get an evaluated answer here, which is better than the previous (wrong) answer of zero. See trac ticket #10914:

sage: f = abs(sin(x))
sage: integrate(f, x, 0, 2*pi)  # long time (4s on sage.math, 2012)
integrate(abs(sin(x)), x, 0, 2*pi)


Another incorrect integral fixed upstream in Maxima, from trac ticket #11233:

sage: a,t = var('a,t')
sage: assume(a>0)
sage: assume(x>0)
sage: f = log(1 + a/(x * t)^2)
sage: F = integrate(f, t, 1, Infinity)
sage: F(x=1, a=7).numerical_approx() # abs tol 1e-10
4.32025625668262
sage: forget()


Verify that MinusInfinity works with sympy (trac ticket #12345):

sage: integral(1/x^2, x, -infinity, -1, algorithm='sympy')
1


Check that trac ticket #11737 is fixed:

sage: N(integrate(sin(x^2)/(x^2), x, 1, infinity))
0.285736646322853


Check that trac ticket #14209 is fixed:

sage: integral(e^(-abs(x))/cosh(x),x,-infinity,infinity)
2*log(2)
sage: integral(e^(-abs(x))/cosh(x),x,-infinity,infinity)
2*log(2)


Check that trac ticket #12628 is fixed:

sage: var('z,n')
(z, n)
sage: f(z, n) = sin(n*z) / (n*z)
sage: integrate(f(z,1)*f(z,3)*f(z,5)*f(z,7),z,0,oo)
22/315*pi
sage: for k in srange(1, 16, 2):
....:     print integrate(prod(f(z, ell)
....:                     for ell in srange(1, k+1, 2)), z, 0, oo)
1/2*pi
1/6*pi
1/10*pi
22/315*pi
3677/72576*pi
48481/1247400*pi
193359161/6227020800*pi
5799919/227026800*pi


Check that trac ticket #12628 is fixed:

sage: integrate(1/(sqrt(x)*((1+sqrt(x))^2)),x,1,9)
1/2


#### Previous topic

Functional notation support for common calculus methods

#### Next topic

A Sample Session using SymPy