Recursive vector operation without for loops
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Sometimes one want to create a vector from some recursive expression, for example when we have fibonacci:
x(0)=0, x(1)=1, x(i)=x(i-1)+x(i-2)
Is there a function in matlab which creates arrays recursively, for example:
fib = recursivevector(start=[0,1], expr=@(i,x) x(1)+x(2), len=20)
Or, a bit more complicated, we already have some vector and want to change it recursively, as is done in a exponential smoothing filter:
x2(1) = x(1), x2(i) = a*x(i) + (1-a)*x2(i-1)
Which we could then execute as:
denoised = recursivevector(start=[noised(1)], expr=@(i,x) a*x(1)+(1-a)*noised(2), len=length(noised))
In for-loops this would go like this:
function y = exponentialdenoise(x,a)
y=zeros(size(x));
y(1)=x(1);
for i=2:length(x)
y(i)=a*x(i)+(1-a)*y(i-1);
end
end
I strongly dislike the for-loops ;) of course and prefer a version without them.
0 comentarios
Respuesta aceptada
Azzi Abdelmalek
el 11 de Jul. de 2013
Editada: Azzi Abdelmalek
el 11 de Jul. de 2013
Your equation can be written as:
%x(i)-x(i-1)-x(i-2)=u(i) with u(i)=0
D=[1 -1 -1];
N=1
y=filter(N,D,zeros(1,10),[0 1])
4 comentarios
Más respuestas (1)
Jan
el 11 de Jul. de 2013
Why do you dislike loops? They solve problems efficiently. And yes, sometimes there are even faster methods.
function y = exponentialdenoise(x,a)
y = zeros(size(x));
y(1) = x(1);
n = length(x);
y(2:n) = a * x(2:n) - (1-a) * x(1:n-1);
end
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!