|
Equazioni differenziali ordinarie: maple
Per avere a disposizione tutte le funzioni necessarie conviene caricare alcune librerie:
with(DEtools):
with(plots):
with(LinearAlgebra):
Si definiscono le equazioni, ed eventualmente le condizioni iniziali:
equaz1:=diff(y(x),x)=2*y(x)-z(x)+1;
equaz2:=diff(z(x),x)=-y(x)+ 2*z(x)-3;
iniz1:=y(0)=0.5;
iniz2:=z(0)=2.3;
A questo punto si prova a risolvere, e ad estrarre due funzioni fy e fz da poter poi utilizzare per esempio
per fare un plot.
sol:=dsolve({equaz1,equaz2,iniz1,iniz2});
fy:=unapply(subs(sol,y(x)),x);
fz:=unapply(subs(sol,z(x)),x);
plot({fy(x),fz(x)},x=0..2);
L'opzione numeric forza il solutore a fornire una soluzione numericamente, e in questo caso
si ottiene una procedura che puo' essere utilizzata in vari modi a seconda di come si
vuole estrarre la routine che interessa dalla struttura ottenuta come soluzione.
sol:=dsolve({equaz1,equaz2,iniz1,iniz2},numeric);
sol(1.5);
odeplot(sol,[x,y(x)],0..2);
plot( x -> op(2,op(2,sol(x))), -1..1 );
Proviamo per esempio a disegnare le isocline della equazione differenziale vista precdentemente:
with(DEtools):
with(plots):
with(LinearAlgebra):
F:=DEplot(D(x)(t)=((3-x(t))*x(t)-sin(t)),x(t),t=0..10,x=0..5):
C:=contourplot((3-x(t))*x(t)-sin(t),t=0..10,x=0..5):
display(C,F);
Oppure proviamo a disegnare sullo stesso grafico le soluzioni con tanti punti iniziali:
with(DEtools):
with(plots):
with(LinearAlgebra):
inits:={seq([0,i/10],i=2..20)}:
DEplot(D(x)(t)=(3-x(t))*x(t)-sin(t),x(t),t=0..5,inits);
|