Translating (Transforming) a recursive function

Click For Summary
SUMMARY

This discussion focuses on transforming a recursive function for sequence computation, specifically using the equation y[k+2] - y[k+1] + 0.24y[k] = f[k+2] - 2f[k+1]. The user seeks to adjust the indexing of the sequence to accommodate negative indices, transitioning from y[-2] = 1 and y[-1] = 2 to y[1] = 1 and y[2] = 2. The transformation involves redefining the function f[k] to f[k'] with k' = k + 1, resulting in a shift of the function's restrictions. The user is looking for a formal mathematical explanation of this transformation and its implications in MATLAB programming.

PREREQUISITES
  • Understanding of recursive functions and sequences
  • Familiarity with MATLAB programming
  • Knowledge of function definitions and indexing in programming
  • Basic concepts of mathematical transformations and shifts
NEXT STEPS
  • Study MATLAB's array indexing and how to handle negative indices
  • Learn about recursive function transformations in mathematical programming
  • Explore the implications of shifting functions and their domains
  • Investigate the use of conditional statements in MATLAB for function definitions
USEFUL FOR

Mathematicians, software developers, and engineers working with recursive functions in MATLAB, particularly those needing to manipulate sequence indices for computational purposes.

fred4321
Messages
4
Reaction score
0
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 realize that this question is rather lengthy.
 
Last edited:
Physics news on Phys.org
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.
 
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 don't think that makes a difference. On know C++ though so I understand your code.
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
5K
  • · Replies 2 ·
Replies
2
Views
1K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
683
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 7 ·
Replies
7
Views
5K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 3 ·
Replies
3
Views
2K