Anonymous function or for loop?
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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;
0 Commenti
Risposta accettata
KSSV
il 24 Giu 2021
Off course, you can achieve the same without using anonymous function.
t = 0 : 0.1 : 20;
c1 = 53; % (0 <= t <= 10)
c2 = 68; % (10 < t <= 20)
tic
a = c1*ones(size(t)) ;
a(t>10) = c2 ;
toc
% Method 2 (Anonymous Function)
tic
C = @(t) (t>=0 & t<=10).*c1 + (t>10).*c2;
c = C(t);
toc
v = sin(t);
v3 = a.*v;
v4 = a.*v ;
% Checking
isequal(a,c)
isequal(v3,v4)
Più risposte (2)
Sulaymon Eshkabilov
il 24 Giu 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 Commento
Vedere anche
Categorie
Scopri di più su Loops and Conditional Statements in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!