MathGroup Archive 2011

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

Search the Archive

Re: Another basic (?) question about RecurrenceTable and replacement

  • To: mathgroup at smc.vnet.net
  • Subject: [mg122429] Re: Another basic (?) question about RecurrenceTable and replacement
  • From: Daniel Lichtblau <danl at wolfram.com>
  • Date: Fri, 28 Oct 2011 05:35:32 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com

On 10/26/2011 04:39 PM, victorphy wrote:
> I kind of got confused with my notations : I want to solve
>
> x_0 = -2, y_0 = 0
>
> (x_{n+1},y_{n+1}) = sol(n/10,x_n,y_n) for n = 1..10
>
> where *sol* cannot be defined explicitely but is given by something
> like
>
> f[x_, a_] := -(x - a)^3 + (x - a)
> sol[a_?NumericQ, b_?NumericQ,c_?NumericQ] := FindRoot[{f[x, a], x +y},
> {x, b}, {y, c}]

Here is something that works, although it is hardly elegant. I made a 
few changes so that the functions would be not quite so simple. ALso 
moved the y[0] value to evade a singular Jacobian for the modified 
functions.

f[x_, a_] := -(x - a)^3 + Sin[(x - a)]

sol[a_?NumericQ, b_?NumericQ, c_?NumericQ] :=
  sol[a, b, c] = {x, y} /.
    FindRoot[{f[x, a], x + Cos[y]}, {x, b}, {y, c}]

In[123]:= first[{x_?NumericQ, y_?NumericQ}] := x
last[{x_?NumericQ, y_?NumericQ}] := y

In[125]:= RecurrenceTable[{x[n + 1] == first[sol[n/10, x[n], y[n]]],
   y[n + 1] == last[sol[n/10, x[n], y[n]]], x[0] == -2, y[0] == 1}, {x,
    y}, {n, 0, 10}, DependentVariables -> {x, y}]

Out[125]= {{-2, 1}, {-0.928626, 0.380103}, {-0.828626,
   0.594147}, {-0.728626, 0.754482}, {-0.628626, 0.891011}, {-0.528626,
    1.01381}, {-0.428626, 1.12782}, {-0.328626, 1.23595}, {-0.228626,
   1.34013}, {-0.128626, 1.44181}, {-0.0286263, 1.54217}}

Alternatively this might be constructed via a NestList.

In[167]:=
recur[n_] :=
  Module[{j = -1},
   NestList[(j++; sol[j/10, #[[1]], #[[2]]]) &, {-2, 1}, n]]

In[168]:= recur[10]

Out[168]= {{-2, 1}, {-0.928626, 0.380103}, {-0.828626,
   0.594147}, {-0.728626, 0.754482}, {-0.628626, 0.891011}, {-0.528626,
    1.01381}, {-0.428626, 1.12782}, {-0.328626, 1.23595}, {-0.228626,
   1.34013}, {-0.128626, 1.44181}, {-0.0286263, 1.54217}}

The latter method has the advantage of not needing to store values for 
sol[]. Strictly speaking that's not necessary for the former either, but 
it avoids a recomputation in RecurrenceTable.

Daniel Lichtblau
Wolfram Research





  • Prev by Date: Re: Error on importing previously saved data file: Get::bigfile
  • Next by Date: Re: Multiple integration: bug?
  • Previous by thread: Re: Another basic (?) question about RecurrenceTable and replacement
  • Next by thread: bug ?