Re: Problems with FindRoot and recursive functions

*To*: mathgroup at smc.vnet.net*Subject*: [mg89695] Re: Problems with FindRoot and recursive functions*From*: "Daniel Kuang Chen Liu" <dkliu1 at student.monash.edu.au>*Date*: Wed, 18 Jun 2008 04:25:03 -0400 (EDT)*References*: <g35g0m$9bv$1@smc.vnet.net> <48565C59.1040200@gmail.com>

To Jean-Marc and dh, Forcing the use of numeric arguments still doesn't seem to work. The correct answer is {t -> 0.5} but we get {t -> 0} when we make the x1[t_?NumericQ] modification. NumericQ appears to stop the recursion process at {t,1}. Thank you for the help. Daniel Liu On Mon, Jun 16, 2008 at 10:28 PM, Jean-Marc Gulliet < jeanmarc.gulliet at gmail.com> wrote: > Daniel Kuang Chen Liu wrote: > > I have a recursive function of the form >> >> x1[t_] := If[t < 0, {t, 1}, 0.5 + x1[t - 1]] >>>> >>> >> which returns a list of length 2, and the first element has a root at >> t=0.5 >> >>> In[3]:= x1[0.5] >>>> Out[3]= {0., 1.5} >>>> >>> >> I want to use FindRoot to determine t0 such that x1[t0][[1]] == 0, so I >> use >> the following code >> >> FindRoot[x1[t][[1]] == 0, {t, 0.5}] >>>> >>> >> to which Mathematica complains >> >> During evaluation of In[6]:= FindRoot::nlnum: The function value >> {False} is not a list of numbers with dimensions {1} at {t} = {0.5}. >> >> It would much appreciated if someone could tell me what is wrong with the >> code. >> > > Hi Daniel, > > You just have to ensure that the function x1 is called for numeric values > only [1]. For instance, > > x1[t_?NumericQ] := If[t < 0, {t, 1}, 0.5 + x1[t - 1]] > FindRoot[x1[t][[1]] == 0, {t, 0.5}] > > {t -> 0.} > > Regards, > - Jean-Marc > > [1] "How do I write a function which evaluates only when the argument is a > number?" > http://support.wolfram.com/mathematica/kernel/features/evalwhennumber.html > >