Re: Question regarding Compile

*To*: mathgroup at smc.vnet.net*Subject*: [mg33752] Re: Question regarding Compile*From*: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>*Date*: Thu, 11 Apr 2002 02:14:06 -0400 (EDT)*Organization*: Universitaet Leipzig*References*: <a8m33c$oaq$1@smc.vnet.net> <a8tt4m$fmg$1@smc.vnet.net> <a90hj5$kfv$1@smc.vnet.net>*Reply-to*: kuska at informatik.uni-leipzig.de*Sender*: owner-wri-mathgroup at wolfram.com

Madhusudan Singh wrote: > > Thanks for your response. > > > > > You can not do *what* ? and what may > > > > f5 = Compile[{{x, _Real}}, Sin[x]] > > > > f[x_] := x^2 > > > > Plot[f[f5[x]], {x, 0, Pi}] > > > > do ? > > This works. I was using a syntax like : > Compile[{x}, expression] as the help stated that _Real was the default. > However, it seems that I need to write it as ; > Compile[{x,_Real},expression]. > > That said, the expressions that I am working with, are : > > integrand := Compile[{{y, _Real}, {x1, _Real}, {x2, _Real}}, f1[pl[argument[y]] + x1, x2, c]]; > > pl[] is an array, f1 and argument are functions (fairly simple functions). > c is a constant. > > answer1[x1_, x2_] := Exp[-2 Integrate[integrand[y, x1, x2], {y, a, b}]]; > > a=0, b~1e-8 > > I get an error : > > CompiledFunction::cfsa: Argument y at position should be a machine-size > real number. You can't symbolical integrate a compiled function ! and you can't pass a symbol like y (without a value) to a compiled function where you declared the argument as Real > > when I try to use answer1 with > > jt3=q NIntegrate[v[x1, 50, 0.2] g3[0.2, x1, 50] partjt3[x1] > answer1[0.0, x1], {x1, 50, maxpl + dummyinfinity}, Method -> MonteCarlo, MaxPoints -> 10000]; > > v, g3, partjt3 are simple functions. > > As you can see, this is quite complicated. However, since a and b are > fixed numbers, and nowhere near machine precision, I do not not understand > the error above. > > This is leading to other errors later. > > Any ideas ? Use NIntegrate[] instead of Integrate[]. There is no need to compile the argument of NIntegrate[] because Mathematica will do it by default. Regards Jens