Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

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


  • Prev by Date: Re: LogLog plot of NDSolve solution
  • Next by Date: Re: Re: Finding the Fourier transform of discrete functions
  • Previous by thread: Re: Compiled function with NIntegrate
  • Next by thread: Re: Compiled function with NIntegrate