曲线拟合工具箱中的时间向量

Time vector in curve fitting toolbox

我想使用曲线拟合工具箱来模拟我的一天,它由两个向量组成,时间和度量。这是我的数据文件的屏幕截图(我将仅使用时间和 DOWN)。

如何在工具箱中输入时间向量作为我的 x 向量?它目前是日期时间类型的向量,当我 select 我的变量时,我无法在我的列表中找到它,使用什么格式是正确的?

这是我的excel样本(我稍微减少了观察量,但这不会影响最终结果):

DATE        TIME        DOWN
---------   ----------  -----
1/27/2018   8:00:03 PM  5,375
1/27/2018   8:00:06 PM  5,375
1/27/2018   8:00:10 PM  5,375
1/27/2018   8:00:13 PM  5,375
1/27/2018   8:00:17 PM  5,375
1/27/2018   8:00:20 PM  4,855
1/27/2018   8:00:27 PM  4,855
1/27/2018   8:00:31 PM  4,855
1/27/2018   8:00:35 PM  4,855
1/27/2018   8:00:38 PM  4,855

我通常更喜欢将 readtable 函数与经过调整的导入选项一起使用,如下所示:

opts = detectImportOptions('data.xlsx');
opts.VariableTypes = {'datetime' 'datetime' 'double'};
data = readtable('data.xlsx',opts);

data变量将被解析如下:

DATE (datetime)         TIME (datetime)         DOWN (double)
----------------------  ----------------------  ----------------
'27-Jan-2018 00:00:00'  '31-Dec-1899 20:00:03'  5,37500000000000
'27-Jan-2018 00:00:00'  '31-Dec-1899 20:00:06'  5,37500000000000
'27-Jan-2018 00:00:00'  '31-Dec-1899 20:00:10'  5,37500000000000
'27-Jan-2018 00:00:00'  '31-Dec-1899 20:00:13'  5,37500000000000
'27-Jan-2018 00:00:00'  '31-Dec-1899 20:00:17'  5,37500000000000
'27-Jan-2018 00:00:00'  '31-Dec-1899 20:00:20'  4,85500000000000
'27-Jan-2018 00:00:00'  '31-Dec-1899 20:00:27'  4,85500000000000
'27-Jan-2018 00:00:00'  '31-Dec-1899 20:00:31'  4,85500000000000
'27-Jan-2018 00:00:00'  '31-Dec-1899 20:00:35'  4,85500000000000
'27-Jan-2018 00:00:00'  '31-Dec-1899 20:00:38'  4,85500000000000

如您所见,当时间未定义时默认为00:00:00;日期也是如此,默认为 31-Dec-1899。由于参考日期是静态的并且永远不会改变,我认为最好的办法是合并 table 的前两列,以便生成连贯的 datenum 值以用作 X Datadatetime变量不能在Curve Fitting Toolbox中使用,你必须将它们转换成序列格式):

[y,m,d] = ymd(data.DATE);
[h,mn,s] = hms(data.TIME);
x = datenum(y,m,d,h,mn,s)

x =
    737087.833368056
    737087.833402778
    737087.833449074
    737087.833483796
    737087.833530093
    737087.833564815
    737087.833645833
    737087.83369213
    737087.833738426
    737087.833773148

cftool 中用作 Y Data 的值可以直接从 data 列中提取 DOWN:

y = data.DOWN;