Non sono solo o a sconsigliarti di usare la funzione "eval":
https://it.mathworks.com/help/matlab/matlab_prog/string-evaluation.html
https://it.mathworks.com/matlabcentral/answers/325760-does-justifiable-use-of-eval-exist
ma non poso certo obbligarti a non usarla.
Se può esserti di aiuto, dai un'occhiata a questa domanda (ed alla serie di risposte - domande - risposte ...) per farti un'idea delle difficoltà alle quali andrai incontro se userai la funzione "eval":
Operazioni sugli indici.
Nelle varie risposte troverai anche delle soluzioni alternative all'uso di "eval" per la creazione delle variabili.
Non so che tipo di matrici ritorni la funzione "netcdf.getVar(ncid,6)", se cioè, ad ogni iterazione la loro dimensione sia sempre la stessa o possa variare.
Nel primo caso, se le matrici hanno sempre la stessa dimensione, puoi creare una matrice con una dimensione in più rispetto a quella della matrice letta con "netcdf.getVar".
Ad esempio:
% Inizializzazione della matrice di output
m=[];
% Ciclo for che simula la lettura
for i=1:2
% Simulazione della lettura
k=randi(100,10,10)
% Assegnazione della matrice letta alla matrice di output
m(:,:,:,i)=k
end
In alternativa, puoi creare una struttura:
for k=1:3
output_str.([ 'Tempday' num2str(k)])=randi(100,10,10,10)
end
Questa soluzione ha due vantaggi, rispetto alla precedente:
[*] non devi lavorare con ua matrice con una dimensione in più
[*] ogni campo della struttura ha il nome della matrice che creeresti con "eval", ma, hai a disposizione una serie di funzioni per accedere ai suoi campi.
Puoi usare "fieldnames" per avere i nomi dei campi in un cellarray che potrai utilizzare, eventualmente, in un loop
Puoi usare "getfield" per avere il contenuto di un campo in particolare, il primo, ad esempio,
getfield(output_str,nomi_matrici{1})
Puoi creare un loop per scandire le varie matrici (i vari campi della struttura) e lavorare su di esse:
for k=1:3
i_esima_matrice=output_str.([ 'Tempday' num2str(k)])
end