prof.:Giulio Giunta prova di laboratorio di : Massimo Di

Transcript

prof.:Giulio Giunta prova di laboratorio di : Massimo Di
Corso di laurea in scienze ambientali
Matematica computazionale con
laboratorio di progammazione e
calcolo 2
prof.:Giulio Giunta
prova di laboratorio di : Massimo Di Stefano (sm\119)
Sviluppare una function Matlab per
determinare la soluzione del sistema di
equazioni alle derivate parziali, su un
segmento, di avvezione (1D) + diffusione
(1D) + predatore - preda di due specie
biologiche le cui concentrazione sono:
V(x,t) e C(x,t)
sistema di equazioni alle derivate
parziali :
2
∂c1
∂c1
∂ c1
+v
= K 2 − ac1 + bc1c2
∂t
∂x
∂x
2
∂c2
∂c2
∂ c2
+v
= K 2 + pc2 − rc1c2
∂t
∂x
∂x
Utilizzare la tecnica del metodo delle linee senza
splitting, con il metodo upwind per l’avvezione e
il metodo centrale esplicito per la diffusione.
๏ Utilizzare la function per risolvere un problema in cui le condizioni al
contorno di inflow sono nulle, le condizioni iniziali delle prede e dei
predatori sono degli impulsi di valore massimo ‘10’ e
‘5’ (rispettivamente), centrati vicino all’estremo sinistro del dominio
(estremo di inflow), la velocità è 0.2, il coefficiente di diffusione è 0.2, i
parametri “a, b, p, r “ del sistema prdtore\preda vengono inseriti come
parametri di imput unitamente al Tempo di simulazione e alla
lunghezza del segmento 1D.
Rate function: AvvDiffPredRateVar
% avvezione diffusione 1D preda predatore. (metodo delle linee)
%
% condizioni al contorno costanti (passate in global)
%
function CVprimo = AvvDiffPredRatevar(t,CV)
global n h x C_x_s C_x_d V_x_s V_x_d a b p r
CVprimo(1:n) = -0.2/h*(CV(1:n)-[C_x_s; CV(1:(n-1))])+0.2/(h^2)*....
([C_x_s; CV(1:n-1)]-2*CV(1:n)+[CV(2:n); C_x_d])-a*CV(1:n)+b*CV(1:n).*CV((n+1):end);
CVprimo(n+1:2*n) = -0.2/h*(CV(n+1:end)-[V_x_s; CV(n+1:end-1)])+0.2/(h^2)*....
([V_x_s; CV(n+1:end-1)]-2*CV(n+1:end)+[CV(n+2:end); V_x_d])+p*CV(n+1:end)-r*CV(1:n).*CV(n+1:end);
CVprimo=CVprimo';
Risoluzione :
%
%
%
%
%
script AvvDiffPredLineeMov
risoluzione dell'equazione di avvezione-diffusione 1D di un predatore e la sua preda
mediante il metodo delle linee (upwind per l’avvezione, centrale esplicito per la
diffusione.
usa la function AVVDiffPredRatevar
-Dichiarazione delle variabili globali
-Istruzioni per acquisire i parametri di imput
global n h C_x_s C_x_d V_x_s V_x_d a b p r
tmax=input('inserire il tempo finale di simulazione');
x_d=input('inserire il limite destro per il segmento 1D');
C_iniz=input('inserire il numero di predatori presenti all''inizio della simulazione');
V_iniz=input('inserire il numero di prede presenti all''inizio della simulazione');
a=input('inserire la costante per la mortalità dei predatori');
p=input('inserire la costante per la natalità dei prede');
b=input('inserire la costante per la predazione dei predatori');
r=input('inserire la costante per la predazione sulle prede');
-Definizione dell’estremo di inflow
-Costruzione della griglia spaziale
x_s = 0; % estremo sin dell'intervallo spaziale
n=100; % numero dei nodi interni della griglia spaziale
x=linspace(x_s,x_d,n+2); h=(x_d-x_s)/(n+1);
-Dichiarazione delle condizioni al contorno e delle condizioni iniziali
-Rappresentazione grafica delle condizioni iniziali
% condizioni al contorno (costanti)
C_x_s = 0; C_x_d = 0; V_x_s = 0; V_x_d = 0;
% condizioni iniziali
CViniz=zeros(2*n,1);
CViniz(1)=C_iniz;
CViniz(n+1)=V_iniz;
plot(x,[0;CViniz(1:n);0])
title('condizione iniziale dei predatori')
pause(5)
plot(x,[0;CViniz(n+1:end);0])
title('condizione iniziale delle prede')
pause(5)
-Risoluzione del sistema di equazioni mediante il solver Matlab ‘ode45’
[t,CV] = ode45('AvvDiffPredRatevar',[0 tmax],CViniz);
[X,T]=meshgrid(x,t);
e=ones(length(t),1);
% si aggiungono le condizioni al contorno su tutta la griglia temporale
C = [e*C_x_s CV(:,1:n) e*C_x_d];
V = [e*V_x_s CV(:,n+1:end) e*V_x_d];
-Rappresentazione grafica 3D dell’evoluzione temporale della popolazione dei predatori
surfc(X,T,C)
shading interp
xlabel('spazio')
ylabel('tempo')
zlabel('numero individui')
title('evoluzione temporale della popolazione dei predatori')
pause(5)
-Rappresentazione grafica 3D dell’evoluzione temporale della popolazione delle prede
figure(2)
surfc(X,T,V)
shading interp
xlabel('spazio')
ylabel('tempo')
zlabel('numero individui')
title('evoluzione temporale della popolazione delle prede')
pause(5)
-Rappresentazione grafica delle prede e dei predatori nello spazio delle fasi
figure(3)
plot(C(:,4),V(:,4))
xlabel('predatori')
ylabel('prede')
title('spazio delle fasi nel punto x=4')
Evoluzione temporale dei predatori
Tmax = 400
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale dei predatori
Tmax = 400
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale dei predatori
Tmax = 400
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale dei predatori
Tmax = 400
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale dei predatori
Tmax = 150
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale dei predatori
Tmax = 150
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale dei predatori
Tmax = 150
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale delle prede
Tmax = 400
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale delle prede
Tmax = 400
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale delle prede
Tmax = 400
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale delle prede
Tmax = 400
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale delle prede
Tmax = 150
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale delle prede
Tmax = 150
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Evoluzione temporale delle prede
Tmax = 150
x = 60
a = 0.9
b = 0.15
p = 0.65
r = 0.1
Rappresentazione nel piano delle fasi
valutata in:
x=4
-Istruzioni Matlab allo scopo di ottenere un’animazione 2D che descriva l’andamento nel tempo
delle popolazioni di prede (‘rosso’) e predatori (‘blu’)
% è necessario avviare la function, inserire tutti i parametri di imput,
% digitare il comando length(t), dividere il risultato per un numero x che indichi ogni quanti passi
% temporali voglio catturare un immagine, nel nostro caso si è scelto x = 3
% (ovvero: visualizza 1 immagine ogni 3 passi temporali).
% con i = 1: (length(t)/x ) .
a=1
for i= 1:625
figure(i);
plot(x,C(a,:),x,V(a,:),'r');
axis([0 60 0 60]);
M(i)=getframe(i);
close
a=a+3;
end
movie(M)
comando matlab per convertire l’animazione in .avi : movie2avi(M,’nomefile’)
Rappresentazione video 2D
prede
(num.
individui)
predatori
(tempo)