La creazione dinamica di variabili, anche se possibile, è assolutamente sconsigliata.
https://it.mathworks.com/matlabcentral/answers/16442-why-eval-and-evalin-are-not-recommended
https://it.mathworks.com/help/matlab/matlab_prog/string-evaluation.html
https://it.mathworks.com/matlabcentral/answers/325760-does-justifiable-use-of-eval-exist
Nel domanda hai scritto che
il cui numero di componenti può variare in base a dei parametri iniziali
ammesso di riuscire a creare in modo automatico le matrici, come pensi di poterle utilizzare nel prosieguo del codice se non sai neanche quante sono?
La cosa migliore che tu possa fare è riconsiderare la struttura del codice e trovare una soluzione che non richieda la creazione automatica di variabili.
Se proprio non ci riesci, puoi provare ad utilizzare una struttura (che consente la definizione automatica del nomi dei suoi campi o un cellarray.
A titolo di esempio, Il codice che segue, crea la struttura ed il cellarray:
clear var*
% Creazione del vettore di input x"
while(1)
x=unique(sort(randi(10,1,5)))
if(length(x) > 3)
break
end
end
% Definizione del vettore delle differenze tra gli elementi (il primo elemento è uguale al primo elemento del vettore "x")
y=[x(1) diff(x)]
% Creazione della struttura di output: ogni campo contiene una matrice (m x 2), inizializzata a "0"
for i=1:length(y)
var.(['mat_' num2str(i)])=zeros(y(i),2);
end
% Creazione del cellarray di output: ogni elemto contiene una matrice (m x 2), inizializzata a "0"
for i=1:length(y)
var_c{i}=zeros(y(i),2);
end