PDA

Visualizza la versione completa : [MATLAB] Nome di matrice che dipende da un int


marej89
28-10-2011, 20:46
Salve,
mi sto cimentando da poco con la programmazione e avrei un problema:
A me interessa che il nome di una matrice dipenda da un'int che varia con un ciclo for.

esempio


for i = 1:4
tizio_i = matrice_già_esistente
end



praticamente io voglio che a posto di tizio_i, ci siano tizio_1, tizio_2, tizio_3 e tizio_4

Come si può fare?

ramy89
29-10-2011, 15:25
Lo devi fare per forza iterativamente, cioè specificando ogni volta il nome.
Come ad esempio:


for i=1:4
if i==1
tizio_1=matrice_gia_esistente;
end;
% e cosi pure con gli altri
end;

MItaly
29-10-2011, 15:46
Non conosco matlab, ma non puoi semplicemente dichiarare tizio come array di matrici? :confused:

marej89
30-10-2011, 11:33
Originariamente inviato da ramy89
Lo devi fare per forza iterativamente, cioè specificando ogni volta il nome.
Come ad esempio:


for i=1:4
if i==1
tizio_1=matrice_gia_esistente;
end;
% e cosi pure con gli altri
end;


era un'ottima idea, solo che l'indice i non so fino a quanto arriva...avevo scritto un caso generale. Metto il codice originale così magari si capisce meglio cosa voglia:


function Filtra(dataset,rec, step)
struttura = Carica(dataset,rec,step); % 15240xNel

%costruisco il filtro
f1= 0.5;
f2 = 55;
n = 6;
sf = 254.31;


Wn = [f1 f2]/(sf/2);
[b a] = butter(n, Wn, 'bandpass');

%TROVA IL NUMERO DI MINUTI DELLA STRUTTURA
s = fieldnames (struttura);
s_= size (s);
min = s_(1);
%FILTRIAMO MINUTO PER MINUTO
vmatrix = struct2cell (struttura); %ho trasformato la struct in matrice.
for i = 1 : min
meg_signal_ = vmatrix {i, 1};
ss = size (meg_signal_);
Nel = ss (2);
for j = 1 : Nel
meg_signal_(:,j) = filter(b, a, meg_signal_(:,j));
end
%creare il salvataggio

path = 'D:\MEG_OCD/02_Data_Artefact_Instr_Rem';


save([path,'/dati','/meg_signal_',num2str(i),'_', num2str(rec)], 'meg_signal_');
end
end


sto facendo un'ottimizzazione processamento dati.
Mi serve cambiare il nome delle matrici meg_signal_ filtrate, differenziandole ognuna dal termine i che va da 1 a min, con min che non si sa a priori.
Non esiste qualche metodo iterativo come mi hai suggerito con l'if che incrementa fino a min ?

ramy89
30-10-2011, 19:04
Non mi viene in mente alcun metodo, l' unica sarebbe generare un altro file matlab che sostituisce il nome delle variabili con quelle ottenute concatenando meg_signal_ al valore di i.In matlab si consente l' assegnamento del valore delle variabili, il nome della variabile è solo significativo, non credo possa essere manipolato.

MItaly
30-10-2011, 19:14
Ribadisco... non è possibile fare un array di matrici e usare i come indice in questo array? :confused:

marej89
31-10-2011, 11:24
Originariamente inviato da MItaly
Ribadisco... non è possibile fare un array di matrici e usare i come indice in questo array? :confused:

Scusami, ma come ho scritto nel primo post ancora non sono molto pratico con i linguaggi di programmazione.
Potresti tradurre la tua idea con qualche esempio in codice?
grazie

ramy89
31-10-2011, 11:26
for i=i:4
tizio(i)=matrice_già_esistente;
end;

marej89
31-10-2011, 12:18
Originariamente inviato da ramy89


for i=i:4
tizio(i)=matrice_già_esistente;
end;


Non risolvo il mio problema purtroppo :(
Anche utilizzando le cell, riesco a mettere tutto quello che voglio dentro, ma non riesco a dare il nome che voglio! uff :dhò:

ramy89
31-10-2011, 12:46
Ma a te il metodo di scrivere:


for i=1:4
if i==1
tizio_1=matrice_gia_esistente;
end;
% e cosi pure con gli altri
end;

Ti va bene se non fosse per il fatto che devi scrivere a mano tutti gli elseif?
Perchè se ti va bene, puoi scrivere un file in C che ti genera una porzione di codice MATLAB che ti sostituisce tutti gli:


elseif i==2
tizio_2=matrice_gia_esistente;
end;
...ecc...

Con le rispettive variabili, concatenando il nome della variabile tizio_ a i .

Loading