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)