Ci sono almeno tre errori concettuali nel loop che hai scritto:
[*] uso dell funzione "sum": ad ogni iterazione passi alla funzione un solo valore, flow(i) o flow(i+1). La funzione richiede un set di valori.
[*] a prescindere dall'errore precedente, la variabile alla quale assegni il valore della somma è a stessa che contiene i valori di input (flow). Questo comporta che nella prima iterazione, il vettore "flow" viene convertito in una variabile scalare. Nella seconda iterazione dovresti ricevere un messaggio di errore in quanto tenti di accedere ad una variabile scalare, come ad un vettore (es. flow(i))
[*] a prescindere dagli errori precedenti, assegni il valore della somma sempre alla stessa variabile scalare, questo fa sì che, ad ogni iterazione il valore della somma calcolata in quella precedente venga sovrascritto
La cosa più semplice che puoi fare è:
[*] convertire le date nei corrispondenti "serial numbers" con la funzione "datenum"
[*] usare la funzione "unique" per trovave il set di date uniche
[*] impostare un loop che identifichi i vari set di date
[*] calcolare le somme dei corrispondenti valori
Questo approccio comporta un rischio in quanto confronti tra loro valori di tipo double (le date convertite in serial numbers) per verificare se siano uguali; ci potrebbero essere degli "rounding errors" che potrebbero portare a risultati non corretti.
Possibili soluzioni potrebbero essere cercare le occorrenze delle delle date (in forma di stringa) all'interno del set di date oppure convertire le date in vettori numerici con la funzione "datevec"; in questo caso dovresti estendere la ricerca delle dei set di date uguali alle singole componenti dei vettori.
Di seguito un esempio di implementazione del primo metodo.
Attenzione verifica la correttezza dei risultati.
t=[
'2020-01-21 06:10:00'
'2020-01-21 06:10:00'
'2020-01-21 06:11:00'
'2020-01-21 06:11:00'
'2020-01-21 06:12:00'
'2020-01-21 06:12:00'
'2020-01-22 06:11:00'
'2020-01-22 06:11:00'
'2020-02-21 06:11:00'
'2020-02-21 06:11:00'
]
% Define the example input val
m=randi([1 10],10,1)
% Convert date to serial number
dn=datenum(t);
% Get the unique dates
[ud,b,~]=unique(dn)
% Get the number of unique dates
n_unique=length(ud);
% Initialize output arrays
sum_val=nan(n_unique,1);
sum_date=char(zeros(n_unique,size(t,2)))
% Loop over the unique dates
for i=1:n_unique
% Sum the values for the unique date
sum_val(i)=sum(m(find(dn == ud(i))));
% Strore the unique date
sum_date(i,:)=t(b(i),:);
end
sum_val
sum_date