Если вы просто хотите, чтобы интерполяция работала с данными как есть, вы можете попробовать метод resample
для timeseries
объектов. Конечно, для вашего данного примера он будет отображать разрыв в момент времени 803
, но все равно будет работать без ошибок:
>> ts = timeseries([1 2 3 7].', [802 803 803 804]);
>> rs = resample(ts, 802:0.25:804);
>> [rs.time rs.data]
ans =
802.0000 1.0000
802.2500 1.2500
802.5000 1.5000
802.7500 1.7500
803.0000 3.0000
803.2500 4.0000
803.5000 5.0000
803.7500 6.0000
804.0000 7.0000
Обратите внимание, что момент времени 803
имеет значение 3
, но интерполанты приближаются к значению 2
снизу.
Если вы хотите просто удалить дубликаты записей путем их усреднения, вы можете использовать функции unique
и accumarray
для создания нового объекта timeseries
, например так:
>> [newTime, ~, index] = unique(ts.time);
>> newTS = timeseries(accumarray(index, ts.data, [], @mean), newTime);
>> [newTS.time newTS.data]
ans =
802.0000 1.0000
803.0000 2.5000
804.0000 7.0000
В качестве альтернативы, если вы хотите изменить время и данные оригинального timeseries
объекта, вы можете установить их одновременно с помощью метода set
:
[newTime, ~, index] = unique(ts.time);
newData = accumarray(index, ts.data, [], @mean);
set(ts, 'Time', newTime, 'Data', newData);