Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Is it possible to make NIntegrate faster?

38 views
Skip to first unread message

Leo Alekseyev

unread,
Nov 23, 2009, 6:51:06 AM11/23/09
to
Dear Mathgroup,

Recently I have been using NIntegrate fairly extensively. I am
dealing with an oscillatory integral that has a singularity.
NIntegrate is able to treat it reasonably well -- the only default I
had to change was increasing MaxRecursion. However, it is slow. 10
points of my integrand take about 40 seconds to evaluate. After I
ported my code to another system, this same integral took about a second using
the Gauss-Kronrod method (quadgk in the other system). Furthermore, by
increasing the absolute and relative tolerance values, I could improve
the speed without losing too much precision, so currently the
integrals evaluate in 0.4 seconds.

I have been playing with various NIntegrate parameters to try to
improve the speed, to no effect. My integrands are straightforward
(although long) algebraic expressions involving a few Bessel functions
and exponentials, wrapped inside a Module; all subexpressions use N[]
so that nothing should be symbolic... Ideally I hoped to find some
sort of a speed/accuracy tradeoff, but that hasn't happened.

I read the numerical integration tutorial in the docs, but am finding
it hard to figure out how to improve the efficiency of my integration.
I would expect Mathematica to get to at least within an order of
magnitude of the other system using the same integration strategy. The current
performance isn't satisfactory -- but neither is the solution of
porting perfectly good Mathematica code to the other system...

I would much appreciate any suggestions.

Thanks,
--Leo

michael.p...@googlemail.com

unread,
Nov 24, 2009, 6:02:58 AM11/24/09
to
On 23 Nov, 11:51, Leo Alekseyev <dnqu...@gmail.com> wrote:
> Dear Mathgroup,
>
> Recently I have been using NIntegrate fairly extensively. I am
> dealing with an oscillatory integral that has a singularity.
> NIntegrate is able to treat it reasonably well -- the only default I
> had to change was increasing MaxRecursion. However, it is slow. 10
> points of my integrand take about 40 seconds to evaluate. After I
> ported my code to another system, this same integral took about a second =

using
> the Gauss-Kronrod method (quadgk in the other system). Furthermore, by
> increasing the absolute and relative tolerance values, I could improve
> the speed without losing too much precision, so currently the
> integrals evaluate in 0.4 seconds.
>
> I have been playing with various NIntegrate parameters to try to
> improve the speed, to no effect. My integrands are straightforward
> (although long) algebraic expressions involving a few Bessel functions
> and exponentials, wrapped inside a Module; all subexpressions use N[]
> so that nothing should be symbolic... Ideally I hoped to find some
> sort of a speed/accuracy tradeoff, but that hasn't happened.
>
> I read the numerical integration tutorial in the docs, but am finding
> it hard to figure out how to improve the efficiency of my integration.
> I would expect Mathematica to get to at least within an order of
> magnitude of the other system using the same integration strategy. The=

current
> performance isn't satisfactory -- but neither is the solution of
> porting perfectly good Mathematica code to the other system...
>
> I would much appreciate any suggestions.
>
> Thanks,
> --Leo

Hi

It's difficult to know what to suggest without seeing the Integrals.

Best Wishes,
Mike
www.walkingrandomly.com

0 new messages