Выявление циклического поведения с использованием MATLAB
Я пытаюсь обработать большое количество данных в поисках циклического поведения. Другими словами, данные, которые перемещаются назад и вперед между двумя соответствующими значениями. Я пробовал много разных решений, но все они дают ложные срабатывания для определения поведения. Вот пример того, что я ищу, если первый столбец - время, а второй - высота: [0 1000; 5 2000; 10 1000; 15 2000; 20 1000]. В этом примере высота колеблется между 1000 и 2000 футами. Если бы кто-нибудь мог мне помочь, это было бы очень признательно. Я пишу в MATLAB.
1 ответ
Если это только для двух последовательных элементов, вы можете использовать 1D-фильтрацию следующим образом:
A = [-5 8000; 0 1000; 5 2000; 10 1000; 15 2000; 20 1000; 25 3000; 30 1000];
b = A(:,2);
% filtering with 2 elemnts vector. the imaginary part is to avoid
% false-positives from adding different numbers to the same sum
x = conv(b,[1;1j],'valid');
% find unique values and their number of occurrences
[C,ia,ic] = unique(x,'stable');
counts = histcounts(ic,[1:max(ic),inf]);
multiCounts = counts > 1;
% find the repeating patterns
patternFirstIdxs = ia(multiCounts);
patterns = [b(patternFirstIdxs),b(patternFirstIdxs + 1)];
если вы хотите найти все вхождения каждого шаблона, посмотрите на ia
или использовать k = strfind(b,pattern)
для каждого из них.