Ze względu na szybkość współczesnych procesorów, rozwiązywanie setek równań różniczkowych zwyczajnych w czasie rzeczywistym nie stanowi żadnego problemu. Dołączając do tego progranowanie dynamiczne (funkcje pamietające) możemy analizować procesy opisane skompilkowanymi układami r. różniczkowych zdyczajnych (ODE) z dziecinną łatwością. Dla przykładu podaję niżej przykład funkcji pamiętającej numeryczne rozwiązania r. Lotki-Volterry dla dowolnych parametrów i warunków początkowych:

lv[X0_?NumberQ, Y0_?NumberQ,a_?NumberQ,b_?NumberQ,c_?NumberQ,d_?NumberQ]:=lv[X0,Y0,a,b,c,d]=Module[{τ,x,y,rozw},
rozw=NDSolve[{y'[τ]==(c *x[τ]-d)*y[τ],x'[τ]==(a-b*y[τ])*x[τ],x[0]==X0,y[0]==Y0},{x,y},{τ,0,100}][[1]];
{x[t],y[t]}/.rozw
]

Funkcja ta generuje i zapamiętuje całe funkcje interpolujące, co jest najszybszą metodą

lv[1,2,3,4,5,6]

Sprawdzamy czy funkcja generuje liczby, w przeciwnym wypadku nie będzie mozna jej narysować:

%/.t->3

Możemy narysować rozwiązanie dla dowolnej kombinacji sześciu parametrów:

Plot[lv[1,2,3,4,5,6],{t,0,10}]

A także manipulować parametrami, np. warunkami początkowymi, obserwując jak odejście od stanu równowagi (linie przerywane) powoduje oscylacje:

Manipulate[Plot[Evaluate[Join[lv[ofiara,drapieznik,1/3,1/2,4/3,2],{3/2,2/3}]],{t,0,100},PlotStyle->{Red,Black,{Red,DotDashed},{Black,DotDashed}},PlotRange->{{0,40},{0,5}}],{{ofiara,3/2},1/10,2,1/20},{{drapieznik,1/2},1/10,2,1/20}]

Manipulate[ParametricPlot[Evaluate[{lv[ofiara,drapieznik,1/3,1/2,4/3,2],{3/2,t},{t,2/3}}],{t,0,100},PlotRange->{{0,4},{0,4}},AspectRatio->1],{{ofiara,3/2},1/10,2,1/20},{{drapieznik,1/2},1/10,2,1/20}]

MaxMemoryUsed[]