Con riferimento al codice che hai inserito:
s.locs è una matrice di double che ha dimensione variabile
str = s(1,k).locs(:,1);
tmp = datevec(str);
str sarà un vettore colonna,
supponiamo di 3 elementi
"tmp" sarà una matrice (3 x 6)
L'errore si verifica nell'istruzione
dateAll(k,:) = tmp;
perchè vuoi assegnare una matrice (3 x 6) ad una riga di una matrice.
Per eliminare l'errore, le matrici "
dateAll",
dateBeg" e "
dateEnd" devono essere definite come matrici a 3 dimensioni come nell'esempio che segue.
% Generazione della struttura di eempio
s(1).locs=[725000.0 725000.3;
725001.0 725002.9;
725030.0 725004.1]
s(2).locs=[725030.0 735000.3;
726001.0 725003.9;
% 732145.8 800000.1
727030.0 725704.1]
% Identificazione del numero di colonne della struttura
nCols=size(s,2)
% Loop sugli elemenrti della matrice di strutture
for i=1:nCols
dateAll(:,:,i)=datevec(s(i).locs(:,1))
end
Questo approccio funziona se i campi "locs" dei vari elementi di"s" hanno tutti lo stesso numero di righe (prova a "scommentare" la riga commentata nella definizione di "s(2).loc").
Per una soluzione più generale che funzioni anche nel caso il numero di righe delle matrici "locs" non sia lo stesso per ogni elemento della struttura "s", puoi usare dei "cellarray" al posto delle matrici "
dateAll",
dateBeg" e "
dateEnd" come nell'esempio che segue:
% Generazione della struttura di eempio
s(1).locs=[725000.0 725000.3;
725001.0 725002.9;
725030.0 725004.1]
s(2).locs=[725030.0 735000.3;
726001.0 725003.9;
732145.8 800000.1
727030.0 725704.1]
% Identificazione del numero di colonne della struttura
nCols=size(s,2)
% Loop sugli elemenrti della matrice di strutture
for i=1:nCols
% dateAll(:,:,i)=datevec(s(i).locs(:,1))
dateAll{i}=datevec(s(i).locs(:,1))
end
Per accedere direttamente alle matrici allocate in ogni elemento del cellarray:
m=[dateAll{i}]
dove "i" è l'i-esimo elemento del cellarray.
Hope this helps.