Why the matlab editor (Code Analyser) is not warning about changing size by a variable within a loop

2 views (last 30 days)
In the 2nd example of the following for-loop the variable A definitely changes its size as it does in the 1st example. However, in one case the editor throws a warning message and in the second case it does not. Why?
A = [];
N = 100;
% 1st example
for k = 1:N
M = 10;
for n = M:-1:1
B(n) = n;
end
A = [A,B]; % Warning: Variable appears to change size on every loop iteration
end
% 2nd example
for k = 1:N
M = 10;
for n = M:-1:1
B(n) = n;
end
A(end+1:end+length(B)) = B; % No warning here and faster
end
If I write in simpler way
A = 1; % or A=[];
for k = 1:N
A(end+1:end+2) = [1,1]; % No warning.
end
And, by the way
A = 1; % or A = [];
for k = 1:N
A = [A,[]]; % Warning: Variable 'A' appears to change size on every loop iteration. Consider preallocating for speed
end
That means Code Analyser is not analysing much here
  3 Comments
G A
G A on 30 Dec 2021
For cell array, the result is opposit
timeit(@fun4);timeit(@fun5);% warm up online run tool
timeit(@fun4),timeit(@fun5) % actual timing runs
ans = 0.0016
ans = 0.0025
function A=fun4
A = {};
for k = 1:1000
for n = 100:-1:1
B(n) = n;
end
A = {A,B};
end
end
function A=fun5
A = {};
for k = 1:1000
for n = 100:-1:1
B(n) = n;
end
A(end+1) = {B};
end
end

Sign in to comment.

Accepted Answer

Cris LaPierre
Cris LaPierre on 30 Dec 2021
For the same reason you get no warning about B growing inside a loop - MATLAB doesn't know what the index will be until the code is run, so it can't determine with certainty that the variable will be changing size every loop.
  3 Comments

Sign in to comment.

More Answers (0)

Categories

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

Community Treasure Hunt

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

Start Hunting!