# cobweb.ode podle Barda Ermentrouta
# nejprve definujeme funkci, jejíž hodnota v každém druhém kroku je hodnota 
# daného zobrazení (v našem případě logistického) a ve zbylých krocích zůstává stejná
# hodnota (protože takto je pavučinový diagram vytvořen - skáčeme mezi funkcí zobrazení a osou 1. kavadrantu)
g(x,y)=if(mod(t,2)<.5)then(f(x))else(y)
# použili jsme k tomu funkci zbytek po dělení dvěma, 
# čas 't' běží diskrétně 0,1,2,..., v případě že je sudý, definuje g(x,y) hodnotu f(x), je-li lichý definuje y
y(t+1)=g(x,y)
x(t+1)=if(t==0)then(x)else(y)
# uvědomme si, že x(t+2)=f(x(t)), x(t+1)=x(t)
f(x)=a*x*(1-x)
par a=3.1
init y=0,x=.25
# vždy musíme začít kreslit v y=0
# x lze volit libovolně mezi 0,1
# ještě vykreslíme funkce f(x),x
par xlo=0,xhi=1,nit=25
# xlo, xhi je nejmenší a největší hodnota na ose x a nit slouží pro přesnost vykreslení funkce f(x) 
# hodnoty f(x)
xx=xlo+(xhi-xlo)*t/nit
# dělení na ose x
aux map=f(xx)
aux st=xx
# nastavení okna
@ xlo=0,ylo=0,xhi=1.001,yhi=1.001
@ nplot=3
# vykreslení funkcí y=x a y=f(x)
@ xp2=st,yp2=st
@ xp3=st,yp3=map
# vykreslení pavučiny
@ xp1=x,yp1=y
# nastavení xpp na diskrétní dynamiku a 25 iterací
@ meth=discrete,total=25
done