[MatLab] plottare funzioni in un unico grafico e un ciclo for
Salve, ho un sistema di eq che risolvo con ode23s. Questo sistema di equazioni dipende da un parametro "psi". Il mio obiettivo è risolvere il sistema per tutti i vari "psi" possibili.
Il codice che ho scritto è
ora il mio problema è che vorrei plottare tutte le soluzioni nello stesso grafico, ma con questo codice ovviamente, il vettore "sol" viene sovrascritto ogni volta e quindi è inutile...
qualcuno può darmi un mano?
Il codice che ho scritto è
for i=1:length(all_psi) handler = @(t, y) sistema(t, y, all_psi(i)); [time, sol] = ode23s(handler, [0 10], [z_0 teta_0]); end
ora il mio problema è che vorrei plottare tutte le soluzioni nello stesso grafico, ma con questo codice ovviamente, il vettore "sol" viene sovrascritto ogni volta e quindi è inutile...
qualcuno può darmi un mano?
Risposte
prova a creare una "figure" prima del ciclo e bloccala con "hold". Dopo di che nel ciclo usi "plot" per plottare ogni volta la variabile.
Grazie! funziona alla perfezione!
Eh già che ci sono mi piacerebbe farti un'altra domanda. Se invece di avere solo un grafico e quindi usare semplicemente "plot", volessi (nella stessa "figure") due grafici dovrei usare "subplot". Però sempre che "hold" non funzioni in presenza di subplot perché può gestire un solo grafico alla volta. Qualche suggerimento ?
Grazie ancora comunque
Grazie ancora comunque
sinceramente non ho mai usato subplot ma comunque non ho capito bene la domanda. Pensi che "hold" non funzioni con "subplot" ? "hold" blocca la "figure" per cui non dovresti avere problemi ad usare subplot. Poi comunque bisogna provare e vedere quali problemi vengono fuori.
Se proprio sei in difficoltà ti salvi tutti i vettori e matrici e poi li plotti per bene in un altro ciclo.
Se proprio sei in difficoltà ti salvi tutti i vettori e matrici e poi li plotti per bene in un altro ciclo.
Di solito in una figure c'è solo un grafico. Con subplot ne puoi mettere più di uno. Hold non funzione se viene usato il comando subplot perché blocca un grafico alla volta (ho provato ma non funziona lo script quando lo compilo).
eh ma non riesco a capire come salvare la variabile "sol". Essa è una matrice 2xn (n dipende dal passo di integrazione) quindi per salvarla avrei bisogno di vettore di matrici e non ho capito come si fa su matlab.
Se proprio sei in difficoltà ti salvi tutti i vettori e matrici e poi li plotti per bene in un altro ciclo.
eh ma non riesco a capire come salvare la variabile "sol". Essa è una matrice 2xn (n dipende dal passo di integrazione) quindi per salvarla avrei bisogno di vettore di matrici e non ho capito come si fa su matlab.
"dRic":
eh ma non riesco a capire come salvare la variabile "sol". Essa è una matrice 2xn (n dipende dal passo di integrazione) quindi per salvarla avrei bisogno di vettore di matrici e non ho capito come si fa su matlab.
Questo è abbastanza semplice in matlab, basta aggiungere un altro indice alla variabile. Per esempio invece di avere solo le coordinate x e y, hai anche z. Leggi gli help di matlab perchè possono aiutare molto.
Comunque ho trovato questo che potrebbe esserti utile: https://it.mathworks.com/matlabcentral/answers/300344-problem-with-hold-on-into-a-subplot-inside-a-for-loop
"mide":
Questo è abbastanza semplice in matlab, basta aggiungere un altro indice alla variabile. Per esempio invece di avere solo le coordinate x e y, hai anche z. Leggi gli help di matlab perchè possono aiutare molto.
Non ho ben capito cosa intendi. Io ho trovato che si può fare usando gli array 3D, ma ancora non ho capito bene come usarli.
Nei prossimi giorni spippolo un po' per vedere cosa riesco a fare, grazie mille dei consigli comunque!
intendevo così: sol[i,j,k]. Dove "i" e "j" sono le dimensioni che stai usando e "k" e l'altra che dovresti aggiungere. In questo modo per ogni "k" avrai una matrice sol[i,j]. Prova a creare un array in 3D e guarda come matlab lo organizza.
Comunque dai un'occhiata all'help e in caso ci risentiamo sul forum
.
Comunque dai un'occhiata all'help e in caso ci risentiamo sul forum
