Re: Compiled function with NIntegrate
- To: mathgroup at smc.vnet.net
- Subject: [mg52596] Re: Compiled function with NIntegrate
- From: Peter Pein <petsie at arcor.de>
- Date: Fri, 3 Dec 2004 03:54:17 -0500 (EST)
- References: <comgvp$9hg$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Alexei Akolzin wrote: > Hello, > > I wonder why NIntegrate gives the following error with compiled functions: > > In: f = Sin[x]; > In: fc = Compile[{x},f]; > > In: fc[1] > Out: 0.841471 > > In: NIntegrate[fc[x], {x, 0, 1}] > Out: CompiledFunction::"cfsa" : Argument x at position 1 should be a > machine-size real number. > or > Out: CompiledFunction::cfsa: Argument NIntegrate`Private`XX7 at position 1 > should be a machine-size real number. > > It is true that NIntegrate compiles functions by default. This was one of > the suggestions found in the archive if not to deal, but to get around the > problem. However, my particular function f takes around 10 minutes to > evaluate for a single argument value. I never had patience to wait long > enough (hours) for a result from NIntegrate to appear, with "Compiled" > option set or not. > > To speed things up I used optimization package "optimize.m": > > In: fc = Compile[{x},Optimize[f]]. > > This helped a lot, with fc[1] ("1", for example) being evaluated in a matter > of mere seconds. But the problem now is that NIntegrate does not want to > work with my function. > > So, the question is: is there any way to get my compiled function, as it is, > into NIntegrate? > > Thanks, > Alexei. > In[1]:= f = Sin[x]; In[2]:= (* see _documentation_ *) Attributes[Compile] Out[2]= {HoldAll, Protected} (* ^^^^^^^ *) In[3]:= fc = Compile[{x}, Evaluate[f]] Out[3]= CompiledFunction[{x}, Sin[x], "-CompiledCode-"] In[4]:= fc[1] Out[4]= 0.841471 In[5]:= NIntegrate[fc[x], {x, 0, \[Pi]}] Out[5]= 2. -- Peter Pein 10245 Berlin