MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Problems with FindRoot and recursive functions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg89680] Re: Problems with FindRoot and recursive functions
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Tue, 17 Jun 2008 00:40:17 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <g35g0m$9bv$1@smc.vnet.net>

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



  • Prev by Date: Re: Nested Grids
  • Next by Date: Re: citing mathematica
  • Previous by thread: Re: Problems with FindRoot and recursive functions
  • Next by thread: Re: Problems with FindRoot and recursive functions