Re: Inverse of Interpolating Function?

*To*: mathgroup at smc.vnet.net*Subject*: [mg120404] Re: Inverse of Interpolating Function?*From*: Oliver Ruebenkoenig <ruebenko at wolfram.com>*Date*: Thu, 21 Jul 2011 07:23:55 -0400 (EDT)*References*: <201107210945.FAA06489@smc.vnet.net>

On Thu, 21 Jul 2011, Gary Wardall wrote: > On Jul 20, 5:34=C2 am, gonzorascal <dj... at duke.edu> wrote: >> Hello All, >> >> I am working with an Interpolating Function of an oscillating solution (time series) to a differential equation. I am trying to find the period and pulse width of the oscillation. To do this I would like to have an inverse of my function y[t] (so I would have t[y]). I realize this function would be multivalued (that's what I want to find the period). =C2 I am not having success using Mathematica's InverseFunction[] or Reduce[] commands. Does anyone have any experience or suggestions with this sort of thing (either finding Inverse Interpolating Functions or another method for period and pulse width)? Thank you. >> >> -GR > > gonzorascal, > > First make sure the function you wish to have an inverse function is a > function that has an inverse function. A quick visual test is the > Horizontal Test for Inverse Functions. If any horizontal line > intersects the graph twice or more then the inverse is NOT an inverse > function. Graph the function you wish to create an inverse function > for. If it fails the horizontal test you may have ti restrict your > function like is done in Trigonometry. If it passes try something like > in my example. > > > points = {{0, -1}, {1, 1}, {2, 3}, {3, 4}, {4, 6}, {5, 10}};=E2=80=A8ifun= > Interpolation[points] > Does the function pass the Horizontal Test? > > Plot[ifun[x], {x, 0, 5}] > > It does. Define: > > invifun[x_] := FindRoot[ifun[y] == x, {y, 0, 5}][[1]][[2]] > > Note that: > > ifun[invifun[4]] > > is 4. > > and > > invifun[ifun[3]] > > is 3. > > and look at the sketch. > > Plot[{invifun[x], ifun[x], x}, {x, 0, 5}, PlotRange -> {0, 5}, > AspectRatio -> Automatic] > > We have an inverse function. > > I hope this will help. > > Good Luck > > Gary Wardall > > You could also use NDSolve for that - that advantage would be that it will generate an interpolation function init = x /. FindRoot[ifun[x] == 0, {x, 0, 1}] inf = t /. First[NDSolve[{t'[a] == 1/(ifun'[t[a]]), t[0] == init}, t, {a, 0, 5}]] Plot[{inf[x], ifun[x], x}, {x, 0, 5}, PlotRange -> {0, 5}, AspectRatio -> Automatic] Oliver

**References**:**Re: Inverse of Interpolating Function?***From:*Gary Wardall <gwardall@gmail.com>