Вопрос по условию if

Форум, посвященный общим вопросам, связанным с MATLAB

Модератор: Admin

juho
Пользователь
Сообщения: 38
Зарегистрирован: Пт мар 28, 2014 8:53 am

Вопрос по условию if

Сообщение juho » Ср ноя 27, 2019 5:25 am

Уважаемые форумчане, доброго времени суток. Уже продолжительное время не получается решить как мне кажется простую задачу. Поэтому прошу Вашу руку помощи. Спасибо.

Вся соль вопроса в следующем.

Имеется массив А в котором генерируются 50 единичек со знаком минус (-)
A = ones(50,1) * (-1);
После эти значения суммируются например константой (25), причем выполняется накопление через команду (cumsum)
B = 25 + cumsum(A);
Массив B постепенно уменьшается на -1. При этом возникает необходимость чтобы в момент когда массив B принимает значение 5 (B=5), то A принимал бы значение 5 (A=5), до того момента пока B не примет свое максимальное значение (B=25) и после А опять принимал бы исходное значение значение (-1).

Пытаюсь сделать это без цикла for (если возможно конечно).

Для наглядности прикладываю график из exel, что хотел бы получить.
Изображение

Благодарю.

Centurio
Пользователь
Сообщения: 57
Зарегистрирован: Чт фев 18, 2016 9:47 am
Откуда: Северск
Контактная информация:

Re: Вопрос по условию if

Сообщение Centurio » Ср ноя 27, 2019 7:55 am

Картинки не видно

juho
Пользователь
Сообщения: 38
Зарегистрирован: Пт мар 28, 2014 8:53 am

Re: Вопрос по условию if

Сообщение juho » Ср ноя 27, 2019 9:04 am

https://drive.google.com/open?id=1uCuxb3v4n0IK78syfHojCMA8BdWS9vW4

Картинка не грузится почему-то. Прикладываю ссылку из гугл диска с картинкой.

Centurio
Пользователь
Сообщения: 57
Зарегистрирован: Чт фев 18, 2016 9:47 am
Откуда: Северск
Контактная информация:

Re: Вопрос по условию if

Сообщение Centurio » Ср ноя 27, 2019 7:45 pm

juho писал(а):чтобы в момент когда массив B принимает значение 5 (B=5), то A принимал бы значение 5 (A=5)
Но у вас на графике В уменьшается до 4, а не до 5, а в следующий раз уменьшается только до 7. Почему так?

juho
Пользователь
Сообщения: 38
Зарегистрирован: Пт мар 28, 2014 8:53 am

Re: Вопрос по условию if

Сообщение juho » Чт ноя 28, 2019 3:46 pm

В общем господа, я решил сделать старым добрым циклом for. Если у кого-нибудь будут мысли по поводу как убрать цикл for, то я буду очень признателен. Спасибо

tic
B = randi([-1, -1],200,1);
C = zeros(200,1);
k = zeros(200,1);
for i = 1:1:length(C(:,1))
if i == 1
C(i) = 25;
end
if i > 1 && i < 200 && C(i+1) < 25
B(i) = B(i);
C(i) = C(i-1) + B(i);
end
if i > 1 && i < 200 && C(i) < 5
B(i) = 5;
k(i) = 1;
C(i) = C(i-1) + B(i);
end
if i > 1 && i < 200 && k(i-1) == 1 && C(i) ~= 25
B(i) = 5;
k(i) = 1;
C(i) = C(i-1) + B(i);
end
if i > 1 && i < 200 && k(i-1) == 1 && C(i) >= 25
B(i) = B(i);
k(i) = 0;
C(i) = C(i-1) + B(i);
end
if i == 200
C(i) = C(i-1);
end

end
toc

sandy
Эксперт
Сообщения: 5600
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Вопрос по условию if

Сообщение sandy » Чт ноя 28, 2019 11:00 pm

Так что вам сделать нужно-то? Конкретный алгоритм реализовать или просто вот такой массив C сформировать? Если последнее, то это примерно три строчки кода.
С уважением

Александр Сергиенко