Filter löschen
Filter löschen

Building a vector array in for loop from if statements

1 Ansicht (letzte 30 Tage)
Matt Rulli
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!

Akzeptierte Antwort

David Fletcher
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
Matt Rulli
Matt Rulli am 8 Apr. 2018
For the sake of "scientific curiosity", I added the tic/toc operators around the for loop and let it crunch a 12 digit input... It's been at it for a while, but I'll let you know when it's done ;)
David Fletcher
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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by