Re: Numerical integration and list of points
- To: mathgroup at smc.vnet.net
- Subject: [mg87702] Re: Numerical integration and list of points
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Wed, 16 Apr 2008 04:59:02 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <ftvd4f$d89$1@smc.vnet.net> <fu1u4g$omu$1@smc.vnet.net>
guerom00 wrote:
> Thank you for your answers. So this IS indeed the right method.
> After some tests, it's just that my list contains 20'000 elements and
> the integration takes forever to finish...
> I thought Mathematica crashed because I thought it was a rather simple
> thing to do but it turns out I would need to run this integration on a
> powerful cluster or something :)
Before going to the extremes, like using a cluster, you should try
*Integrate[]* rather than *NIntegrate[]*. The symbolic integration tool
*Integrate[]* works very well over *InterpolatingFunction* object and it
is way faster (anything between about 40 and 100 times faster on my
system). For instance, it can integrate over 100,000 points in 3/4th of
a second.
In[1]:= data = RandomReal[{-1000, 1000}, {10, 2}];
f = Interpolation[data];
Timing@Integrate[f[x], {x, f[[1, 1, 1]], f[[1, 1, 2]]}]
Timing@NIntegrate[f[x], {x, f[[1, 1, 1]], f[[1, 1, 2]]}]
%[[1]]/%%[[1]]
Out[3]= {0.000163, -867887.}
Out[4]= {0.017414, -867887.}
Out[5]= 106.834
In[6]:= data = RandomReal[{-1000, 1000}, {100000, 2}];
f = Interpolation[data];
Timing@Integrate[f[x], {x, f[[1, 1, 1]], f[[1, 1, 2]]}]
Out[8]= {0.79024, -3.53364*10^7}
In[9]:= $Version
Out[9]= "6.0 for Mac OS X x86 (64-bit) (February 7, 2008)"
Regards,
-- Jean-Marc