Анализ данных
10.10.2019
Добрый день! Помогите пожалуйста решить задачку по составлению алгоритма. Допустим есть последовательность случайных чисел в количестве 100000 чисел. Они принимают как отрицательные так и положительные значения.
Необходимо:
- Определить промежутки значений на которых числа больше 0.
- На каждом из этих промежутках выявить максимальные значения и свести в отдельный столбец.
- Подсчитать количество промежутков этих чисел и количество максимальных значений.
Заранее спасибо!
Ответы
Добрый совет. Есть у меня опасение, что решать вашу задачу за вас не особо захотят. Попробуйте подробнее описать, что имено у вас не получается, где в написании скрипта вы застряли. Приложите скрипт к вашему вопросу или прямо сюда код вставьте.
Есть такой код:
d = randn(100000,1); j=1; k = 1; for i = 1:length(d) if d(i)>0 db(k,j) = d(i); k= k+1; else j= j+1; k = 1; end end D = db(:,sum(db,1)>0); % Промежутки Dmax = max(D); % максимумы NDmax = length(Dmax); % количество промежутков и максимумов
Можно ли подсчитать количество отсчетов для этих максимумов? Если всем отрицательным значениям присвоить значение 0, но оставить их для подсчета количества отсчетов.
Допустим:
(картинка во вложении)
На промежутке положительных значений Dmax имеет значение t1 = 7 и T1 = 13.
Где t1 - это длительность (в отсчетах) импульса Dmax,
а T1 - это период (в отсчетах) импульса Dmaх.
t2 = 5, T2 = 11.
И и так далее для всех 100000 значений. Как правильно написать алгоритм?
MATLAB позволяет решать такие задачи намного эффективнее без использования циклов.
Вот так решается ваша задача с помощью матричных возможностей языка MATLAB
Чтобы разобраться в коде, рекомендую повыполнять его построчно и поанализировать результат каждого действия.
Как только вы сможете переделать свое алгоритмическое мышление на основе циклов на матричное, сразу оцените все силу MATLAB)
Приходите к нам на тренинги, мы там учим решать задачи подобным образом:
https://exponenta.ru/training