In mathematica, how would I use parallel computing (or paralleltable) to compute the integrals of x2x^2, xx, 3x3x from x=0x=0 to 1010 just like in the first answer of http://superuser.com/questions/315337/how-to-make-commands-in-mathematica-8-use-all-cores? After entering the three functions into a table, I’m not sure how to tell Mathematica to integrate the functions. I understand that parallel computing is not the most efficient method, but once I realize how to do this, I can extend it to a much more complicated series of functions.

The motivation of this question is that I have a complicated function (see below) that takes a very, very long time to integrate (after two hours, the function still had not integrated). I’m hoping to break this function up into a group of slightly less complicated functions and utilize parallel computing to compute the integrals.

If I can’t do this, is there a way to let mathematica use all four cores on my computer to compute the integral, but not using parallel computing?

Thank you.

(Sin[q – x] ((0.476497 – 0.401956 I) – (0.476497 + 0.598044 I) Tanh[

0.933024 (q – x)]) +

Cos[q – x] ((0.401956 + 0.504489 I) + (0.598044 + 0.504489 I) Tanh[

1.06598 (q – x)])) (Sin[

q + x] ((0.476497 – 0.401956 I) – (0.476497 – 0.598044 I) Tanh[

0.933024 (q + x)]) +

Cos[q + x] ((0.401956 – 0.504489 I) + (0.598044 + 0.504489 I) Tanh[

1.06598 (q + x)]))

Note: I plan to integrate x between -10 and 10 where p and q are arbitrary variables so I can then plot the result as a contour map.

=================

maybe a duplicate with mathematica.stackexchange.com/questions/1620/…

– Stefan

Jul 8 ’13 at 18:24

Can I do numerical integration when p and q are arbitrary variables?

– user85503

Jul 8 ’13 at 19:49

Where is p? I only see q.

– Rolf Mertig

Jul 9 ’13 at 21:04

=================

2 Answers

2

=================

For NIntegrate, you can get a significant speed-up using the method option

Method -> {Automatic, “SymbolicProcessing” -> 0}

If you add this to your calculation, the integrand can be used as written in your question without modification, and it can be dropped right into the Plot as well:

Plot[Re[

NIntegrate[

(Sin[q – x] ((0.476497 –

0.401956 I) – (0.476497 + 0.598044 I) Tanh[

0.933024 (q – x)]) +

Cos[q – x] ((0.401956 +

0.504489 I) + (0.598044 + 0.504489 I) Tanh[

1.06598 (q – x)])) (Sin[

q + x] ((0.476497 –

0.401956 I) – (0.476497 – 0.598044 I) Tanh[

0.933024 (q + x)]) +

Cos[q + x] ((0.401956 –

0.504489 I) + (0.598044 + 0.504489 I) Tanh[

1.06598 (q + x)])),

{x, -10., 10.},

Method -> {Automatic, “SymbolicProcessing” -> 0}]

],

{q, -10., 10.},

PlotPoints -> 10

] // AbsoluteTiming

This timing is for the integration and the Plot, and it’s less than a second.

always something i preach…that’s why i appreciate you write about it (+1)

– Stefan

Jul 9 ’13 at 22:53

I didn’t know about this “SymbolicProcessing” -> 0 trick … works brilliantly for complicated examples where we don’t want symbolic output. Any downsides that we should be aware of?

– wolfies

Jul 10 ’13 at 5:21

Regarding downsides, I’d say you’ll be safe using this option, and I would only leave it out if NIntegrate throws warnings or errors, because then symbolic processing might help massage the integrand to avoid potential numerical problems.

– Jens

Jul 11 ’13 at 3:57

I do not think that you can integrate your function analytically.

However, if you just want to get a plot, the standard way to do so is:

int[qq_?NumberQ] :=

NIntegrate[(Sin[

q – x] ((0.476497 –

0.401956 I) – (0.476497 + 0.598044 I) Tanh[

0.933024 (q – x)]) +

Cos[q – x] ((0.401956 +

0.504489 I) + (0.598044 + 0.504489 I) Tanh[

1.06598 (q – x)])) (Sin[

q + x] ((0.476497 –

0.401956 I) – (0.476497 – 0.598044 I) Tanh[

0.933024 (q + x)]) +

Cos[q + x] ((0.401956 –

0.504489 I) + (0.598044 + 0.504489 I) Tanh[

1.06598 (q + x)])), {x, -10., 10.}];

Plot[Re[int[q]], {q, -10., 10.}, PlotPoints -> 10] // AbsoluteTiming

This needs about 5 seconds.