# How does Mathematica integrate?

Basically, this question can be considered to be an extenstion to my other question.

What I wanted to do was this integral as homework (it is indefinite BTW so no approximations using Simpson's Rule or Boole's Rule)

$$\int(x^{3m}+x^{2m}+x^{m})(2x^{2m}+3x^{m}+6)^{\frac1{m}}dx$$

So using Mathematica's Integrate function the answer was

Apparently, after rigorous substitutions and transformations the answer was found to be correct.

What I wanted to know was how Mathematica integrates these functions that require a human tons of intuition to compute, within seconds, and often in the most simple way and also presents them in the most humanly computable form.

(Even differentiation for that matter)

• See my answer here. Commented Jun 14, 2012 at 15:07
• One common method for expressions with elementary functions is the Risch algorithm. You can Google this and you'll get lots of interesting references. This is not a simple to implement algorithm though, according to the descriptions (I don't know how it works). In fact technically it is not even an algorithm because it involves a step where it's necessary to decide whether an expression is identically zero---which is an undecidable problem. Commented Jun 14, 2012 at 15:07
• Just for kicks I threw this integral at both Mathematica 8 and Maple 15. No problem for Mathematica, but Maple chokes. Commented Jun 15, 2012 at 1:39
• @DavidSkulsky Any reasons Why it may be so? Commented Jun 15, 2012 at 6:47
• @The-Ever-Kid: Beats me. Commented Jun 15, 2012 at 13:31

I can only direct you to Some Notes on Internal Implementation:

## Differentiation and Integration

Differentiation uses caching to avoid recomputing partial results.

For indefinite integrals, an extended version of the Risch algorithm is used whenever both the integrand and integral can be expressed in terms of elementary functions, exponential integral functions, polylogarithms, and other related functions.

For other indefinite integrals, heuristic simplification followed by pattern matching is used.

The algorithms in Mathematica cover all of the indefinite integrals in standard reference books such as Gradshteyn-Ryzhik.

Definite integrals that involve no singularities are mostly done by taking limits of the indefinite integrals.

Many other definite integrals are done using Marichev-Adamchik Mellin transform methods. The results are often initially expressed in terms of Meijer G functions, which are converted into hypergeometric functions using Slater's theorem and then simplified.

Integrals over multidimensional regions defined by inequalities are computed by iterative decomposition into disjoint cylindrical or triangular cells.

Integrate uses about 500 pages of Mathematica code and 600 pages of C code.

• You could probably execute Risch by hand, but it's a nasty business. It's one of those things where using a computer is better. Commented Jun 14, 2012 at 15:09
• To further explain the sixth entry: the elementary functions, as well as most of the usual special functions, are in fact special cases of the Meijer $G$-function or the generalized hypergeometric function. Mathematica knows how to integrate those, and upon integrating those, figures out if the result can then be expressed in terms of "simpler" functions. Commented Jun 14, 2012 at 15:12
• I don't believe that Mathematica has the full Risch. For example it fails on Integrate[x^3 ExpIntegralE[1, x], x], which could rightly evaluate to 1/4 E^-x (-6 - 6 x - 3 x^2 - x^3 + E^x x^4 ExpIntegralE[1, x]).
– M.R.
Commented Jun 14, 2012 at 22:34
• For example it fails on Integrate[x^3 ExpIntegralE[1, x], x] as of version 10.01, M can now solve this and gives this: -x^3 ExpIntegralE[2, x] - 3 (x^2 ExpIntegralE[3, x] + 2 (x ExpIntegralE[4, x] + ExpIntegralE[5, x])) which is the same as the expression you show. (after some simplifications) Commented Nov 19, 2014 at 5:16
• "The algorithms in Mathematica cover all of the indefinite integrals in standard reference books such as Gradshteyn-Ryzhik" ... under /.{"all" -> "most"}. As an example, it will bail on $$\int_{-\infty}^\infty \mathrm{erf}(1+x)e^{-x^2}\mathrm dx,$$ which Gradshteyn and Ryzhik will happily evaluate in terms of an error function. You don't have to go that far to catch that statement out. Commented Jul 5, 2016 at 0:39