How to use for or while loop for certain range?
이전 댓글 표시
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)

채택된 답변
추가 답변 (1개)
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
Asrorkhuja Ortikov
2020년 6월 30일
편집: Asrorkhuja Ortikov
2020년 6월 30일
SC
2020년 7월 1일
Your logic won't hit 15 ever, because in the range of 15 to 20 you want it to increase but when it hits 20 you want it to decrease to go to 15? it won't.. immediately after 20 is decreased by 1 it will be around 19 and 19 is in te range of 15 & 20.. which will start increasing again.. I've written a while loop to satisfy your logic, check this once:
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
if result(i)>= 15 && result(i)< 20
result(i+1) = result(i) + 1;
elseif result(i) >= 20 && result(i) < 21
while result(i)>= 15
result(i+1) = result(i) - 1;
i = i+1;
end
elseif result(i) < 15 || result(i) >= 21
result(i+1) = result(i) + 0.75;
end
else
result(i+1) = result(i) - 0.75;
end
end
result(end,:) = [];
plot(minutes,result)
Asrorkhuja Ortikov
2020년 7월 1일
SC
2020년 7월 1일
Hey that is because of the binary pattern, please try another binary pattern and check.
Asrorkhuja Ortikov
2020년 7월 1일
카테고리
도움말 센터 및 File Exchange에서 Programming에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!