MATLAB Answers

How do I properly append to an array within a loop?

964 views (last 30 days)
Loren Graf
Loren Graf on 16 Oct 2017
Commented: Loren Graf on 17 Oct 2017
I am running a loop of 300 iterations. Within the loop, I have a logic statement as follows.
for i = 1:300
if arrival <1
Ai = Ai + ia_time(i);
arrival = ia_time(i-1);
Ai = ia_time(i) + arrival;
disp(Ai); % <-- displays all values
disp(Ai); % <-- only displays the final value from the loop
While the loop is open, 'disp(Ai)' prints the values correctly. However, if I attempt to use or print the variable after the final closing 'end', I only get the one final value of Ai. What I would like is an array of all values that I can reuse for future operations later in the code. I feel like it is not creating the array properly, and perhaps I need to assign the value of Ai to another variable as the loop iterates, but I can't seem to make that work either.
I know this should be simple, but I am beating my newbie head on the desk.

Answers (2)

Cedric Wannaz
Cedric Wannaz on 16 Oct 2017
Edited: Cedric Wannaz on 16 Oct 2017
You shouldn't name your variable Ai if i is meant to be the index. Assuming that A is already defined and that, at loop index i, you want to alter its component at position/index i:
A(i) = A(i) + ia_time(i) ;
which is: add element i of vector ia_time to element i of A, and store the result back in A at position i.


Guillaume on 16 Oct 2017
Well, as we've both shown it's so easy easy to do in matlab as well:
A = cumsum(ia_time);
Note that
if i-1 < 1
is needlessly complicated
if i < 2
or even simpler
if i == 1
Similarly, what is the point of + 0 ?
See my answer for the proper way to write it as a loop. But use cumsum
Cedric Wannaz
Cedric Wannaz on 16 Oct 2017
Looking at your PDF, those i mean "associated with the index". Try to precompute A, preallocate the others, initialize all, and loop the way Guillaume proposes:
ia_time = importdata('Data1.txt');
svc_time = importdata('Data2.txt');
A = cumsum( ia_time ) ;
T = zeros( size( A )) ;
WQ = zeros( size( A )) ;
D = zeros( size( A )) ;
T(1) = .. ?
WQ(1) = .. ?
D(1) = .. ?
for i = 2 : length( A )
T(i) = ... ?
WQ(i) = ... ?
D(i) = ... ?
Loren Graf
Loren Graf on 17 Oct 2017
Thank you for your input earlier. Unfortunately, I had to go to work. When I looked at it later, I noticed several parts that made me slap myself in the forehead. Indeed, I over-complicated some of the inputs. It is amazing how a tired brain sometimes cannot make sense of easy issues.

Sign in to comment.

Guillaume on 16 Oct 2017
If all you're trying to do is accumulate the values of ia_time, then
A = cumsum(ia_time);
If you really wanted to use a loop for that:
A = zeros(size(ia_time));
A(1) = ia_time(1);
for i = 2:numel(ia_time) %never hardcode end values, ask for what it actually is
A(i) = A(i-1) + ia_time(i);


Sign in to comment.

Community Treasure Hunt

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

Start Hunting!