Datenum Matlab: - PullRequest
       5

Datenum Matlab:

0 голосов
/ 04 января 2012

В моем коде я зациклил различные текстовые файлы, чтобы получить истекшее время и температуру.А затем выведите график температуры и времени. В текстовом файле есть такие данные

Date; Time; Temp °C
06.12.2011; 10:35:11;-24.13
06.12.2011; 10:36:34;-24.00
06.12.2011; 10:37:56;-23.88
.
.
.
.

header=fgetl(fid);
data=textscan(fid,'%s','delimiter',';');
fclose(fid);
data=data{:};
day=data(1:3:end);
hour=data(2:3:end);
temp=str2double(data(3:3:end));
time=cellfun(@(x) sprintf('%s %s',day{strcmpi(hour,x)},x),hour,'uniformoutput',0);
timen=datenum(time,'dd.mm.yyyy HH:MM:SS');
seconds=timen*86400/60;
plot(seconds-seconds(1),temp);
xlabel('Time(mins)');
ylabel('Temp °C');

Но теперь, когда истекшее время превышает 24 часа в текстовых файлах (чтение температуры длится более одного дня)datenum выдает ошибку

Error using ==> dtstr2dtnummx
    Failed on converting date string to date number.

Любые предложения, почему это происходит, я пытался использовать то же самое в командной строке, он прекрасно работает там

1 Ответ

2 голосов
/ 04 января 2012

datenum не менял при получении значений для часа больше 24. Например:

>> time = '06.12.2011 53:31:11';
>> timen=datenum(time,'dd.mm.yyyy HH:MM:SS');
>> datestr(timen,'dd.mm.yyyy HH:MM:SS')

ans =

08.12.2011 05:31:11

Однако при попытке запустить ваш код я получил ту же ошибку, но в тех случаях, когда было два наблюдения с одной и той же отметкой времени. Это происходит потому, что строка:

time=cellfun(@(x) sprintf('%s %s',day{strcmpi(hour,x)},x),hour,'uniformoutput',0);

объединит несколько значений day и одно значение hour, генерируя недопустимую строку времени, например '07.12.2011 07.12.201110:36:11 '

Поскольку, похоже, вы хотите получить одно значение time за наблюдение (в отличие от одного за unique(hour)), я предлагаю вычислить time как

time = strcat(day,{' '},hour)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...