How to use for or while loop for certain range?

22 次查看(过去 30 天)
I want to add or substract a certain number to my array cell (result(i)) based on corresponding binary(0 or 1) pattern I have . Condition: if binary_pattern is 1 then it should increase with speed of 0.75 per minute, if zero it should decrease with the same speed(-0.75). But when binary_pattern is 1 and inside the range 15 and 20 it should increase by 1 not 0.75. Which means when result reaches 20, has to decrease by and increase again when hits 15 with the speed of 1. Any advices on that? I have tried with the code below, but due to I'm new to Matlab couldn't get my head around it. Thanks in advance!
binary_pattern = zeros(100,1);
binary_pattern(1:25) = 1;
binary_pattern(50:75) = 1;
binary_pattern(90:100) = 1; % to create binary pattern
minutes = [1:100]'; % scale of minutes
result = zeros(100,1);
result(1,1) = 5; % initial condition of a state
for i = 1:100
if binary_pattern(i) == 1
result(i+1) = result(i) + 0.75;
if result(i)>= 20
result(i+1) = result(i) - 1;
elseif result(i)<= 15
result(i+1) = result(i) + 1;
else
end
else
result(i+1) = result(i) - 0.75;
end
end
result(end,:) = [];
plot(minutes,result)

采纳的回答

Asrorkhuja Ortikov
binary_pattern = zeros(100,1);
binary_pattern(1:25) = 1;
binary_pattern(50:75) = 1;
binary_pattern(90:100) = 1; % to create binary pattern
minutes = [1:100]'; % scale of minutes
result = zeros(100,1);
result(1,1) = 15; % initial condition of a state
DeS = 0;
for i = 1:100
if binary_pattern(i) == 1
result(i+1) = result(i) + 1;
if DeS == -1
result(i+1) = result(i) - 1;
end
if result(i+1)>20
result(i+1)= result(i) - 1;
DeS = -1;
end
if result(i+1)<15
result(i+1) = result(i) + 1;
DeS = 0;
end
else % pattern is 0
result(i+1) = result(i) - 0.75;
end
end
result(end,:) = [];
plot(minutes,result)

更多回答(1 个)

SC
SC 2020-6-30
I've edited the code, according to your logic (from what I've understood)
(Try explaining your logic better)
see if this works, incase:
zerosmatrix = zeros(100,1);
zerosmatrix(1:25) = 1;
zerosmatrix(50:75) = 1;
zerosmatrix(90:100) = 1;
timeframe = [1:100]';
state = zeros(100,1);
for i = 1:100
if zerosmatrix(i) == 1
state(i+1) = state(i) + 0.75;
if state(i)>= 15 && state(i)<= 20
state(i+1) = state(i) + 1;
elseif state(i)>= 20
state(i+1) = state(i) - 1;
end
else
state(i+1) = state(i) - 0.75;
end
end
state(end,:) = [];
plot(timeframe,state)
  5 个评论
SC
SC 2020-7-1
Hey that is because of the binary pattern, please try another binary pattern and check.
Asrorkhuja Ortikov
@ SC I did, but it is still not working? Did you check it yourself first? Here I took different approach, have a look:
binary_pattern = zeros(100,1);
binary_pattern(1:25) = 1;
binary_pattern(50:75) = 1;
binary_pattern(90:100) = 1; % to create binary pattern
minutes = [1:100]'; % scale of minutes
result = zeros(100,1);
result(1,1) = 15; % initial condition of a state
DeS = 0;
for i = 1:100
if binary_pattern(i) == 1
result(i+1) = result(i) + 1;
if DeS == -1
result(i+1) = result(i) - 1;
end
if result(i+1)>20
result(i+1)= result(i) - 1;
DeS = -1;
end
if result(i+1)<15
result(i+1) = result(i) + 1;
DeS = 0;
end
else % pattern is 0
result(i+1) = result(i) - 0.75;
end
end
result(end,:) = [];
plot(minutes,result)

请先登录,再进行评论。

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by