Re: Compiled function with NIntegrate
- To: mathgroup at smc.vnet.net
- Subject: [mg52581] Re: Compiled function with NIntegrate
- From: "Jens-Peer Kuska" <kuska at informatik.uni-leipzig.de>
- Date: Fri, 3 Dec 2004 03:53:35 -0500 (EST)
- Organization: Uni Leipzig
- References: <comgvp$9hg$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi, you must restict the arguments of your function by a pattern. That mean that you have to use a normal (uncompiled) function that call the compiled function when the arguemtn is numeric fc=Compile[{{x,_Real}},Sin[x]] func[x_?NumericQ]:=fc[x] and NIntegrate[func[x], {x, 0, Pi}] will work as expected. Regards Jens "Alexei Akolzin" <akolzine at uiuc.edu> schrieb im Newsbeitrag news:comgvp$9hg$1 at smc.vnet.net... > 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. >