2012-10-31 6 views
4

2 년마다 측정 한 연례 온도 측정 데이터 세트가 있습니다. 데이터는 다음과 유사하게 나타납니다.matlab의 시간 단위 측정에 대한 2 주간의 온도 데이터 보간

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'); 

명백히 연간 온도 사이클을 따르는 데이터입니다.

사인 함수 (주간 온도 범위를 나타냄)를 데이터에 추가 할 수 있는지 궁금합니다. 예를 들어, 2 주간의 데이터에서, 시리즈를 보간하여 8760 측정 즉, 시간 단위 측정을하는 경우, 시리즈가 믿을만한 것이기 때문에 그것은 연중 온도 사이클뿐만 아니라 주간 온도 사이클에 의해 특성화 될 필요가 있습니다. 또한, 일주 온도 사이클은 그 시간에 온도 측정치의 함수가 될 필요가 있는데, 즉, 겨울철보다 여름철에 더 클 것이다. 그래서 우선 선형 보간을 사용하여 시간 간격을 나타내는 데이터를 얻은 다음 사인 함수를 추가하는 것이 더 나을 것입니다. 이것을 스크립트에 작성하는 방법이 있습니까? 또는 이것을 정확하게 달성하는 방법에 대한 의견이있는 사람이 있습니까?

+1

모든 당신은 무엇에 대해 궁금해하는 것 같다 저명 matlab에, 당신은 모든 작업을 수행하기위한 적절한 도구 세트가, 나에게 수-수행합니다. –

+0

의견을 보내 주셔서 감사합니다. 추가 정보 즉, 어떤 도구 집합을 언급하고 있습니까? – KatyB

+0

나는 Matlab을 언급하고있다. –

답변

5

먼저 interp1 (예 2)

에 대한

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

체크 아웃 matlab에 문서 같은 것을 사용하여 (1 시간 아래로) 데이터를 보간 한 다음에 사인을 추가 할 수 있습니다. 다음은 진폭 A를 갖는주기 1 (24 시간)의 사인이며, 최소값은 3am이다.

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

그런

T_total = T_diurn + T_interp; 
+0

감사합니다. 이것은 제가 생각한 것과 같은 줄을 따라있는 것 같습니다. 나는 또한 일년 중 특정 날의 실제 온도와 관련하여 사인파의 진폭을 제어하기를 희망했지만. 예를 들어, 진폭은 온도가 높을수록 커지고, 현재 진폭은 일년 내내 동일합니다. 이는 환경 시계열에서 현실적이지 않습니다. 다시 한 번 감사드립니다 – KatyB

+0

진폭 A를 기준 (평균) 온도의 함수로 변경할 수 있습니다. 또는 당신이 좋아하는 무엇이든지. 이제 도구를 사용 했으므로 그 (것)들과 함께 노는 것은 당신에게 달린 것입니다 :-) 행운을 비네! –

0

첫째 : 당신이 잘 생긴 플롯은 현존하는 가장 잘못된 일이라는 것을 알고? 그들이 - 그것은 적어도 나쁜 연습을 가장 원으로 간주되는 모든 시간을 수집 된 데이터처럼 보일 수 있도록 보간 데이터는

내가 보간을 할 spline의을 사용했다 가졌 ... 14 일마다 모여 격주와 시간당에서 임의의 다른 조합으로 변경하는 경우 더욱 유연하고 연간 온도 변화를 훨씬 더 부드럽게 처리 할 수 ​​있습니다.

는 방법은 다음과 같습니다

% 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')