kekni
kekni

Reputation: 3

Iterate for loop by hour in MATLAB

I am writing a for loop to average 10 years of hourly measurements made on the hour. The dates of the measurements are recorded as MATLAB datenums.

I am trying to iterate through using 0.0417 as it is the datenum for 1AM 00/00/00 but it is adding in a couple of seconds of error each time I iterate.

Can anyone recommend a better way for me to iterate by hour?

date = a(:,1);
load = a(:,7);

%loop for each hour of the year
for i=0:0.0417:366

    %set condition
    %condition removes year from current date 
    c = date(:)-datenum(year(date(:)),0,0)==i;

    %evaluate condition on load vector and find mean
    X(i,2)=mean(load(c==1));

end

Upvotes: 0

Views: 442

Answers (2)

Peter
Peter

Reputation: 14937

To avoid error drift entirely, specify the index using integers, and divide the result down inside the loop:

for hour_index=1:365*24
    hour_datenum = (hour_index - 1) / 24;
end

Upvotes: 2

Daniel
Daniel

Reputation: 36710

An hour has a duration of 1/24 day, not 0.0417. Use 1/24 and the precision is sufficient high for a year.

For an even higher precision, use something like datenum(y,1,1,1:24*365,0,0) to generate all timestamps.

Upvotes: 2

Related Questions