Building a vector array in for loop from if statements
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Matt Rulli
el 8 de Abr. de 2018
Editada: David Fletcher
el 8 de Abr. de 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 comentarios
Respuesta aceptada
David Fletcher
el 8 de Abr. de 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 comentarios
David Fletcher
el 8 de Abr. de 2018
Editada: David Fletcher
el 8 de Abr. de 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
Más respuestas (0)
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!