Building a vector array in for loop from if statements

2 views (last 30 days)
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!

Accepted Answer

David Fletcher
David Fletcher on 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 Comments
Matt Rulli
Matt Rulli on 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 on 8 Apr 2018
Edited: David Fletcher on 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

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!