Creare una matrice di massimi

di il
2 risposte

Creare una matrice di massimi

Salve, il mio problema è il seguente: ho una matrice in MatLAB che rappresenta dei valori di precipitazione giornaliera in cui le colonne rappresentano delle stazioni di misura e le righe rappresentano i giorni. Le righe sono i giorni per 250 anni e io voglio ottenere un'altra matrice che rappresenta i massimi annuali di pioggia per ogni stazione e quindi voglio avere lo stesso numero di colonne (stazioni) con 250 righe, ognuna delle quali rappresenta il massimo annuale di pioggia. Ho capito che posso farlo con un ciclo for però non so come imporre la condizione dell'anno bisestile. So quando iniziano le misure e quando finiscono quindi conosco gli anni di misurazione (dal 1/1/1850 al 31/12/2100). Non so bene come scrivere il codice. Grazie in anticipo a chi mi aiuterà

2 Risposte

  • Re: Creare una matrice di massimi

    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
    
    
  • Re: Creare una matrice di massimi

    Grazie mille! No comunque i dati sono inventati è solo un esercizio
Devi accedere o registrarti per scrivere nel forum
2 risposte