How to count time steps

21 visualizaciones (últimos 30 días)
Karoline Qasem
Karoline Qasem el 8 de En. de 2017
Comentada: Karoline Qasem el 10 de En. de 2017
Hi, I have X has several numbers inside say: X = [1 4 5 3 2 7 8 4 6 9 3 2 8 5 3 10] I want to first to select the values where X falls below 4, then need to count how many time steps does it take each one to go above 8.
Hope I am clear Thanks
  2 comentarios
Image Analyst
Image Analyst el 8 de En. de 2017
Editada: Image Analyst el 8 de En. de 2017
So it first goes above 4 at element 3 (where it's 5). Then to go from 5 to 9 (the first time it goes above 8) is 7 steps. Then it goes above 4 at element 14 (where it's 5) then it's 3 steps to get to 10. So is the answer [7, 3]? Or are your rules different than that?
What is the reason why you want this quirky thing?
Karoline Qasem
Karoline Qasem el 9 de En. de 2017
It is slightly different, I am looking at values of dissolved oxygen in water, at some time of the year, it goes BELOW 4 mg/L and it takes couple of days to go to 8 mg/L. My question is how many days does it need to go back from a threshold value (any value less than 4) to reach 8 mg/L
So the only thing not correct in your explanation is that I am looking at values less than 4 not above it. So, looking at the example: the first value below 4 is the first element which is 1, it needs 6 time steps to get to 8.
now moving after that number 4 (the one after 8) it needs two time steps to get to the 9.
etc
Thanks for the comment

Iniciar sesión para comentar.

Respuesta aceptada

Image Analyst
Image Analyst el 9 de En. de 2017
I imagine you've already modified by solution for your updated/clarified question. But anyway, here is the code:
% Define vector.
x = [1 4 5 3 2 7 8 4 6 9 3 2 8 5 3 10]
% Plot it.
plot(x, 'b*-', 'LineWidth', 2, 'MarkerSize', 13)
grid on;
hold on;
line(xlim, [4,4], 'Color', 'r', 'LineWidth', 2);
% Do the scan.
startingIndex = 1;
loopcounter = 1;
while startingIndex < length(x)
subvector = x(startingIndex:end);
% Find where it goes below 4 next. Note ABOVE, not above or equal to.
nextBelow4Index = find(subvector < 4, 1, 'first') + startingIndex - 1;
% Find where it goes above 8 next. Note ABOVE, not above or equal to.
subvector2 = x((nextBelow4Index+1):end);
% Count the number of steps for that to happen.
numSteps(loopcounter) = find(subvector2 >= 8, 1, 'first');
% Move to the next index past the one that exceeded 8.
startingIndex = nextBelow4Index + numSteps(loopcounter) + 1;
loopcounter = loopcounter + 1;
end
numSteps % Report results to command window.
Answer is [6,2,1]
  6 comentarios
Image Analyst
Image Analyst el 9 de En. de 2017
That is a file with lots of columns, many of which have gaps in them. How did you read it in (please give your code)? What column or part of a column was the "X" vector?
Karoline Qasem
Karoline Qasem el 10 de En. de 2017
its the whole column 6, I am attaching it again with it only
thanks

Iniciar sesión para comentar.

Más respuestas (1)

Image Analyst
Image Analyst el 8 de En. de 2017
Editada: Image Analyst el 8 de En. de 2017
Try this:
% Define vector.
x = [1 4 5 3 2 7 8 4 6 9 3 2 8 5 3 10]
% Plot it.
plot(x, 'b*-', 'LineWidth', 2, 'MarkerSize', 13)
grid on;
hold on;
line(xlim, [4,4], 'Color', 'r', 'LineWidth', 2);
% Do the scan.
startingIndex = 1;
loopcounter = 1;
while startingIndex < length(x)
subvector = x(startingIndex:end);
% Find where it goes above 4 next. Note ABOVE, not above or equal to.
nextAbove4Index = find(subvector > 4, 1, 'first') + startingIndex - 1;
% Find where it goes above 8 next. Note ABOVE, not above or equal to.
nextAbove8Index = find(subvector > 8, 1, 'first') + startingIndex - 1;
% Count the number of steps for that to happen.
numSteps(loopcounter) = nextAbove8Index - nextAbove4Index;
% Move to the next index past the one that exceeded 8.
startingIndex = nextAbove8Index + 1;
loopcounter = loopcounter + 1;
end
numSteps % Report results to command window.
The result is [7, 3] as expected.

Categorías

Más información sobre Third-Party Cluster Configuration en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by