Matlab ciclo for (problema elementare)

di il
5 risposte

Matlab ciclo for (problema elementare)

Buongiorno a tutti,
Questo è il mio primo post quindi spenderò due righe per presentarmi alla community; sono un neolaureato in ingegneria civile, adesso mi trovo ad Exeter (UK) e sto portando avanti un progetto condiviso tra la mia università in Italia e quella di Exeter. Il mio campo di specializzazione è l'idraulica, essenzialmente condotte in pressione. In questo periodo sto lavorando sulla ricerca di perdite nei sistemi di distribuzione di acquedotti.
Veniamo al punto, mi sono bloccato su una cosa stupidissima ma non trovo la soluzione...
All'interno del ciclo for gira Epanet che mi restituisce una matrice delle pressioni [P], ad ogni ciclo mi sovrascrive con i nuovi dati la matrice, io ho bisogno di 'ricordarli'. ES.
for i=1:5
epanet
[P]=valoridaEpanet
...
clearvar -ecept P1 P2 P3 P4 P5
end
Come faccio a creare i P1 P2...

5 Risposte

  • Re: Matlab ciclo for (problema elementare)

    Lunatix ha scritto:


    Buongiorno a tutti,
    Questo è il mio primo post quindi spenderò due righe per presentarmi alla community; sono un neolaureato in ingegneria civile, adesso mi trovo ad Exeter (UK) e sto portando avanti un progetto condiviso tra la mia università in Italia e quella di Exeter. Il mio campo di specializzazione è l'idraulica, essenzialmente condotte in pressione. In questo periodo sto lavorando sulla ricerca di perdite nei sistemi di distribuzione di acquedotti.
    Veniamo al punto, mi sono bloccato su una cosa stupidissima ma non trovo la soluzione...
    All'interno del ciclo for gira Epanet che mi restituisce una matrice delle pressioni [P], ad ogni ciclo mi sovrascrive con i nuovi dati la matrice, io ho bisogno di 'ricordarli'. ES.
    for i=1:5
    epanet
    [P]=valoridaEpanet
    ...
    clearvar -ecept P1 P2 P3 P4 P5
    end
    Come faccio a creare i P1 P2...
    Ciao per le presentazioni puoi anche usare la sezione apposita : Indice->Area Software->Il Bar dei Programmatori->Presentazioni


    A quanto ho capito ti occorre una lista di matrici. Potresti dichiararti una struttura a 3 dimensioni : NxMxL, dove L è il numero di matrici restituite, NxM la dimensione della matrice restituita da Epanet, che per come hai detto è una matrice delle pressioni. Per dichiarare la struttura puoi usare la funzione
    P = zeros(N,M,L)
    Come vedi gli dai in input le 3 dimensioni ed inizialmente ti crea una struttura a 3 dimensioni inizializzata con tutti zeri. Per accedere alla struttura creata e quindi salvare la i-esima matrice immagino che puoi fare così:
    P(:,:,i) = valoridaEpanet
  • Re: Matlab ciclo for (problema elementare)

    Ci sono diverse possibilità:

    - si può usare un "cellarray" all'interno del quale memorizzare la matrice "P" ad ogni iterazione:
    
    cell_P{i}=P;
    
    - si può usare una "struct"
    
    struct_P.(['mat_P_' num2str(i)])=P;
    
    In questo caso i campi della struttura vengono creati in modo dinamico ad ogni iterazione.

    Al momento non ho accesso a MatLab per cui non posso "verificare" la correttezza "sintattica" delle soluzioni, ma ... dovrebbero funzionare.

    Hope this helps.
  • Re: Matlab ciclo for (problema elementare)

    Grazie molte, problema risolto!
  • Re: Matlab ciclo for (problema elementare)

    Lunatix ha scritto:


    Grazie molte, problema risolto!
    Quindi alla fine qual è stata la tua soluzione ??
  • Re: Matlab ciclo for (problema elementare)

    CarDeFusco ha scritto:


    Lunatix ha scritto:


    Grazie molte, problema risolto!
    Quindi alla fine qual è stata la tua soluzione ??
    Ciao, scusa per il ritardo, siccome sto imparando ad usare matlab le ho provate tutte, ma alla fine ho utilizzato il comando struct dentro al ciclo for e poi ho richiamato all'occorrenza le matrici che mi servivano.
Devi accedere o registrarti per scrivere nel forum
5 risposte