Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [MATLAB] Nome di matrice che dipende da un int

    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
    codice:
     
    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?
    Mario Giuffrida

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Lo devi fare per forza iterativamente, cioè specificando ogni volta il nome.
    Come ad esempio:
    codice:
    for i=1:4
        if i==1
            tizio_1=matrice_gia_esistente;
        end;
        % e cosi pure con gli altri
    end;

  3. #3
    Non conosco matlab, ma non puoi semplicemente dichiarare tizio come array di matrici?
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Originariamente inviato da ramy89
    Lo devi fare per forza iterativamente, cioè specificando ogni volta il nome.
    Come ad esempio:
    codice:
    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:

    codice:
    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 ?
    Mario Giuffrida

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    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.

  6. #6
    Ribadisco... non è possibile fare un array di matrici e usare i come indice in questo array?
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Originariamente inviato da MItaly
    Ribadisco... non è possibile fare un array di matrici e usare i come indice in questo array?
    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
    Mario Giuffrida

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    for i=i:4
        tizio(i)=matrice_già_esistente;
    end;

  9. #9
    Originariamente inviato da ramy89
    codice:
    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
    Mario Giuffrida

  10. #10
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ma a te il metodo di scrivere:
    codice:
    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:
    codice:
    elseif i==2
        tizio_2=matrice_gia_esistente;
    end;
    ...ecc...
    Con le rispettive variabili, concatenando il nome della variabile tizio_ a i .

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.