I am numerically solving an integral equation that contains a double integral. I have managed to get a solution but it takes forever. I am wondering if there is a way to speed up numerical integration of multidimensional integrals.

Here is the code:

First a couple of functions that enter the calculation (if I don't include them, the integration will be faster)

g = Pi

cs[x_] := 2*ArcCos[x]/Sqrt[1 - x^2];

csh[x_] := 2*ArcCosh[x]/Sqrt[x^2 - 1];

pref[t_, v_, d_] := 
  1/d^2*(1 + 10^(2*(v - t)) (1 - 1/d^2)) / 
    Sqrt[1 - 1/4*((10^(2*t) + 10^(2*v))/10^(t + v) - 10^(v - t)/d^2)^2]

piece[d_,v_] := 
  If[d Astart[v] < 1, cs[d Astart[v]], If[d Astart[v] > 1, csh[d Astart[v]], 2]]

Here is the actual iteration

Clear[Astart, A, precision, values]

precision = 10^-1;

Astart[t_] = -g*t + 1;

values = ParallelTable[{t, 
  1 + g/(Pi^3*2)
    (NIntegrate[Log[10]*10^(v - t)*pref[t, v, d]*((d^2*Astart[v] - 1)*(Pi - g*piece[d,v]) + 
        d*Astart[v]*g^2*csh[g])/(d^2*Astart[v]+ g^2 - 1),
      {v, -Infinity, 0},
      {d, 1/(10^(t - v) + 1), 1/Abs[10^(t - v) - 1]},
      WorkingPrecision -> 12,
      PrecisionGoal -> 3,
      MaxRecursion -> 20,
      AccuracyGoal -> 12,
      Method -> {"SymbolicPreprocessing",  "OscillatorySelection"-> False, "SymbolicProcessing"->0}
  {t, Union[Range[-5.6,-1.6, 0.5]~Join~Log10[Range[0.08, 0.98, 0.1]]]}];

 A[t_] = Interpolation[Re@values, t, InterpolationOrder -> 2, Method-> "Spline"]

Perhaps I should also mention that this later on iterated into a while loop until convergence is achieved (just to give a better picture on the amount of total waiting time...)

EDIT: I have added in the code also the method the 'fastest' method that I could find, however it still runs for ages... Given the particular form of the integration limits, is there any better trick to help mathematica? Also, by inspection I can see that the result explodes logarithmically which might be another reason why it is so slow.

  • 1
    $\begingroup$ You have to experiment with the methods and strategies provided with NIntegrate. Check the online manual for more information. $\endgroup$
    – Spawn1701D
    Commented Apr 15, 2013 at 6:37
  • $\begingroup$ Please provide some codes in your question, so we can exactly know what is your problem. $\endgroup$ Commented Apr 15, 2013 at 6:39
  • $\begingroup$ @Spawn1701D thank you for your interest! I have tried virtually all methods provided in mathematica documentation, but it seems that my integral doesn't fit into any of the 'patterns' provided there :( $\endgroup$
    – cami
    Commented Apr 15, 2013 at 6:40
  • $\begingroup$ What version of Mathematica are you using? Can you provide the actual expression? $\endgroup$
    – Spawn1701D
    Commented Apr 15, 2013 at 6:44
  • 1
    $\begingroup$ Take a look at Advanced Numerical Integration In Mathematica it might give you some pointers. $\endgroup$
    – Spawn1701D
    Commented Apr 15, 2013 at 6:48


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.