我每两周记录一次年度温度测量数据集。数据类似于以下内容:
t = 1:14:365;
% GENERATE DATA
y = 1 + (30-1).*rand(1,length(t));
y1 = 20*sin(2*pi*t/max(t)); % Annual variation °C
y1(y1<0) = [];
tt = 365/14;
time = 1:tt:365;
plot(time,y1,'-o');
它明显遵循年度温度循环。
由此我想知道是否可以在数据上添加正弦函数(代表昼夜温度范围)?例如,根据两周数据,如果我们要对系列进行插值以进行8760次测量,即每小时测量,则为了使系列可信,除了年度温度循环之外,还需要以昼夜温度循环为特征。此外,昼夜温度周期需要是当时温度测量的函数,即在夏季比冬季更大。所以也许最好先使用线性插值来获取数据来表示每小时的间隔,然后添加正弦函数。有没有把它写入脚本的方法?或者有没有人对如何准确地实现这一点有意见?
答案 0 :(得分:5)
您可以先使用
等内容插入数据(最少1小时)x = 1:inv(24):365;
T_interp = interp1(t,y1,x,'spline');
查看interp1(示例2)
的Matlab文档然后在其上添加正弦。以下是1期(24小时)的正弦波,振幅为A,最小值为凌晨3点。
T_diurn = -A*sin(2*pi*x+(3/24)*2*pi);
然后
T_total = T_diurn + T_interp;
答案 1 :(得分:0)
首先:你知道好看的情节是最具误导性的东西吗?插值数据每14天收集一次,以便看起来每个小时收集的数据被认为至少是大多数圈子的不良行为......
话虽如此,我会使用spline
来进行插值 - 当它从每两周和每小时更改为某些任意其他组合时,它们会更加灵活,加上年度温度变化将是更顺畅。
以下是:
% Create spline through data
pp = spline(time, y1);
% define diurnal variation (this one is minimal at 4 AM)
T_diurn = @(t) -A*cos(2*pi*(t-(4/24)));
% plot example
t = 150 : 1/24 : 250;
plot( t, ppval(pp,t)+T_diurn(t) , 'b')