Series generated by recursive formula

Suppose each value in a series depends on its immediate predecessor, say, x(n) == j*x(n-1) + k*y(n)
What is the most efficient way to express this in MATLAB?

Respuestas (2)

Azzi Abdelmalek
Azzi Abdelmalek el 7 de Feb. de 2013
Editada: Azzi Abdelmalek el 7 de Feb. de 2013
y=0:10 % Example
k=10
x(1)=0
for n=1:10
x(n+1)=j*x(n)+k*y(n+1)
end

4 comentarios

mutt
mutt el 7 de Feb. de 2013
Isn't there a viable matrix notation approach as opposed to a for-loop method?
Azzi Abdelmalek
Azzi Abdelmalek el 7 de Feb. de 2013
Before calculating x(2) you need to calculate x(1), and so on. I don't see how is it possible to do it without a loop, unless you resolve the problem analytically, using z-transform
No. It would be possible only if you could transform your equation such that x(n) does NOT belong on its predecessor.
For large n the computation will be faster if you preallocate x such as
x = nan(1, Nmax);
for x = 1:Nmax
:
end
José-Luis
José-Luis el 7 de Feb. de 2013
You could always write a recursive function. Having said that, I have some gripes against those as I found them difficult to understand and generally not worth the effort.

Iniciar sesión para comentar.

José-Luis
José-Luis el 7 de Feb. de 2013
Editada: José-Luis el 7 de Feb. de 2013
You could always write a recursive function, but I would much rather use the for loop as it is much simpler to understand, IMO, and probably faster too.
Start by defining an anonymous function:
myFun = @(x) 4.*x + sin(x); %the function you want to apply to the previous value
And placing the following function in your path:
function [your_mat] = someFunction(n,myFun,start_val)
temp_val = start_val;
your_mat = recfun(n,temp_val);
function [temp_val] = recfun(n,temp_val) %here be recursion
if n == 0
temp_val = [];
else
temp_val = [temp_val myFun( recfun( n-1 , temp_val(end) ) ) ];
end
end
end
Where n is the number of evaluations and start_val is your starting value. And you could run it from the command line as follows:
your_mat = someFunction(10,myFun,5); %10 reps, starting value of 5
your_mat will be a matrix where every value is dependent on the previous one. Note that you would still need to modify the code to make it do exactly what you want.

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 7 de Feb. de 2013

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by