MathGroup Archive 2011

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

Search the Archive

Re: Recursive function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg115914] Re: Recursive function
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Tue, 25 Jan 2011 06:31:14 -0500 (EST)

On 25 Jan 2011, at 10:20, StatsMath wrote:

> I am trying to compute the following function:
> 
> x[t] = a * x[t-1] + b * x[t-2]
> x[0] = 1
> x[1] = 1
> 
> For different values of a & b.
> 
> Would like to use Manipulate[] so that I can change the values of a &
> b dynamically and observe what the resulting x[t] values are.
> 
> So wrote the following piece of code:
> 
> Clear["Global`*"]
> x[t_Integer] := x[t] = a x[t - 1] + b x[t - 2]
> x[0] = 1;
> x[1] = 1;
> Manipulate[Map[x[#] &, Range[0, 3]], {a, -1, 1, 0.5}, {b, -1, 1, .5}]
> 
> Got the following results:
> {1, 1, a + b, b + a (a + b)}
> 
> The a & b values are not being propagated so tried the following:
> 
> Clear["Global`*"]
> x[t_Integer] := x[t] = a x[t - 1] + b x[t - 2] /; t > 2
> x[0] = 1;
> x[1] = 1;
> Manipulate[
> Map[(If[# == 0 || # == 1, 1, a x[# - 1] + b x[# - 2]]) &,
>  Range[0, 3]], {a, -1, 1, 0.5}, {b, -1, 1, .5}]
> 
> Got the following result:
> {1, 1, -2, -1 - a - b}
> 
> Finally got it working with the following code:
> 
> Clear["Global`*"]
> Manipulate[
> Map[(If[# == 0 || # == 1, x[#] = 1,
>     x[#] = a x[# - 1] + b x[# - 2]]) &, Range[0, 20]], {a, -1, 1,
>  0.5}, {b, -1, 1, .5}]
> 
> The above code looks ugly, so wondering if there is a different way to
> handle recursive functions.
> 
> Thanks!
> 
> 

One, (rather obvious) thing you can do is:


x[t_Integer, a_, b_] := 
 x[t, a, b] = a x[t - 1, a, b] + b x[t - 2, a, b]

x[0, a_, b_] = 1;

x[1, a_, b_] = 1;

Manipulate[
 Map[x[#, a, b] &, Range[0, 30]], {a, -1, 1, 0.5}, {b, -1, 1, .5}]

Andrzej Kozlowski




  • Prev by Date: Re: Need help with Mathematica
  • Next by Date: Re: Recursive function
  • Previous by thread: Recursive function
  • Next by thread: Re: Recursive function