Building a vector array in for loop from if statements
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Matt Rulli
am 8 Apr. 2018
Bearbeitet: David Fletcher
am 8 Apr. 2018
I'm working on an assignment requiring a function to build a vector containing all of the factors of an input value. I have the algorithm to find the factors, but how do I get them to hold in a vector as the loop runs?
function factors = compute_factors(f)
%COMPUTE_FACTORS(N) Generates array of all factors of a input f.
% Evaluates if input f is a scalar and a positive whole number using logical
% arguments, then generates a vector of all the factors of f.
if f<0
error('f must be a postive whole number');
elseif isscalar(f) ~= 1
error('f must be a scalar')
end
for vec = 1:f
if rem(f,vec)==0
factors = [vec]
end
end
I know that I need to use the zeros function to generate a vector, but if I don't know how many inputs there will be without running the loop, how can I define it beforehand? Any help is greatly appreciated!
0 Kommentare
Akzeptierte Antwort
David Fletcher
am 8 Apr. 2018
You can build the output array dynamically. This is generally frowned upon, but unless the arrays are large it's unlikely to make any noticeable difference to the speed of your code.
function factors = compute_factors(f)
%COMPUTE_FACTORS(N) Generates array of all factors of a input f.
% Evaluates if input f is a scalar and a positive whole number using logical
% arguments, then generates a vector of all the factors of f.
if f<0
error('f must be a postive whole number');
elseif isscalar(f) ~= 1
error('f must be a scalar')
end
factors=[];
for vec = 1:f
if rem(f,vec)==0
factors = [factors vec]
end
end
4 Kommentare
David Fletcher
am 8 Apr. 2018
Bearbeitet: David Fletcher
am 8 Apr. 2018
You piqued my curiosity. I just tried it with an 11 digit number (both with and without preallocation) and the interesting thing is that both routines took the same amount of time (Just over 158 seconds). Seems that Matlab probably already has some internal optimization that it applies when dynamically growing arrays. Though, in this case the arrays involved are fairly small - it would probably be a bit different if the arrays became large
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!