How to calculate the accumulated rainfall value of 1, 2, 3, 4, 5, 6 and 7 days.

33 vues (au cours des 30 derniers jours)
GA
GA le 19 Avr 2019
Commenté : GA le 22 Avr 2019
I need to calculate the cumulative rainfall of 1, 2, 3, 4, 5, 6 and 7 days and extract the annual maximum of each year (after accumulation). I have historical series of precipitation with a great amount of years organized as follows: day, month, year, precipitation [mm], each in a column. I tried using the code below but it did not work.
%% Import Precipitation Data
RainMatrix = importdata ('data.txt');
% Identifies the first and last year of the series
First_Year = RainMatrix(1,3);
Last_Year = RainMatrix(end,3);
% Measuring the Data Series Size;
T = length(unique(RainMatrix(:,3)));
P = 2; % Time Step, P = 1, 2, 3, 4, 5, 6 and 7 days
k = 1; % Counter
for ii = 1 : (T-1)
Year = find(RainMatrix(:,3) == First_Year); % Identifies the year
RainMatrix = RainMatrix(Year(:,1),:); % Cut the year
n = length(RainMatrix); % Dimension of Cut Out Data
for i = P : P : n
Rainfall(k,1) = sum(RainMatrix(i-P+1:i,4)); % Cumulative rainfall of "P" days
k = k+1;
[x, y] = ismember(max(Rainfall(:,1)),Rainfall(:,1)); % Find the Maximum Value of the Series
MaxAnual(ii,1) = Rainfall(y);
end
First_Year = First_Year + 1;
Rainfall = [];
end
  4 commentaires
GA
GA le 19 Avr 2019
Sorry. I edited the question and added an example
GA
GA le 19 Avr 2019
I wish this way: (d1 + d2), (d3 + d4) ...

Connectez-vous pour commenter.

Réponse acceptée

David Wilson
David Wilson le 20 Avr 2019
Here is my solution:
I notice that you've got few NaNs for about a year and a half. Your last year is also incomplete.
I isolated each year, and then reshaped the data in blocks of 1,2, ... 7. I dropped a few days at the end of the year if they were not exact multiples. I then summed the cols, and then took the max and stored it in an array.
%% Import Precipitation Data
RainMatrix = importdata('data.txt');
% Identifies the first and last year of the series
yr = RainMatrix(:,3); % years
yr1 = yr(1); yr_end = yr(end);
Raincum = NaN(yr_end-yr1+1,7); % placeholder
k=0;
for i=yr1:yr_end % scan each year
k=k+1;
idx = find(yr == i);
yri = yr(idx); r = RainMatrix(idx,4); nr = length(r);
length(yri); % check should be 365 or 366 for full years
Raincum(k,1) = max(r);
for j=2:7
rv = r(1:nr - mod(nr,j));
r2 = reshape(rv,j,length(rv)/j);
r2 = sum(r2);
Raincum(k,j) = max(r2);
end
end
%%
yrs = [yr1:yr_end]';
plot(yrs,Raincum)
legend('1','2','3','4','5','6','7')

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by