# Diferencijalne jednadžbe za modele rasta

## Eksponencijalni model rasta

Neka je y(x) veličina populacije u trenutku x. Pretpostavljamo da je stopa promjene populacije y'/y konstanta r, tj. da funkcija y zadovoljava diferencijalnu jednadžbu y'=r*y.

rj1: ode2('diff(y,x)=r*y, y, x);

Početna populacija je y(0)=y0.

rj2: ic1(rj1,x=0,y=y0);

y0:100;
r: 1;
wxplot2d(rhs(rj2),[x,0,3]);

y0:100;
r: -1;
wxplot2d(rhs(rj2),[x,0,3]);

## Von Bertalanffyjev model rasta

Brzina rasta ribe proporcionalna je razlici maksimalne i trenutačne veličine ribe.

rj1: ode2('diff(L,t)=k*(L_inf-L),L,t);

rj2: ic1(rj1,t=0,L=L_0);

expand(rj2);

rj3: rj2, L_0=1, L_inf=10,k=0.5;

wxplot2d(rhs(rj3),[t,0,10],[y,0,10]);

## Newtonov zakon hlađenja

Tijelo mijenja temperaturu brzinom koja je proporcionalna razlici njegove temperature i temperature okoline. Neka je y(t) temperatura tijela u trenutku t, a A(t) temperatura okoline u trenutku t. Dobivamo diferencijalnu jednadžbu y'=k(A-y), pri čemu je k>0 pozitivna konstanta. Pretpostavimo da je početna temperatura čaja y(0)=100 i da je temperatura okoline konstanta A(t)=20.

rj1: ode2('diff(y,t)=k*(20-y),y,t);

rj2: ic1(rj1,t=0,y=100);

Konstantu k možemo odrediti iz pretpostavke da se čaj nakon t=5 minuta ohladi na 80 stupnjeva.

jedz: rj2, t=5,y=80;

solve(jedz, k);

konstanta: last(%);

rj3: rj2, konstanta;

wxplot2d(rhs(rj3),[t,0,60]);

Ovako možemo izračunati vrijeme potrebno da se čaj ohladi na 50 stupnjeva:

jedz2: rj3, y=50;

solve(jedz2,t);

float(%);

## Logistička diferencijalna jednadžba

Logistička jednadžba y' = r*(1-y/K)*y supstitucijom N=y/K prelazi u jednostavniji "kanonski" oblik N'=r*(1-N)*N.

kill(r,N,N_0);

ode2('diff(N,t)=r*(1-N)*N,N,t);

%*r, %c=log(C_1)/r, logcontract;

rj1: solve(%,N)[1];

expand(ratdenom(rhs(rj1))/(C_1*exp(r*t)));

%, C_1 = -1/C;

y=K/%;

rj2: rj1, C_1=%c;

rj3: ic1(rj2,t=0,N=N_0);

r: 1;
N_0: 0.1;
wxplot2d(rhs(rj3),[t,0,7],[y,0,1]);

r: -1;
N_0: 0.9;
wxplot2d(rhs(rj3),[t,0,7],[y,0,1]);

r: 1;
N_0: 2;
wxplot2d(rhs(rj3),[t,0,7],[y,0,2]);

load(drawdf);

drawdf(N*(1-N),[x,0,7],[N,0,2],[trajectory_at,0,0.01],[trajectory_at,0,0.1],[trajectory_at,0,0.5],
[trajectory_at,0,0.9],[trajectory_at,0,1.1],[trajectory_at,0,1.5],[trajectory_at,0,2])$

drawdf(-N*(1-N),[x,0,7],[N,0,3],[trajectory_at,0,0.01],[trajectory_at,0,0.1],[trajectory_at,0,0.5],
[trajectory_at,0,0.9],[trajectory_at,0,1.1],[trajectory_at,0,1.5],[trajectory_at,0,2])$

## Gompertzova diferencijalna jednadžba

Gompertzov zakon mortaliteta: B^(y'/y) = K/y (eksponencionalna funkcija s bazom B stope rasta populacije obrnuto je proporcionalna trenutačnoj veličini populacije). Uvođenjem normalizirane populacije N=y/K i sređivanjem dobijemo diferencijalnu jednadžbu N' = -b*N*ln(N), pri čemu je b=1/ln(B).

kill(r,N,N_0);

ode2('diff(N,t)=-b*N*log(N),N,t);

rj1: solve(%,N)[1];

rj2: ic1(rj1,t=0,N=N_0);

y=K*rhs(rj2), log(N_0)=-a;