Una possibile soluzione può utilizzare la funzione "
eval" per creare automaticamente, all'interno di un "
ciclo for", i vettori nei quali si vuole dividere il vettore originale.
A=[1,1,3,0,0,0,0,4,4,6,5,6,0,0,0,0,0,0,0,4,2,2];
n=length(A);
%
% Contatore vettori nei quali viene suddiviso il vettore A
%
cnt=1;
%
% Contatore elementi dei vettori nei quali viene suddiviso il vettore A
%
j=1;
%
% Creazione primo vettore
% I vettori nei quali il vettore A viene diviso vengono chiamati "A_x" dove
% "x" è il numero progressivo ==> A_1, A_2, ... A_n
%
eval(['A_' num2str(cnt) '=[];']);
%
% Loop su tutti gli elemento del vettore A
for i=1:n
% Se lo i-esimo elemento di A è diverso da 0 viene inserito nel vettore
% corrente ed il contatore degli elementi viene incrementato
%
if(A(i) ~= 0)
eval(['A_' num2str(cnt) '(' num2str(j) ')= A(' num2str(i) ');'])
j=j+1;
else
% Se lo i-esimo elemento di A è uguale a 0 viene scartato, il contatore
% dei vettori viene incrementato e viene creato un nuovo vttore. Il
% controllo sul contatore j viene utilizzato per non creare un nuovo
% vettore nel caso in A ci siano 2 o più 0 consecurtivi
%
if(j ~= 1)
cnt=cnt+1;
eval(['A_' num2str(cnt) '=[];'])
end
j=1;
end
end
%
% Nel caso il vettore A termini con uno o più 0, l'ultimo vettore creato
% viene cancellato in quanto risulta vuoto ed il contatore viene
% decrementato di 1
%
eval(['if(isempty(A_' num2str(cnt) ')), clear A_' num2str(cnt) ';cnt=cnt-1;end'])
%
% Al termine dello script vengono visualizzati il vettore A ed i vettori
% nei quali è stato diviso
%
A
for i=1:cnt
eval(['A_' num2str(i)])
end
Il vettore "
A" viene quindi suddiviso nei tre vettori "
A_1, A_2, A_3"
A =
Columns 1 through 12
1 1 3 0 0 0 0 4 4 6 5 6
Columns 13 through 22
0 0 0 0 0 0 0 4 2 2
A_1 =
1 1 3
A_2 =
4 4 6 5 6
A_3 =
4 2 2
Hope this helps