フィルターのクリア

update values ​​in a for loop except one

3 ビュー (過去 30 日間)
Marco Carapellese
Marco Carapellese 2022 年 2 月 22 日
コメント済み: Marco Carapellese 2022 年 2 月 22 日
hi everyone, i have the following problem. I have a simulation seconds ranging from 0 to 630 seconds, at which every 90 I would like to perform actions.
now here I would like to obtain a newgreentime that every in every value of t (v) updates according to a function of this type, in practice that takes into consideration one column at a time of the veicoliTT (n, v) to be subtracted from the greentime calculated in the t(v) previous. as soon as I got this value I would like to use it to set it to yet another function. This whole operation should be computed for every v, except for greentime with v = 1, for which I would like to take a constant value outside the for loop instead with the values 45,45,45,45 (while the veicoliTT (n, v) for v = 1 must be equally calculated by the for loop). how can i do this?
L is constant matrix 4x34
Thank you so much
SIM_STEPS = [1 630];
beginTime = SIM_STEPS(1);
duration = SIM_STEPS(2);
endTime = SIM_STEPS(1) + SIM_STEPS(2) - 1;
k=1:floor(endTime/T); %is a vector ranging from 1 to 7
t = T:T:duration; % returns the values 90,180 ... 630
inductionID=traci.inductionloop.getIDList(); % function that creates me a vector of 34 values
T=90;
greentime=[45 45 45 45]'; %I would like it to be the value of newgreentime for v = 1
for i = 1:duration
traci.simulation.step();
for n = 1: length(inductionID)
num(n,i)=traci.inductionloop.getLastStepVehicleNumber(inductionID{n});
% creates a 34x630 vector
end
for v=1:length(k)
if i==t(v)
for n = 1: length(inductionID)
veicoliTT(n,v)=sum(num(n,(t(v)-(T-1)):t(v)));% I create a sum vector of 90 elements for each value of v
newgreentime(v)=newgreentime(v-1)-L*veicoliTT(:,v); % don't work
end
end
end
end

回答 (2 件)

Benjamin Thompson
Benjamin Thompson 2022 年 2 月 22 日
Not understanding what you are trying to do exactly. But one way to test that a counter has reached some multiple of an integer T is to use the modulus function:
if mod(i, T) == 0
for n = 1: length(inductionID)
veicoliTT(n,v)=sum(num(n,(t(v)-(T-1)):t(v)));% I create a sum vector of 90 elements for each value of v
newgreentime(v)=greentime(v)-L*veicoliTT(:,v); % don't work
end
end
  1 件のコメント
Marco Carapellese
Marco Carapellese 2022 年 2 月 22 日
hello, thanks for the answer. I had no problem with dividing into 90s intervals as
for v = 1: length (k) and if i == t (v) works. My problem is that within these cycles I would like to calculate (I tried but that part doesn't work) that newgreentime as a negreentime of the previous period -less veicoliTT (considering only the column of it that concerns the v iterate at that moment). I would like to repeat this operation for each v present in the for loop in order to obtain as many newgreentime vectors as there are v. Another exception, however, is that the newgreentime calculated in v = 1 must not follow that function but must be exactly equal to the greentime value abroad of all the cycles and therefore to a constant

サインインしてコメントする。


David Hill
David Hill 2022 年 2 月 22 日
編集済み: David Hill 2022 年 2 月 22 日
If you really want seconds... you might want to use clock and etime. I don't entirely understand what you want. For example something like this:
stime=clock;
itime=stime;
v=0;
count=1;
while etime(stime,clock)*1000<630
traci.simulation.step();
for n = 1: length(inductionID)
num(n,count)=traci.inductionloop.getLastStepVehicleNumber(inductionID{n});
% creates a 34x630 vector
end
count=count+1;
if etime(itime,clock)*1000>90
itime=clock;
v=v+1;
for n = 1: length(inductionID)
veicoliTT(n,v)=sum(num(n,(t(v)-(T-1)):t(v)));% I create a sum vector of 90 elements for each value of v
newgreentime(v)=greentime(v)-L*veicoliTT(:,v); % don't work
end
end
end
  2 件のコメント
Marco Carapellese
Marco Carapellese 2022 年 2 月 22 日
thank you for the answer, I tried in the answer to the other guy to better explain what my problem is
Marco Carapellese
Marco Carapellese 2022 年 2 月 22 日
definitely command "newgreentime(v)=newgreentime(v-1)-L*veicoliTT(:,v)"
it is badly written for what I intend to do, it was just to give an idea of ​​what I would like to do for all v, except the first one

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by