Временные ряды
timeseries
Объект timeseries предназначен для представления изменяющихся в дискретном времени данных. Для создания временного ряда используется функция timeseries
>> ts1 = timeseries((1:5)','Name','MyTimeSeries')
timeseries
Common Properties:
Name: 'MyTimeSeries'
Time: [5x1 double]
TimeInfo: [1x1 tsdata.timemetadata]
Data: [5x1 double]
DataInfo: [1x1 tsdata.datametadata]
More properties, Methods
При создании временного ряда ts первым аргументом был передан массив значений ряда от 1 до 5 с шагом 1 . Вторым аргументом задано имя временного ряда (свойство ‘Name’). Значения времени переданы не были, поэтому MATLAB задает эти значения автоматически, считая, что первая точка данных (1) соответствует моменту времени 0, последняя 4. Это некоторые абстрактные значения, не привязанные к конкретным единицам времени. Значения времени содержаться в атрибуте (свойстве) объекта Time
>> ts1.Time
ans =
0
1
2
3
4
Для того, чтобы задать и массив значений времени и массив значений исследуемой функции используется следующий способ вызова функции timeseries
>> ts1 = timeseries([1 3 2 5 7]',[0 10 20 30 40],'Name',' Ряд 1');
Первый аргумент (1:5)’ это значения функции (данные), второй – соответствующие этим значениям временные метки. В примере это массив [0 10 20 30 40].
Временными метками могут быть конкретные значения даты и времени, которые могут быть переданы в функцию timeseries в виде массива строк. Для того чтобы преобразовать массив дат в массив текстового представления этих дат используется функция datestr
>> datestr(datetime(2020,04,1:5,12,0,0))
ans =
5×20 char array
'01-Apr-2020 12:00:00'
'02-Apr-2020 12:00:00'
'03-Apr-2020 12:00:00'
'04-Apr-2020 12:00:00'
'05-Apr-2020 12:00:00'
Тогда
>> date_string_array = datestr(datetime(2020,04,1:5,12,0,0));
>> ts1 = timeseries([1 3 2 5 7]', date_string_array, 'Name', ' Ряд 1');
Очень просто построить график временного ряда. Достаточно передать в функцию plot имя объекта timeseries
>> plot(ts1);
Чтобы метки дат на оси x отображались в нужном формате используем функцию datetick
>> datetick('x','dd.mm.yy');
Некоторые функции для работы с timeseries
resample
Функция пересчитывает значения временного ряда для новых значений времени, передаваемых в функцию вторым аргументом. Результатом работы функции resample является новый временной ряд
>> ts2 = resample(ts1,[3 12 25 31 39]);
>> ts2.Data
ans =
1.6000
2.8000
3.5000
5.2000
6.8000
Для сравнения двух временных рядов построим их графики на одном рисунке
>> plot(ts1,'ro-');
>> hold on;
>> plot(ts2,'g^--');
>> hold off;
Как видно из результата, по умолчанию для пересчета значений используется линейная интерполяция. Способ интерполяции значений временного ряда задаётся функцией setinterpmethod
ts3 = setinterpmethod(ts2,'zoh');
Функция возвращает новый временной ряд. Первый аргумент – преобразуемый временной ряд, второй – способ интерполяции значений. Возможны два варианта ‘zoh’ и ‘linear’. ‘zoh’ – интерполяция нулевого порядка, которая представляет временной ряд в виде кусочно-постоянной функции
plot(ts3)
Функция detrend
Функция detrend удаляет из временного ряда постоянное число, равное среднему значению ряда, или линейную составляющую, вычисленную по методу наименьших квадратов.
Создадим временной ряд для интервала времени от 0 до 10 с шагом 0.2. Функция представляет собой сумму периодической функции с линейной функцией.
>> t = 0:0.2:10
>> y = sin(5*t)+3*t;
>> ts1 = timeseries(y,t);
Создадим два новых временных ряда на основе исходного, применив функцию detrend
>> ts2 = detrend(ts1,'constant');
>> ts3 = detrend(ts1,'linear');