L’anno scorso, questi signori hanno vinto un premio Nobel
Michael Rosbash, Jeffrey C. Hall, and Michael W. Young
Ma cosa hanno fatto?
Hanno identificato i meccanismi fondamentali dietro il ritmo circadiano
Più in dettaglio, come funziona?
Ma come fa ad invertirsi l’andamento? La reazione è autocatalitica
Il ritmo circadiano è un esempio di oscillatore biologico
Oscillatore di Van der Pol (discretizzato)
Consideriamo una versione discretizzata dell’oscillatore di Van der Pol:
x(t+1)=x(t)+hy(t)y(t+1)=y(t)+h(μ(1−x(t)2)y(t)−x(t))
Si dice sistema dinamico un sistema che ha uno stato che varia nel tempo
Per questa ragione, il nostro sistema dinamico si dice tempo-discreto
Un sistema dinamico tempo discreto è caratterizzato dall’equazione:
x(t+1)=f(x(t))
Per simulare l’andamento dello stato basta invocare ripetutamente f:
Usiamo come esempio il nostro oscillatore:
x(t+1)=x(t)+hy(t)y(t+1)=y(t)+h(μ(1−x(t)2)y(t)−x(t))
Per l’implementazione, iniziamo dalla funzione di transizione:
function Xf = f(X, h, mu)
% "Spacchetto" lo stato (per comodità)
x = X(1);
y = X(2);
% Calcolo lo stato futuro
Xf(1) = x + h * y;
Xf(2) = y + h * (mu * (1 - x^2)*y - x);
end
X
dovrà contenere lo stato corrente…Xf
Quindi possiamo effettuare la simulazione in uno script:
Prima definiamo i dati del problema:
Quindi possiamo effettuare la simulazione in uno script:
Poi effettuiamo la simulazione vera e propria:
Quindi possiamo effettuare la simulazione in uno script:
Infine disegniamo l’andamento delle grandezze che ci interessano
...
% "Spacchetto" le due componenti dello stato
x = X(:, 1); % Prima colonna
y = X(:, 2); % Prima colonna
% Disegno l'andamento nel tempo
plot(T, x)
Potete trovare il codice nello start-kit
Studiate il comportamento dell’oscillatore
Il codice è disponibile nello start-kit nel file es_van_der_pol.m
Risposte:
Consideriamo una particella in moto:
Si modelli il moto come un sistema dinamico
(0,0)
Nel file di script random_walk2.m
, definite la funzione:
xf
a partire da quello corrente xc
Come scegliere la direzione?
rand
per generare un numero v casuale in (0,1)Trovate il codice della soluzione nello start-kit
Modello di Ricker
È un sistema dinamico tempo-discreto caratterizzato dall’equazione:
x(t+1)=x(t)er(1−x(t)N)
È nato per modellare l’evoluzione di una popolazione di pesci
Il sistema può essere simulato in modo analogo a quanto visto
Il modello di Ricker può assumere una varietà di comportamenti:
Partite dal file es_ricker.m
nello start-kit
Determinate per via empirica per quali valori di r:
Consideriamo una particella in moto:
Si modelli il moto come un sistema dinamico
0
Nel file di script random_walk1.m
, definite:
La funzione di transizione:
xf
a partire da quello corrente xc
Per scegliere la direzione, usiamo la tecnica vista in random_walk2.m
Sia data una popolazione che cresce secondo il modello
x(t+1)=rx(t)1+x(t)N
Dove:
Il modello è nato per applicazioni simili a quello di Ricker
Si implementi un simulatore per il modello
In particolare, partite dal file es_beverton_holt.m
nello start-kit:
Definite la funzione di transizione:
xf
a partire da quello corrente x
Studiate per via empirica il comportamento del sistema:
Il computer non gioca a dadi
Allora come fa Matlab a generare numeri casuali?
Risposta: barando! :-)
Si parla di numeri pseudo-casuali
Come esempio consideriamo il Linear Congruential Generator
È semplicemente la successione data da:
Xn+1=(aXn+c) mod m
Ricordate che x \mod y è il resto della divisione intera tra x e y
mod(x, y)
help
Nel file es_lcg.m
si definisca la funzione:
R
Nello script, si effettuino dei test:
my_lcg
in sequenza con diversi valori di X0
I valori prodotti possono sembrare casuali…
Sia data una popolazione che cresce secondo il modello
x^{(t+1)} = \frac{r\, x^{(t)}}{1 + \left(\frac{x^{(t)}}{N}\right)^2}
Dove:
Il modello è nato per applicazioni simili a quello di Ricker
Si implementi un simulatore per il modello
In particolare, partite dal file es_shepherd.m
nello start-kit:
Definite la funzione di transizione:
xf
a partire da quello corrente x
Studiate per via empirica il comportamento del sistema:
Nel file es_transpose.m
si definisca la funzione:
A
Nel file es_count.m
, si definisca la funzione ausiliaria:
Che, dato un vettore di ingresso V
, restituisca U
e C
tali che:
U
contenga gli elementi distinti di V
v
in U
, la cella corrispondente di C
…v
in V
I.e. la funzione deve contare le occorrenze di ogni elemento.
Suggerimento: potete ottenere U
con la funzione unique
di Matlab
Matlab fornisce la funzione:
P(ii)
del vettore restituito…V
negli indici da 1
a ii
Quindi, per esempio:
Nel file di funzione es_cumprod.m
, si definisca una funzione:
cumprod
Si verifichi la correttezza nella funzione principale:
cumprod
in Matlab“Bubble sort” un algoritmo semplice per ordinare un vettore
Ricordate l’esempio dell’ordinare l’aula nella prima lezione?
Ecco un possibile pseudo-codice
Sia dato un vettore V non necessariamente ordinato di lunghezza n
false
La difficoltà è capire come effettuare lo scambio
Nel file es_bubble.m
, definite la funzione:
V
utilizzando bubble sort…V
stesso (vedi nome della variabile di ritorno)Verificate la correttezza nella funzione principale es_bubble
:
sort
: