MATLAB Answers

luca
0

Create a for cycle over an array

Asked by luca
on 4 Sep 2019
Latest activity Edited by Jan
on 4 Sep 2019
Accepted Answer by Jan
In my case I have X different job with Y different duration
D = [2 3 4 4 5 6 7 3 ];
so job X=1 will last Y=2.
I need to write a code that give me the following result:
tin1= 0 , tfin1=2, tin2= 2 , tfin2=2+3=5, tin3= 5 , tfin3=5+4=9, tin4=9 , tfin4=9+4=13........ So "tinx" means the inital time of job x, while "tfinx" means the final time of job x. if job one finish at 2, the job two will finish at 2 plus the duration of the job 2 (3) obtaining 5, and so on.
I want to write a code that is able to generate all this value
Does someone help me? the length of D should be variable so I would like to obtain a code that is independent from its length

  2 Comments

Jan
on 4 Sep 2019
I've cleaned the tags. It is not useful to use a pile of tags, which have no relation to your problem.
Steven Lord
on 4 Sep 2019
I'm trimming more of the tags.

Sign in to comment.

Products


Release

R2019a

3 Answers

Jan
Answer by Jan
on 4 Sep 2019
Edited by Jan
on 4 Sep 2019
 Accepted Answer

Do not create a bunch of variables with an index hidden in the names: See TUTORIAL: Why and how to avoid Eval
I assume all you need is:
D = [2 3 4 4 5 6 7 3 ]
T = cumsum([0, D])
Now e.g. T(1) and T(2) contain everything you want. This is much better than tin(1) and tfin(1). If you really need 2 variables:
Tini = T(1:end-1);
Tfin = T(2:end);

  5 Comments

Jan
on 4 Sep 2019
Len = size(D, 2);
s = 0;
for k = 1:Len
tini(k) = s;
tfin(k) = D(k) + s;
s = tfin(k);
end
Again: Do not hide indices in the names of the variables, but use indices for this job.
Or:
Len = numel(D);
tini = zeros(1, Len); % Pre-allocation
tfin = zeros(1, Len);
s = 0;
for k = 1:Len
tini(k) = s;
s = s + D(k);
tfin(k) = s;
end
luca
on 4 Sep 2019
Cause this is a general case, then I have to implement the for loop that I've asked for in a more complicated case
luca
on 4 Sep 2019
thanks !

Sign in to comment.


Answer by darova
on 4 Sep 2019

It is a job for cumsum() function:
D = [2 3 4 4 5 6 7 3 ];
tin1 = [0 2 5 9 13 18 24 31];
tin2 = [2 5 9 13 18 24 31 34];]

  0 Comments

Sign in to comment.


Answer by Fabio Freschi on 4 Sep 2019

Try this
>> tfin = cumsum(D)
tfin =
2 5 9 13 18 24 31 34
>> tin = [0 tfin(1:end-1)]
tin =
0 2 5 9 13 18 24 31

  0 Comments

Sign in to comment.