La Simulazione nelle Scienze - 2007-08 - Prof. G. Avitabile - Esercitazione 4 Integrazione numerica Realizzeremo un foglio elettronico in cui faremo l'integrazione del modello di crescita logistico, usando un metodo numerico. Ignoreremo il fatto che questo modello ha una soluzione analitica. Il modello è dato dall'equazione dN/dt = γ (1 - N/k) N Per fare l'integrazione dobbiamo definire 4 costanti: i due parametri γ e k, la N iniziale N0, l'intervallo di tempo Δt Faremo l'integrazione col metodo di Eulero. Cominciamo aprendo con Excel un foglio elettronico vuoto. Useremo tre colonne per contenere i tempi, e per ciascun tempo il valore della popolazione N e della sua derivata dN/dt. Per es. decidiamo di usare le colonne B,D,F, iniziando dalla riga 10. Nella riga 9 mettiamo le intestazioni delle colonne, scrivendo t in B9, N in D9 e dN/dt in F9. Scegliamo uno spazio dove mettere i valori costanti, per es. le celle nella colonna H da 3 a 6. In corrispondenza, nella colonna G, indichiamo il significato della costante, scrivendo delta t in G3, gamma in G4, kappa in G5, N0 in G6. Scriviamo i valori nella colonna H: suggerisco 0,2 per Δt (in G3), 0,18 per γ, 500 per k, 20 per N0. Scriviamo in A1 un titolo per il foglio, per es. Integrazione del modello logistico col metodo di Eulero. Ricordate di salvare il foglio ogni tanto, ad evitare perdita del lavoro. Costruiamo la colonna dei tempi, mettendo tempi crescenti da 0 con intervallo Δt. Scriviamo in B10 0 e in B11 la formula per l'incremento: =B10+$H$3 (ricordate i segni $ per H3, che è una costante e non dovrà variare da riga a riga, mentre B10 è senza $). Copiamo la formula in B10 da B11 in giù (suggerisco di arrivare a B210). Otterremo una colonna di tempi crescenti da 0 a 40. Ora bisogna riempire le colonne della popolazione e della sua derivata. Il primo valore di N deve essere quello di N0 contenuto in H6. Pertanto scriviamo in D10 la formula =H6. Comparirà il valore 20. Il primo valore della derivata, da mettere in F10, può essere calcolato, perché conosciamo i valori di t e di N. Scriviamo in F10 la formula γ (1 - N/k) N tenendo conto che γ è in H4, k in H5 e N in D10. La formula da scrivere sarà =$H$4*D10*(1-D10/$H$5) Notate ancora che H4 e H5 si devono scrivere con i $ perché sono valori costanti, mentre D10 è senza i $ perché il valore di N cambierà man mano che passa il tempo. Vediamo ora quale valore dobbiamo mettere in D11, la popolazione dopo il primo intervallo di tempo (nel nostro caso, quando t è passato da 0 a 0,2). Il metodo di Eulero prevede che questo sia il valore all'inizio dell'intervallo (contenuto in D10), aumentato della variazione nell'intervallo. Per calcolare la variazione il metodo di Eulero considera la derivata costante in tutto l'intervallo (mentre in realtà cambia perché N varia istante per istante) e quindi usa il suo valore iniziale, contenuto in F10. La variazione di N è il prodotto della derivata per l'intervallo di tempo Δt. In definitiva, N = Niniz + (dN/dt)iniz* Δt. La formula da scrivere in D11 è =D10+F10*(B11-B10) Per Δt si potrebbe anche usare il valore contenuto in H3, ma consiglio di scriverlo come B11-B10 (differenza fra i t finale e iniziale). Per riempire tutta la colonna D, possiamo ripetere per ciascuna cella il ragionamento fatto per D11, e semplicemente copiare la formula in D11 in tutte le celle sottostanti (fino al tempo finale). Le formule saranno aggiornate nell'operazione di copia, e punteranno sempre alle celle giuste. Dopo questa operazione, i valori contenuti nella colonna D non sono corretti. Non dovete preoccuparvi di questo. Infatti le formule fanno riferimento alla colonna F, che ha le celle ancora vuote. Quando riempiremo anche la colonna delle derivate, poiché le formule nella colonna delle popolazioni sono corrette, vedremo i risultati giusti. Riempire la colonna delle derivate è semplice. La formula contenuta in F10 è valida anche per gli altri tempi, purché faccia riferimento alla popolazione allo stesso tempo (nella stessa riga). Basta copiare la formula in F10 nelle celle sottostanti. Questo permette al foglio di calcolare tutti i valori giusti della popolazione e della sua derivata. Non è invece possibile calcolare i valori giusti di una sola delle due colonne, perché ognuna deve usare i valori nell'altra. A questo punto l'implementazione del modello è completa. Potete costruire il grafico della soluzione: vedrete la curva a S che già conoscete. Potete variare le 4 costanti nella colonna H, e vedere come cambia la soluzione. Salvate questo foglio dandogli un nome (per es. eulero.xls) Confronto con l'integrazione analitica Confrontiamo i risultati ottenuti per integrazione numerica con quelli del file Logistico.xls che calcola i dati usando la soluzione analitica (esatta) N(t) = k*No/[No+(k-No) * e-γ*t ] Cambiamo i 4 valori nella colonna H mettendoci gli stessi usati in Logistico.xls: Δt = 0,12; γ = 0,5; k = 5; N0 = 0,8 e confrontiamo i valori calcolati nei due fogli. Le differenze sono piccole, e rappresentano essenzialmente l'errore commesso nell'integrazione numerica. Notate comunque che gli errori sono abbastanza piccoli, e non impediscono di vedere chiaramente le caratteristiche della curva: l'integrazione numerica è adeguata per darci una soluzione coretta. Variamo i parametri e le altre costanti, in modo uguale nei due fogli. Attenzione: nel foglio Logistico.xls si deve inserire il tempo totale, in quello realizzato da noi l'intervallo di tempo. Quest'intervallo deve essere uguale al valore calcolato τ. I risultati si mantengono all'incirca uguali. Possiamo anche fare il confronto senza che i tempi siano uguali, per es. mettendo come tempo finale T lo stesso tempo finale nell'ultima riga del nostro foglio. Cercate di notare che gli errori sono più piccoli quando l'intervallo di tempo è minore. Integrazione analitica e numerica nello stesso foglio. Per rendere più evidente il confronto, facciamo una copia del file Logistico.xls e realizziamoci dentro anche l'integrazione numerica. Dobbiamo usare due colonne: una per contenere dN/dt (per es. la colonna A), l'altra per contenere N (per es. C). Possiamo intestare la colonna C come "C (numerico)". Per i tempi useremo la colonna E con i valori già presenti. Per N0, γ e k useremo i valori nella colonna I in alto. Scriviamo nelle colonne C e A le formule per la derivata e per l'integrazione col metodo di Eulero, adattando opportunamente quelle scritte nel foglio precedente. Attenzione: i valori in colonna H sono la soluzione analitica e non devono essere usati nel calcolo dell'integrazione numerica. Otterremo la soluzione numerica nella colonna C, da confrontare con la soluzione analitica nella colonna H. Se volete, potete creare anche una colonna con le differenze fra C e H, che sono gli errori di integrazione (potreste usare per questo la colonna I). Riportiamo la soluzione numerica nel grafico. Per farlo dobbiamo creare una nuova serie di dati (la quarta, dopo le 3 che già ci sono). Per questa serie, Excel chiede di riempire 3 caselle: Nome (scriviamo Conigli - numerico); valori X (ricopiamo la formula della prima serie Conigli); valori Y (mettiamo le celle in colonna C da 82 a 182). Vedrete le due curve, e potrete verificare che la loro differenza è minima. Variamo a piacere i valori di T, N0, γ, k e verifichiamo la somiglianza sempre buona fra le due soluzioni. Integrazione numerica del modello malthusiano L'integrazione numerica può essere facilmente applicata a modelli diversi. Costruite in un nuovo foglio l'integrazione del modello malthusiano col metodo di Eulero. La struttura del foglio sarà molto simile a quella che avete realizzato per l'integrazione del modello logistico. L'unica differenza sarà nella formula usata per calcolare la derivata (colonna F). Notate che le formule inserite nella colonna D (che calcolano la popolazione) non hanno bisogno di nessuna modifica. In generale, questo foglio elettronico potrà servire a integrare qualsiasi modello. Basterà assegnare una cella per ogni parametro, e modificare solo la colonna F mettendoci l'equazione del modello. Realizzazione di modelli diversi Immigrazione. Costruiamo un modello di crescita logistica con immigrazione costante. L'equazione potrebbe essere dN/dt = vi + γ (1 - N/k) N Il nuovo parametro vi è la velocità di immigrazione. Se per esempio il tempo è in mesi, vi rappresenta il numero di individui che arrivano ogni mese per immigrazione. Vedrete che i risultati differiscono ben poco dal modello logistico. La principale differenza è che N0 può essere zero: la popolazione inizia comunque a crescere a causa degli immigrati. Se diamo a vi un valore negativo, questo modello rappresenta una emigrazione costante. In questo caso, stiamo attenti che N non diventi mai negativo, che non avrebbe significato. Cosa succede se poniamo γ = 0 ? Modello logistico con variazione stagionale. Modifichiamo il modello logistico, supponendo che la capacità portante k non sia costante, ma vari nel corso di un anno con legge sinusoidale. Sostituiamo k con un'espressione k0 + k1 cos (2πt/12) dove k0 è il valore medio di k, e k1 l'ampiezza delle sue oscillazioni al di sopra e al di sotto. Se il tempo è espresso in mesi, la funzione coseno ha una periodicità di un anno (12 mesi). Per realizzare il modello dovremo assegnare due celle per k0 e k1. La formula della derivata, da inserire in colonna F, farà riferimento alla colonna D (che contiene N) e anche a B (che contiene il tempo t). Potrete realizzare altri modelli lasciando libere la curiosità e la creatività.