4

我有一个每两周记录一次的年度温度测量数据集。数据类似于以下内容:

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 次测量,即每小时测量一次,那么为了使系列可信,除了年度温度周期外,还需要以昼夜温度周期为特征。此外,昼夜温度循环需要是当时温度测量值的函数,即夏季比冬季大。所以也许最好首先使用线性插值来获取数据以表示每小时间隔,然后添加正弦函数。有没有办法将其写入脚本?或者有没有人对如何准确地实现这一点有意见?

4

2 回答 2

5

您可以首先使用类似的东西插入您的数据(最多 1 小时)

x = 1:inv(24):365;
T_interp = interp1(t,y1,x,'spline');

查看interp1的 Matlab 文档(示例 2)

然后在其上添加一个正弦。接下来是周期 1(24 小时)的正弦波,幅度为 A,在凌晨 3 点有最小值。

T_diurn = -A*sin(2*pi*x+(3/24)*2*pi);

然后

T_total = T_diurn + T_interp;
于 2012-10-31T09:03:32.967 回答
0

第一:你知道好看的剧情是世上最容易误导人的东西吗?对每 14 天收集一次的数据进行插值,以使其看起来像每小时收集一次的数据,这在大多数圈子中被认为至少是不好的做法......

话虽如此,我会使用splines 进行插值——当从每两周和每小时更改为任意其他组合时,它们会更加灵活,而且每年的温度变化也会更加平滑。

就是这样:

% 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')
于 2012-10-31T11:26:08.987 回答