Re: Re: restricting interpolating functions to be positive

*To*: mathgroup at smc.vnet.net*Subject*: [mg106477] Re: [mg106455] Re: restricting interpolating functions to be positive*From*: DrMajorBob <btreat1 at austin.rr.com>*Date*: Thu, 14 Jan 2010 05:46:58 -0500 (EST)*References*: <higdjs$kfi$1@smc.vnet.net> <201001131058.FAA06854@smc.vnet.net>*Reply-to*: drmajorbob at yahoo.com

For some data, that works pretty well; for other samples it has HUGE peaks, reaching far above any of the data: data = Sort at RandomReal[{0.1, 1}, {20, 2}]; {min, max} = data[[{1, -1}, 1]] f = Interpolation@data; logdata = data /. {x_, y_} -> {x, Log[y]}; interp = Exp[Interpolation[logdata]@#] &; Show[Plot[Evaluate@Through[{f, interp}@x], {x, min, max}, PlotRange -> All]] (run it several times) The same thing happens here, but not as dramatically: data = Sort at RandomReal[{0.1, 1}, {20, 2}]; {min, max} = data[[{1, -1}, 1]] f = Interpolation@data; logdata = data /. {x_, y_} -> {x, Sqrt[y]}; interp = (Interpolation[logdata]@#)^2 &; Show[Plot[Evaluate@Through[{f, interp}@x], {x, min, max}, PlotRange -> All]] Bobby On Wed, 13 Jan 2010 04:58:01 -0600, Noqsi <jpd at noqsi.com> wrote: > On Jan 11, 4:52 pm, dantimatter <goo... at dantimatter.com> wrote: >> Hi All, >> >> I would like to construct an interpolation that can only take on >> positive values. The data that I'm trying to interpolate is all >> positive, but for some reason the Interpolation[] function 'wants' to >> connect the dots by dipping below zero. Is there a way to force >> positivity? Or should I simply adjust the InterpolationOrder until it >> works? > > One way is to transform the data. Choose a positive real function f, > apply its inverse to the data. Tranform the interpolation back using > f. > > Exp[] often is a good choice for f. Using Valeri's example data: > > data = {{0, 2}, {1, 1}, {2, .2}, {3, .01}, {4, 1}, {5, 0.9}, {6, > 0.05}, {7, 0.1}, {8, 1}} > logdata = data /. {x_, y_} -> {x, Log[y]} > interp[x_] = Exp[Interpolation[logdata][x]] > > If you plot interp[x], you'll see that it avoids zero. > -- DrMajorBob at yahoo.com

**References**:**Re: restricting interpolating functions to be positive***From:*Noqsi <jpd@noqsi.com>