#----------------------------------------------------------
# Crescita con risorse limitate
# - http://en.wikipedia.org/wiki/Logistic_function#In_ecology:_modeling_population_growth
# http://en.wikipedia.org/wiki/Pierre_Fran%C3%A7ois_Verhulst
#
# GdA, FSN, 18 maggio 2015
#-----------------------------------------------------------

# funzione logistica
logistica <- function(t, r, K, N0) K/(1+(1/N0-1/K)*K*exp(-r*t))
# con
#     K: popolazione massima sostenibile
#     r: tasso di crescita (intrinseco) per N << K
#     NO: numero iniziale di individui

# parametri 
K  = 100000
r  = 1
N0 = 10

tau.eq = 1/r     # "equivalente" per crescita illimitata

# tempi per fare i plot 
t <- seq(0, 15*tau.eq, by=tau.eq/10)

# curva con K di riferimento (vedi sopra)
plot(t, logistica(t, r, K, N0), ty='l', xlab='t (u)', ylab='N', col='blue')

# curve per altri valori di K
# valori minori
points(t, logistica(t, r, K/1.1, N0), ty='l', col='red')
points(t, logistica(t, r, K/1.5, N0), ty='l', col='red')
points(t, logistica(t, r, K/2, N0), ty='l', col='red')
# valori maggiori
points(t, logistica(t, r, 1.1*K, N0), ty='l', col='cyan')
points(t, logistica(t, r, 1.5*K, N0), ty='l', col='cyan')
points(t, logistica(t, r, 2*K, N0), ty='l', col='cyan')
# valore "infinito"
points(t, logistica(t, r, 100*K, N0), ty='l')

# ripetiamo raddoppando il tasso di crescita (curve tratteggiate)
# valore di K di riferimento
points(t, logistica(t, 2*r, K, N0), ty='l', col='blue', lty=2)
# valori minori
points(t, logistica(t, 2*r, K/1.1, N0), ty='l', col='red', lty=2)
points(t, logistica(t, 2*r, K/1.5, N0), ty='l', col='red', lty=2)
points(t, logistica(t, 2*r, K/2, N0), ty='l', col='red', lty=2)
# valori maggiori
points(t, logistica(t, 2*r, 1.1*K, N0), ty='l', col='cyan', lty=2)
points(t, logistica(t, 2*r, 1.5*K, N0), ty='l', col='cyan', lty=2)
points(t, logistica(t, 2*r, 2*K, N0), ty='l', col='cyan', lty=2)
# valore "infinito"
points(t, logistica(t, 2*r, 100*K, N0), ty='l', lty=2)


