Ci sono almeno due modi per risolvere il problema
nel caso i nomi delle matrici abbiano una radice uguale (es. "a") seguita da un numero progressivo (dato l'intervallo 1 - 4, devono essere definite tutte e quattro le matrici "a1, a2, a3 e a4)
Entrambi i metodi sono basati sull'utilizzo della funzione
built-in "
eval"
help eval
eval Execute string with MATLAB expression.
eval(EXPRESSION) evaluates the MATLAB code in the string EXPRESSION.
[OUTPUT1,...,OUTPUTN] = eval(EXPRESSION) returns output from EXPRESSION
in the specified variables.
Example: Interactively request the name of a matrix to plot.
expression = input('Enter the name of a matrix: ','s');
if (exist(expression,'var'))
plot(eval(expression))
end
Il primo metodo concatena le matrici "direttamente"
senza ricorrere alle funzioni
built-in horzcat o
vertcat.
Date le matrici di input "a1, a2, a3 e a4", il metodo consiste nel generate la stringa
A1=[a1 a2 a3 a4];
da passare come input alla funzione "
eval".
Il secondo metodo, invece,
utilizza le funzioni
built-in horzcat o
vertcat e consiste nella creazione della stringa
A2=horzcat(a1,a2,a3,a4);
da passare come input alla funzione "
eval".
IN entrambi i casi, le stringhe vengono costruite
iterativamente all'interno di un
ciclo for.
Nello script in calce sono stati implementati i due metodi (la funzione "
eval" è stata anche usata per la generazione delle matrici di input).
%
% Definizione del nmero di matrici e creazione di "num_matr" (13) matrici di esempio
%
num_matr=13;
for i=1:num_matr
eval(['a' num2str(i) '=magic(2)*i*3;'])
end
%
% Definizione della modalità di concatenazione
%
concat_mode='horzcat';
% concat_mode='vertcat';
%
% Controllo della validità della modalità di concatenazione e definizione
% della stringa "mode_str" usata per la concatenazione
%
if(strcmp(concat_mode,'horzcat'))
mode_str=' ';
elseif(strcmp(concat_mode,'vertcat'))
mode_str=';';
else
error(['Modalità di concatenazione matrici non riconosciuta: ' concat_mode])
end
%
% Definizione della radice del nome delle matrici da concatenare
%
mat_name_root='a';
%
% Definizione del nome della matrice output
%
out_mat_name='A1';
%
%%%%%%%%%%%%
% METODO 1 %
%%%%%%%%%%%%
%
% Concatenazione diretta (senza utilizzo delle funzini built-in "horzcat",
% "vertcat"
%
% Inizializzazione della stringa di comando "cmd_str" da passare alla
% funzione "eval"
%
cmd_str=[out_mat_name '=['];
%
% Loop per la costruzinoe della stringa di comando "cmd_str"
%
for i=1:num_matr
cmd_str=[cmd_str, mat_name_root, num2str(i) mode_str];
end
%
% Completamento della stringa di comando "cmd_str"
%
cmd_str=[cmd_str '];'];
%
% Invocazione della funzione "eval" per l'esecuzione del comando definito
% nella stringa di comando "cmd_str"
%
disp('Metodo 1: concatenazione diretta');
cmd_str
eval(cmd_str)
%
%%%%%%%%%%%%
% METODO 2 %
%%%%%%%%%%%%
%
% Concatenazione con l'utilizzo delle funzini built-in "horzcat", "vertcat"
%
% Definizione del nome della matrice output
%
out_mat_name='A2';
%
% Controllo della validità della modalità di concatenazione
%
if(~(strcmp(concat_mode,'horzcat') || strcmp(concat_mode,'vertcat')))
error(['Modalità di concatenazione matrici non riconosciuta: ' concat_mode])
end
%
% Inizializzazione della stringa di comando "cmd_str" da passare alla
% funzione "eval"
%
cmd_str=[out_mat_name '=' concat_mode '('];
%
% Loop per la costruzinoe della stringa di comando "cmd_str". Il loop non
% considera l'ultima matrice per non inseriere la "," al termine della
% stringa. Il nome dell'ultima matrice viene aggiunto alla stringa di
% comando subito dopo il loop
%
for i=1:num_matr-1
cmd_str=[cmd_str, mat_name_root, num2str(i) ','];
end
%
% Completamento della stringa di comando "cmd_str"
%
cmd_str=[cmd_str , mat_name_root, num2str(i+1) ');'];
%
% Invocazione della funzione "eval" per l'esecuzione del comando definito
% nella stringa di comando "cmd_str"
%
disp(['Metodo 2: concatenazione con "' concat_mode '"']);
cmd_str
eval(cmd_str)
Hope this helps.