1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Translating (Transforming) a recursive function

  1. Oct 30, 2011 #1
    Hi,

    I am having trouble understanding how this works.

    I am giving the following:
    y[k+2] - y[k+1] + 0.24y[k] = f[k+2] - 2f[k+1];

    y[-2] = 1, y[-1] = 2;

    f[k] = 0 for k < 0;
    f[k] = k for k >= 0;

    I would like to have a program compute the next values in the sequence, so, I need y[-2] = 1 to become y[1] = 1 and y[-1] = 2 to become y[2] = 1 (so that the array indexing works, e.g., I can access a negative location of an array).

    I let k' = k + 1 so that I'd get:
    y[k'+3] - y[k'+2] + 0.24y[k'+1] = f[k'+3] - 2f[k'+1];
    Then I made:
    f[k] = 0 for k < 0;
    f[k] = k for k >= 0;
    become
    f[k'] = 0 for k' < 3;
    f[k'] = k for k' >= 3;
    and
    y[-2] = 1, y[-1] = 2;
    become
    y[1] = 1, y[2] = 2;

    So now I have:
    y[k'+3] - y[k'+2] + 0.24y[k'+1] = f[k'+3] - 2f[k'+1];
    f[k'] = 0 for k' < 3;
    f[k'] = k for k' >= 3;
    y[1] = 1, y[2] = 2;

    And now when I let k = 0, k[3] gives me the value that k[0] gave me in the old equation, which is exactly what I want.

    My issue is, I don't understand how, mathematically, this works. For example, I don't understand how I went from:
    f[k] = 0 for k < 0;
    f[k] = k for k >= 0;
    to
    f[k'] = 0 for k' < 3;
    f[k'] = k for k' >= 3;

    if k' = k + 1.

    It seems as though I've shifted the equation (y[k+2] - y[k+1] + 0.24y[k] = f[k+2] - 2f[k+1];) over by 1 unit in the positive x direction; however, I've shifted the initial values (y[-2] = 1, y[-1] = 2;) and the f's restrictions (k < 0; and k >= 0) over by 3 units.


    What I'm thinking is:
    The original question should be:
    f[k'] = 0 for k < k[0];
    f[k'] = k for k' >= k[0];
    y[k[0]-2] = 1, y[k[0]-1] = 2;

    What would be the correct, more formal approach to achieving what I want. Also, should the original question be as I've written above?

    I'm pretty sure that the equation, as it's give, only produces the 'correct' answer, when k[0] = -2.

    Thank you for your time, I realise that this question is rather lengthy.
     
    Last edited: Oct 30, 2011
  2. jcsd
  3. Oct 30, 2011 #2

    HallsofIvy

    User Avatar
    Staff Emeritus
    Science Advisor

    You simply shouldn't worry about "f(k) for k< -3" at all. Include, in your program,
    "Double f(Double x)
    {
    Double y= 0;
    if (x>= 0) y= x;
    return y;
    }
    and let the program handle shifts.
     
  4. Oct 30, 2011 #3
    Thanks for the reply. What do you mean by, "let the program handle the shift"?

    Do you mean by changing adding k+n to the original equation so that it works out?

    Also, I know that I didn't say, but I'm actually doing this with MATLAB, I dont think that makes a difference. On know C++ though so I understand your code.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Translating (Transforming) a recursive function
Loading...