There is a rather simple integral ($K_0$ is the 0-th order MacDonald function) $$\int_0^\infty e^{-x \cosh\xi}\, d\xi = K_0(x)$$ which mathematica cannot solve. This even though the documentation claims that Integrate can give results in terms of many special functions. In fact it can solve the integral obtained by substituting $r=\cosh \xi$, $$\int_1^\infty \frac{e^{-x r}}{\sqrt{r^2-1}}\,dr=K_0(x).$$ In fact it also failed in solving the more general integral $$\int_0^\infty e^{-x \cosh\xi} \cosh(\alpha \xi)\, d\xi = K_\alpha(x).$$

I am using "8.0 for Mac OS X x86 (64-bit) (October 5, 2011)". Are there more recent or older versions of Mathematica which can solve this class of integrals?


I want to stress that this is not an arbitrary integral but can be thought of as a definition of $K_0$ (the corresponding integral $\int_0^{2\pi} \!e^{i x \cos \xi}\,d\xi$ for $J_0$ mathematica handles very well). I am just curious how it can happen that a system as developed as Mathematica cannot handle this "elementary" integral.

Here is the Mathematica code for those who want to test:

Integrate[Exp[-x Cosh[ξ]],{ξ,0,Infinity}]

Now I found a related integral which indeed is a bug in mathematica. If you try to evaluate ($x \in \mathbb{R}$) $$\int_0^\infty \cos(x \sinh \xi)\,d\xi = K_0(|x|)$$ then Mathematica claims that the integral diverges.

  • 1
    $\begingroup$ The integration is with respect to \[Xi] $\endgroup$ Apr 25 '12 at 8:57
  • 2
    $\begingroup$ Please include the MMA code for the rest of us to test easily... $\endgroup$
    – tkott
    Apr 25 '12 at 10:05
  • 3
    $\begingroup$ @Artes: However this is not an example of Integrate behaving improperly, but an example of Integrate not being able to calculate a given integral. Which may be unfortunate, but as long as it doesn't give an incorrect result, is neither improper behaviour nor a bug. $\endgroup$
    – celtschk
    Apr 25 '12 at 10:31
  • 1
    $\begingroup$ @Artes Integrate is one of the most difficult to get right functions, especially when it comes to definite integration. You'll find similar problems in other systems as well. $\endgroup$
    – Szabolcs
    Apr 25 '12 at 13:09
  • 4
    $\begingroup$ Send in this integral as a suggestion to wolfram technical support. The email is support@wolfram.com. Let then know you are suggesting that this integral should evaluate to the value you suggested here. $\endgroup$
    – Searke
    Apr 25 '12 at 14:52

An experimental internal function Integrate`InverseIntegrate helps here, although it's intended more for integrands involving logs. This is what it returns in the development version:

Integrate`InverseIntegrate[Exp[-x Cosh[t]], {t, 0, Infinity}, Assumptions -> Re[x] > 0]
(*  BesselK[0, x]  *)
  • 2
    $\begingroup$ This code returns $Failed on my machine (version 8.0.4, Windows 7). $\endgroup$
    – Verbeia
    Jun 13 '12 at 6:28
  • 1
    $\begingroup$ Sorry, I should have tested it. This is what it returns in the development version. In[1]:= Integrate`InverseIntegrate[Exp[-x Cosh[t]], {t, 0, Infinity}, Assumptions -> Re[x] > 0] Out[1]= BesselK[0, x] $\endgroup$
    – Bhuvanesh
    Jun 20 '12 at 21:03
  • $\begingroup$ Could you tell me how could I find the file related to "Integrate`InverseIntegrate"? $\endgroup$
    – WateSoyan
    Apr 12 '15 at 12:58
  • 1
    $\begingroup$ Integrate`InverseIntegrate is included as part of Mathematica versions 9.0+. It is not possible to load a file and make it work in earlier versions. $\endgroup$
    – Bhuvanesh
    Apr 14 '15 at 19:55

For those who are interested, what Integrate`InverseIntegrate seems to do is to try various substitutions of the form u == g[x], where g[x] is an expression in the integrand. Here is a function that can make such substitutions in an integral.

SetAttributes[sub, HoldFirst];
sub[Integrate[f_, {x_, a_, b_}, opts___?OptionQ], g_] := 
 Module[{xx, u, inv},
  inv = Simplify[
    InverseFunction[Function[xx, ConditionalExpression[g /. x -> xx, a < xx < b]]][u]
  Integrate[(f /. x -> inv) * D[inv, u],
     Limit[g, x -> 0, Direction -> -1],
     Limit[g, x -> Infinity, Direction -> 1]},
    opts] /; FreeQ[inv, InverseFunction]

Applied to a couple of the OP's examples:

sub[Integrate[Exp[-x Cosh[r]], {r, 0, Infinity}, Assumptions -> Re[x] > 0], Cosh[r]]
(*  BesselK[0, x]  *)

sub[Integrate[Cos[-x Sinh[t]], {t, 0, Infinity}, Assumptions -> x ∈ Reals], Sinh[t]]
(*  BesselK[0, Abs[x]]  *)

The integrand Exp[-x Cosh[t]] Cosh[a t] seems beyond the reach of this sort of stratagem.

  • $\begingroup$ I tested your code (mma 11.0.1): the second expression is evaluated as in your case but the first gives: imgur.com/gallery/itE7M. Also the Integral mentioned in mathematica.stackexchange.com/questions/128340/… is this way not solvable. $\endgroup$
    – mrz
    Oct 11 '16 at 12:27
  • $\begingroup$ @mrz Thanks! I fixed the typo & the code should work. -- And, no, it's no help to your other integral (but that's sort of obvious, since this answer is just showing what Integrate`InverseIntegrate does, and it was already clear that InverseIntegrate didn't work). $\endgroup$
    – Michael E2
    Oct 11 '16 at 12:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.