Anonymous function or for loop?
Afficher commentaires plus anciens
Assume I have a simple electrical function of V=C*sin(t) where C is a constant which varies based on t intervals.
I have used 2 methods to generate the C and by using tic/toc to check, Method 2 seems to be faster than Method 1.
For efficiency and speed wise, should I always use anonymous function instead of for loop? Or is my loop not being coded efficient enough?
t = 0 : 0.1 : 20;
c1 = 53; % (0 <= t <= 10)
c2 = 68; % (10 < t <= 20)
% Method 1 (For Loop)
tic
n = length(t);
a = ones(1,n);
for i = 1:n
if t(i)>=0 && t(i)<=10
A = c1;
else
A = c2;
end
a(i) = A;
end
toc
% Method 2 (Anonymous Function)
tic
C = @(t) (t>=0 & t<=10).*c1 + (t>10).*c2;
c = C(t);
toc
v = sin(t);
v2 = c.*v;
v3 = a.*v;
% Checking
a==c;
v2==v3;
Réponse acceptée
Plus de réponses (2)
The second version is a vectorised version and this will be fast compared to loop.
Your loop is implemented.
You check the finals values uisng:
% Checking
isequal(a,c)
isequal(v2,v3)
1 commentaire
Amanda Liu
le 24 Juin 2021
Sulaymon Eshkabilov
le 24 Juin 2021
Your second method is much faster. Try to avoid for or while loop if feasible.
At the same time, you may improve your 2nd method by computing the values of C directly for the predefined values of t, e.g:
% Method 2 (Anonymous Function)
t1 =0:0.1:10; t2 =10.01:.1:20; % t is split up into two ranges
tic
C =t1*c1 + t2*c2;
toc
v = sin(t);
v2 = C.*v;
v3 = a.*v;
% Checking
a==c;
v2==v3;
1 commentaire
Amanda Liu
le 24 Juin 2021
Modifié(e) : Amanda Liu
le 24 Juin 2021
Catégories
En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!