Fluidodinamica [Matlab]
Salvea tutti
volevo esporre una semplice questione sul linguaggio Matlab
il seguente codice serve per risolvere le equazioni Shellow Water (un'approssimazione
delle Navier Stokes)
Il vettore che rappresenta l'elevazione della superficie è eta(j,n)
j è l'indice spaziale
n quello temporale
nel codice c'è il comando plot, però, per come ho scritto il codice,
nello stesso plot ci sono sovrapposti tutti i grafici per tutti i valori
di n.
Vorrei invece che per ogni n venisse visualizzato solo un grafico, ovvero
che per ogni n, viene cancellato il grafico precedente e plottato il
grafico per il valore corrente di n. Come posso fare?
grazie
qui c'è il codice
---------------------------------------------------
Nspace=50;
Ntime=20;
H=2;
dx=1;
dt=0.1;
%condizione iniziale
for j=1:Nspace
n=1;
if ( j>Nspace*0.4) & (j
eta(j,n)=0.1;
else
eta(j,n)=0;
end
u(j,n)=0;
end
disp('condizione iniziale')
for k=1:Nspace
disp([k , eta(k)])
end
%plot condizione iniziale
plot(eta)
%loop temporale
for n=1:Ntime
%loop spaziale
for j=2:Nspace-1
%FTCS+lax
u(j,n+1)=0.5*(u(j+1,n)+u(j-1,n))-(0.5*9.8*dt/dx)*(eta(j+1,n)-eta(j-1,n));
eta(j,n+1)=0.5*(eta(j+1,n)+eta(j-1,n))-(0.5*H*dt/dx)*(u(j+1,n)-u(j-1,n));
end
clc
plot(eta);
u(j,n)=u(j,n+1)
eta(j,n)=eta(j,n+1)
end
volevo esporre una semplice questione sul linguaggio Matlab
il seguente codice serve per risolvere le equazioni Shellow Water (un'approssimazione
delle Navier Stokes)
Il vettore che rappresenta l'elevazione della superficie è eta(j,n)
j è l'indice spaziale
n quello temporale
nel codice c'è il comando plot, però, per come ho scritto il codice,
nello stesso plot ci sono sovrapposti tutti i grafici per tutti i valori
di n.
Vorrei invece che per ogni n venisse visualizzato solo un grafico, ovvero
che per ogni n, viene cancellato il grafico precedente e plottato il
grafico per il valore corrente di n. Come posso fare?
grazie
qui c'è il codice
---------------------------------------------------
Nspace=50;
Ntime=20;
H=2;
dx=1;
dt=0.1;
%condizione iniziale
for j=1:Nspace
n=1;
if ( j>Nspace*0.4) & (j
eta(j,n)=0.1;
else
eta(j,n)=0;
end
u(j,n)=0;
end
disp('condizione iniziale')
for k=1:Nspace
disp([k , eta(k)])
end
%plot condizione iniziale
plot(eta)
%loop temporale
for n=1:Ntime
%loop spaziale
for j=2:Nspace-1
%FTCS+lax
u(j,n+1)=0.5*(u(j+1,n)+u(j-1,n))-(0.5*9.8*dt/dx)*(eta(j+1,n)-eta(j-1,n));
eta(j,n+1)=0.5*(eta(j+1,n)+eta(j-1,n))-(0.5*H*dt/dx)*(u(j+1,n)-u(j-1,n));
end
clc
plot(eta);
u(j,n)=u(j,n+1)
eta(j,n)=eta(j,n+1)
end
Risposte
riuppo la discussione
ho provato ad usare il comando "figure"
e mi crea tanti grafici (se Ntime=20 crea 20 grafici) ognuno
dei quali con il grafico del vettore del valore corrente di n, ma
sovrapposto a quelli precedenti
l'ideale per me sarebbe riuscire a plottare y = eta(j,n) (j=1,Nspace)
per ogni valore di n, ovvero
per n=1 plot di y = eta(j,1) (j=1,Nspace)
per n=2 cancellare il plot di n=1 e plottare y = eta(j,2) (j=1,Nspace)
eccetera
ho provato ad usare il comando "figure"
e mi crea tanti grafici (se Ntime=20 crea 20 grafici) ognuno
dei quali con il grafico del vettore del valore corrente di n, ma
sovrapposto a quelli precedenti
l'ideale per me sarebbe riuscire a plottare y = eta(j,n) (j=1,Nspace)
per ogni valore di n, ovvero
per n=1 plot di y = eta(j,1) (j=1,Nspace)
per n=2 cancellare il plot di n=1 e plottare y = eta(j,2) (j=1,Nspace)
eccetera