Integrals That Can and Cannot Be Done

Evaluating integrals is much more difficult than evaluating derivatives. For derivatives, there is a systematic procedure based on the chain rule that effectively allows any derivative to be worked out. But for integrals, there is no such systematic procedure.

One of the main problems is that it is difficult to know what kinds of functions will be needed to evaluate a particular integral. When you work out a derivative, you always end up with functions that are of the same kind or simpler than the ones you started with. But when you work out integrals, you often end up needing to use functions that are much more complicated than the ones you started with.

This integral can be evaluated using the same kind of functions that appeared in the input:

Integrate[Log[x]^2,x]

But for this integral the special function (RefLink[LogIntegral, paclet:ref/LogIntegral]) is needed:

Integrate[Log[Log[x]],x]

It is not difficult to find integrals that require all sorts of functions:

Integrate[Sin[x^2],x]

This integral involves an incomplete gamma function. Note that the power is carefully set up to allow any complex value of x:

Integrate[Exp[-x^a],x]

The Wolfram Language includes a very wide range of mathematical functions, and by using these functions a great many integrals can be done. But it is still possible to find even fairly simple-looking integrals that just cannot be done in terms of any standard mathematical functions.

Here is a fairly simple-looking integral that cannot be done in terms of any standard mathematical functions:

Integrate[Sin[x]/Log[x],x]

The main point of being able to do an integral in terms of standard mathematical functions is that it lets one use the known properties of these functions to evaluate or manipulate the result one gets.

In the most convenient cases, integrals can be done purely in terms of elementary functions such as exponentials, logarithms and trigonometric functions. In fact, if you give an integrand that involves only such elementary functions, then one of the important capabilities of (RefLink[Integrate, paclet:ref/Integrate]) is that if the corresponding integral can be expressed in terms of elementary functions, then (RefLink[Integrate, paclet:ref/Integrate]) will essentially always succeed in finding it.

Integrals of rational functions are straightforward to evaluate, and always come out in terms of rational functions, logarithms and inverse trigonometric functions:

Integrate[x/((x-1)(x+2)),x]

The integral here is still of the same form, but now involves an implicit sum over the roots of a polynomial:

Integrate[1/(1+2 x+x^3),x]

This finds numerical approximations to all the root objects:

N[%]

Integrals of trigonometric functions usually come out in terms of other trigonometric functions:

Integrate[Sin[x]^3 Cos[x]^2,x]

This is a fairly simple integral involving algebraic functions:

Integrate[Sqrt[x] Sqrt[1+x],x]

Here is an integral involving nested square roots:

Integrate[Sqrt[x+Sqrt[x]],x]

By nesting elementary functions you sometimes get integrals that can be done in terms of elementary functions:

Integrate[Cos[Log[x]],x]

But more often other kinds of functions are needed:

Integrate[Log[Cos[x]],x]

Integrals like this typically come out in terms of elliptic functions:

Integrate[Sqrt[Cos[x]],x]

But occasionally one can get results in terms of elementary functions alone:

Integrate[Sqrt[Tan[x]],x]

Integrals like this can systematically be done using (RefLink[Piecewise, paclet:ref/Piecewise]):

Integrate[2^Max[x,1-x],x]

Beyond working with elementary functions, (RefLink[Integrate, paclet:ref/Integrate]) includes a large number of algorithms for dealing with special functions. Sometimes it uses a direct generalization of the procedure for elementary functions. But more often its strategy is first to try to write the integrand in a form that can be integrated in terms of certain sophisticated special functions, and then having done this to try to find reductions of these sophisticated functions to more familiar functions.

To integrate this Bessel function requires a generalized hypergeometric function:

Integrate[BesselJ[0,x],x]

Sometimes the integrals can be reduced to more familiar forms:

Integrate[x^3 BesselJ[0,x],x]

A large book of integral tables will list perhaps a few thousand indefinite integrals. The Wolfram Language can do essentially all of these integrals. And because it contains general algorithms rather than just specific cases, the Wolfram Language can actually do a vastly wider range of integrals.

You could expect to find this integral in any large book of integral tables:

Integrate[Log[1-x]/x,x]

To do this integral, however, requires a more general algorithm, rather than just a direct table lookup:

Integrate[Log[1+3 x+x^2]/x,x]

Particularly if you introduce new mathematical functions of your own, you may want to teach the Wolfram Language new kinds of integrals. You can do this by making appropriate definitions for (RefLink[Integrate, paclet:ref/Integrate]).

In the case of differentiation, the chain rule allows one to reduce all derivatives to a standard form, represented in the Wolfram Language using (RefLink[Derivative, paclet:ref/Derivative]). But for integration, no such similar standard form exists, and as a result you often have to make definitions for several different versions of the same integral. Changes of variables and other transformations can rarely be done automatically by (RefLink[Integrate, paclet:ref/Integrate]).

This integral cannot be done in terms of any of the standard mathematical functions built into the Wolfram Language:

Integrate[Sin[Sin[x]],x]

Before you add your own rules for integration, you have to remove write protection:

Unprotect[Integrate]

You can set up your own rule to define the integral to be, say, a "Jones" function:

Integrate[Sin[Sin[a_.+b_. x_]],x_]:=Jones[a,x]/b

Now the Wolfram Language can do integrals that give Jones functions:

Integrate[Sin[Sin[3x]],x]

As it turns out, the integral ∫sin(sin(x))dx can in principle be represented as an infinite sum of (Subscript[, 2])(Subscript[F, 1]) hypergeometric functions, or as a suitably generalized Kampé de Fériet hypergeometric function of two variables.