У меня есть переменная P1 (LENGTH = 36), и я хочу сделать сумму ТОЛЬКО последовательных положительных значений и поместить сумму в новый вектор (называемый «out») в положение, которое вы можете видеть на рисунке. Если есть только одно значение, вы можете поместить его в ту же позицию P1 и повторить значение, указанное ниже, 8 раз. В противном случае поместите его в самую нижнюю последовательную положительную позицию и повторите это 8 раз. Для других значений я хочу ноль. Смотри рисунок ниже. В красном есть то, что мне нужно рассчитать.
Я попытался с помощью приведенного ниже кода, однако он выдает все, равное 0. Я пытался решить проблему, но мне нужна помощь.
Заранее спасибо !!
lo = P1 > 0;
Dfference = diff([lo(:);0]);
Ends = find(Dfference==-1); % -1 are the positions where a sequence ends
Start = find(Dfference==1)+1; % 1 are the positions where a sequence starts -1
out = zeros(size(P1));
for idx=1:length(Start)
out(Ends(idx):Ends(idx)+8) = sum(P1(Start(idx):Ends((idx))));
end
Это моя матрица:
P1 = [
39
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
60
39
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
60
39
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
60];