Davvero conosci i dati delle precipitazioni fino al 2100?
Puoi condividerli?
Per verificare se un anno è bisestile, puoi applicare l'
algoritmo descritto qui
Dato un set di anni, per identificare quelli bisestili puoi usare la
funzionie mod per verificarne la divisibilità per 4, 100 e 400.
Se confronti il valore del resto con 0 ottieni, per ogni anno un valore "logical".
Sommando per ogni anno i valori calcolati al passo precedente, in base alla definizione, l'i-esimo anno sarà bisestile se la somma sarà uguale a 1 o 3.
Una volta noti gli anni bisestili e quelli non, si tratta di definire gli indici di inizi e fine della sequenza di dati di ogni anno.
Puoi costruire un vettore con il numero di giorni dell'anno aggiungendo a 365 il corrispondente valore del flag "anno_bisestile".
Di seguito, una possibile implementazione.
Per poter verificare i risultati ho usato come intervallo di anni:
anno_inizio=1850;
anno_fine=1856;
e come numero di giorni di un anno non bisestile 5
giorni_anno=5;
%giorni_anno=365;
Per i dati delle precipitazioni ho definito dei valori random.
%
% Definizione anni
%
%anno_inizio=1850;
%anno_fine=2100;
anno_inizio=1850;
anno_fine=1856;
anni=anno_inizio:anno_fine;
n_anni=length(anni);
%
% Numero giorni per anno (non bisestile);
%
%giorni_anno=365;
giorni_anno=5;
%
% Individuazione anni bisestili
%
anni_divisibili_per_100=mod(anni,100)==0;
anni_divisibili_per_400=mod(anni,400)==0;
anni_divisibili_per_4=mod(anni,4)==0;
somma_bis_flag=sum([anni_divisibili_per_4;anni_divisibili_per_100;anni_divisibili_per_400]);
anni_bisestili=somma_bis_flag==1 | somma_bis_flag == 3;
%
% Numero giorni complessivi negli anni
%
giorni=anni_bisestili+giorni_anno;
n_giorni=sum(giorni);
%
% Dati precipitazioni
%
dati_precipitazioni=randi([1 50],n_giorni,1);
% Inizializzazione vettore output
%
max_precipitazioni=nan(n_anni,1);
% Calcolo valore massimo precipitazione nell'anno
%
max_precipitazioni(1)=max(dati_precipitazioni(1:giorni(1)));
for i=2:n_anni
max_precipitazioni(i)=max(dati_precipitazioni(1+sum(giorni(1:i-1)):sum(giorni(1:i))));
end
giorni
dati_precipitazioni'
max_precipitazioni