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à.