Re: InverseFunction problem
- To: mathgroup at smc.vnet.net
- Subject: [mg5573] Re: InverseFunction problem
- From: Daniel Lichtblau <danl>
- Date: Fri, 27 Dec 1996 01:58:53 -0500
- Organization: wolfram.com
- Sender: owner-wri-mathgroup at wolfram.com
Pedro Santos wrote: > > Can someone help me with this? > Consider the function f[x_]:=x/(1-x), clearly the inverse of > this function is F[x_]:=x/(1+x). > How do I get a numerical result for F[x] when f[x] is a more > complicated > function? > In the above example F[2.1]=0.677419, but > (-1) > InverseFunction[f[2.1]]//N= (-1.90909) > Am I doing something wrong? I want to make sure I can find a numerical > result before I use this for a more complex task. > Can someone help? > Please reply via e-mail to psantos at sprintmail.com > Thanks in advance. > > pedro santos.. InverseFunction will not find you a symbolic (or numeric) inverse to a function unless explicitly provided for in the StartUp file InverseFunctions.m. If you evaluate InverseFunction[f[2.1]] you just get InverseFunction wrapped around the evaluation of f[2.1]. In[14]:= InverseFunction[f[2.1]] Out[14]= InverseFunction[-1.90909] To find a numeric inverse to f you might proceed as follows. Assume we have an inverse function, call it g. Then f[g[x]] - x is zero. So we can use a root finder to obtain the numerical inverse. In[18]:= g[x_] := FindRoot[f[y]==x, {y,0}]; In[19]:= g[2.1] Out[19]= {y -> 0.677419} This method may have problems for discontinuous or multi-valued functions, or may exhibit convergence problems (heavily influenced by starting point for FindRoot). For your example there is a vertical asymptote at x==1, and you can readily see that a different starting point will be necessary for inverting negative values. In[21]:= g[-2.1] FindRoot::cvnwt: Newton's method failed to converge to the prescribed accuracy after 15 iterations. 14 Out[21]= {y -> -2.37277 10 } In[23]:= gNeg[x_] := FindRoot[f[y]==x, {y,2}] /; x<0; In[24]:= gNeg[-2.1] Out[24]= {y -> 1.90909} In[25]:= (-2.1)/(1-2.1) Out[25]= 1.90909 Daniel Lichtblau Wolfram Research danl at wolfram.com