a question on for loop statement
1 view (last 30 days)
Show older comments
Dear all,
I have this for loop
T=1000;
k=0.1;
u=rand(T,1);
a = zeros(T,1);
a(1) =u(1)+ k*0.01;
for t=2:T
a(t) = u(t,1) + k*a(t-1);
end
Is there a faster way of obtaining a? Maybe if I avoid loop?
4 Comments
Luna
on 16 May 2019
I agree with Adam I have tried with both T = 1000 and T = 1000000.
The time perfomances are below:
T = 1000 -> Elapsed time is 0.051244 seconds.
T = 1000000 -> Elapsed time is 0.073614 seconds.
The for loop is already as fast as it could be and the simplest solution.
Answers (1)
Jos (10584)
on 16 May 2019
This is filtering.
T=10; % smaller example
k=0.1;
u=rand(T,1);
% your loop -> a
a = zeros(T,1);
a(1) =u(1)+ k*0.01; % i do not get this addition ...
for t=2:T
a(t) = u(t,1) + k*a(t-1);
end
% filtering -> aa
uu = u ;
uu(1) = uu(1) + k*0.01 ; % implement offset?
aa = filter(1, [1 -k], uu) ;
% do they produce the same result?
isequal(a, aa) % YES
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!