how do i create a loop that generates random numbers in between .5 and five seconds(.5+4.5*rand), that accumulates up to 60 seconds then resets back to zero seconds for 120 times

I have been trying to do this for two days and have a cluster f of variables which in the end doesn't work. I also need a separate variable to count up all the time passed??
this is what i have it just keeps going up and doesn't reset at 60 seconds
clc
clear
n=7200;
rlight=35;
glight=60-rlight;
x=zeros(n,1);
greencars= zeros(n,1);
inqueue=zeros(n,1);
for i=1:n;
while x<=floor(7140)
x=(.5+4.5*rand)+x;
if x<glight
greencars(i,1)=greencars(i,1)+1;
elseif x>=glight & x<=60
inqueue(i,1)=inqueue(i,1)+1;
end
end
end
gcars=sum(greencars)
inqueue=sum(inqueue)
wait=inqueue;
line=wait-1;
sec_cross=3.2+line*1.4
go=glight-sec_cross
max(x)

9 Comments

If I understand your question right you are going to need two loops
I need to count how many cars that go through the light during green each time, then hold in queue the cars at the red light till the next cycle, i need to do this for two hours with a short code
You need to know the red light timing as well, as during that time you need to accumulate cars. The timing of those queued cars through the next green light would not be random. Additional cars might arrive while previously-queued cars have not yet cleared the green light.
you right! What about how to get the cycle to 60 seconds intervals do you know? This is basically passing 60 then going up till the end of loop
Why are you creating x as a vector, but always using all of it in statements right until the final max(x) ?
At one point you compare x to 7140, and then a couple of statements later you compare it to glight and to 60. Is x intended to be elapsed time since the beginning of the simulation, or time since the start of the last cycle?
I already have the first minute or 60 seconds done and working as it is different then all the other minutes because there is initially no queue... What i am trying to do but do not know how is have a variable that can keep track of the time elapsed to tell the loop to stop, and have another variable keep track of the random numbers that cycle from 0:60. Also solve the problem you pointed out
The random numbers do not cycle from 0:60. The random numbers are 0.5 to 5.
I suggest you use mod()
There is no need to treat the first cycle differently: just initialize the queue to be empty.
I don't think linspace() will have much use in this question.

Sign in to comment.

Answers (1)

Perhaps this helps:
T = 0.5 + rand(1,1e6) * 4.0; % Times
accumT = cumsum(t); % Accumulated times
phaseT = rem(accumT, 60); % Green phases
phases = find([true, diff(phaseT <= 0)); % Indices of green phases
The duration of the red phase does not matter, as far as I can see. It can be added at the phases to the timings without touching the rest of the calculations.

Categories

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

Asked:

on 30 Nov 2012

Community Treasure Hunt

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

Start Hunting!