Oto rozwiązania symboliczne typowych równań różniczkowych. Komenda dsolve: równanie, ewentualnie z warunkami początkowymi + nazwa zmiennej zależnej. Uwaga - w równaniu należy pisać zawsze zmienną zależną z argumentem - zmienną niezależną.

>    dsolve(diff(x(t),t)=t*sqrt(1+x(t)^2),x(t));

x(t) = sinh(1/2*t^2+_C1)

>    dsolve(diff(x(t),t$2)+x(t)=cos(t)+cos(2*t),x(t));

x(t) = sin(t)*_C2+cos(t)*_C1+1/4*cos(t)+1/2*sin(t)*t-2/3*cos(t)^2+1/3

Poniżej rozwiązywanie równania w postaci szeregu potęgowego. Liczbę wyświetlanych wyrazów szeregu można modyfikować przyjmujac np. Order:=10. Wartość standardowa tego parametru 6.

>    dsolve({2*t^2*diff(x(t),t$2)+t^2*diff(x(t),t)+x(t)=1},x(t),series);

x(t) = _C1*t^(1/2-1/2*I)*(series(1-1/4*t+(7/160+1/160*I)*t^2+(-11/1920-1/640*I)*t^3+(31/52224+1/4352*I)*t^4+(-53/1044480-13/522240*I)*t^5+O(t^6),t,6))+_C2*t^(1/2+1/2*I)*(series(1-1/4*t+(7/160-1/160*I)*...
x(t) = _C1*t^(1/2-1/2*I)*(series(1-1/4*t+(7/160+1/160*I)*t^2+(-11/1920-1/640*I)*t^3+(31/52224+1/4352*I)*t^4+(-53/1044480-13/522240*I)*t^5+O(t^6),t,6))+_C2*t^(1/2+1/2*I)*(series(1-1/4*t+(7/160-1/160*I)*...

Zauważmy, że MAPLE czasami używa funkcji specjalnych, których nie znamy. O wyjaśnienie możemy zapytać ?WhittakerW;

>    dsolve(diff(x(t),t)=x(t)^2+t^2+1,x(t));

x(t) = -1/2*1/t*((-_C1+2*I*_C1*t^2+_C1*I)*WhittakerW(-1/4*I,1/4,t^2*I)+(2*I*t^2-1+I)*WhittakerM(-1/4*I,1/4,t^2*I)-4*_C1*WhittakerW(1-1/4*I,1/4,t^2*I)+(3-I)*WhittakerM(1-1/4*I,1/4,t^2*I))/(_C1*Whittaker...
x(t) = -1/2*1/t*((-_C1+2*I*_C1*t^2+_C1*I)*WhittakerW(-1/4*I,1/4,t^2*I)+(2*I*t^2-1+I)*WhittakerM(-1/4*I,1/4,t^2*I)-4*_C1*WhittakerW(1-1/4*I,1/4,t^2*I)+(3-I)*WhittakerM(1-1/4*I,1/4,t^2*I))/(_C1*Whittaker...

Nieco zmienione równanie i MAPLE nie znajduje rozwiązania dokladnego - brak jakiejkolwiek odpowiedzi. Co wtedy?

Możemy poszukiwać rozwiązań numerycznych. Wymaga to już zadania warunków początkowych tak, aby rozwiązaniem byla jednoznacznie określona funkcja.

Używamy opcji numeric w komendzie dsolve. Możemy także zmienić metodę numeryczną stosowaną przez MAPLE do obliczeń (por system pomocy ?dsolve/numeric). Proszę zauważyć, że wynikowi przypisalem nazwę tu - F -ale może to być dowolny ciąg znaków, aby w dalszym ciągu móc się do otrzymanej funkcji odwolywać.

>    dsolve(diff(x(t),t)=sqrt(x(t)^2+t^2+1),x(t));

>    F:=dsolve({diff(x(t),t)=sqrt(x(t)^2+t^2+1),x(0)=1},x(t),numeric);

F := proc (x_rkf45) local res, data, vars, solnproc, outpoint, ndsol, i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; _EnvDSNumericSaveDigits := Digits; Digits := 14; if _En...

>    F(0.5);

[t = .5, x(t) = 1.87678820210405072]

>    %[2];

x(t) = 1.87678820210405072

>    rhs(%);

1.87678820210405072

>    seq(F(i*0.01),i=0..10);

[t = 0., x(t) = 1.], [t = .1e-1, x(t) = 1.01419248922136118], [t = .2e-1, x(t) = 1.02848709976422170], [t = .3e-1, x(t) = 1.04288595306479093], [t = .4e-1, x(t) = 1.05739117109330772], [t = .5e-1, x(t)...
[t = 0., x(t) = 1.], [t = .1e-1, x(t) = 1.01419248922136118], [t = .2e-1, x(t) = 1.02848709976422170], [t = .3e-1, x(t) = 1.04288595306479093], [t = .4e-1, x(t) = 1.05739117109330772], [t = .5e-1, x(t)...
[t = 0., x(t) = 1.], [t = .1e-1, x(t) = 1.01419248922136118], [t = .2e-1, x(t) = 1.02848709976422170], [t = .3e-1, x(t) = 1.04288595306479093], [t = .4e-1, x(t) = 1.05739117109330772], [t = .5e-1, x(t)...
[t = 0., x(t) = 1.], [t = .1e-1, x(t) = 1.01419248922136118], [t = .2e-1, x(t) = 1.02848709976422170], [t = .3e-1, x(t) = 1.04288595306479093], [t = .4e-1, x(t) = 1.05739117109330772], [t = .5e-1, x(t)...

Możemy też narysować wykres otrzymanej funkcji. Używamy dodatkowego pakietu ,,plots" i  z niego komendy odeplot. Pierwszym argumentem jest nazwa funkcji, drugim - para zmienne, które mają być narysowane na wykresie, trzecim - zakres zmienności zmiennej niezależnej.

>    with(plots):

Warning, the name changecoords has been redefined

>    odeplot(F,[t,x(t)],t=-10..10);

>   

[Maple Plot]

Poniżej nieliniowe równanie Duffinga z wymuszaniem (prawa strona). Do narysowania wykresu rozwiązania z ustalonymi warunkami początkowymi stosujemy komendę DEplot z pakietu DEtools.Jej stosowanie zawiera wiele opcji - por. system pomocy. Zachęcam jednak do stosowania odeplot.

>    row:=diff(x(t),t$2)+0.25*diff(x(t),t)-x(t)+x(t)^3=0.4*cos(t);

row := diff(x(t),`$`(t,2))+.25*diff(x(t),t)-x(t)+x(t)^3 = .4*cos(t)

>    with(DEtools):

>    DEplot({row},x(t),t=-5..5,[[x(0)=0.1,D(x)(0)=-0.4]]);

[Maple Plot]

>    G:=dsolve({row,x(0)=0.1,D(x)(0)=-0.4},x(t),numeric);

G := proc (x_rkf45) local res, data, vars, solnproc, outpoint, ndsol, i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; _EnvDSNumericSaveDigits := Digits; Digits := 14; if _En...

Zastosowanie większej liczby punktów pośrednich - opcja numpoints - wydluża obliczenia, ale poprawia dokladność, co widać w wygladzaniu wykresu.

>    odeplot(G,[t,x(t)],t=-5..50,numpoints=200);
odeplot(G,[t,D(x)(t)],t=-5..50,numpoints=200);
odeplot(G,[x(t),D(x)(t)],t=-5..50,numpoints=20000);

[Maple Plot]

[Maple Plot]

[Maple Plot]

Poniżej dmonstrujemy wykresy rozwiązania równania wahadla z silą zewnętrzną. Uklad  jest silnie nieliniowy i rzędu 3 (rząd równania 2 + dodatkowy 1 na zmienną t, równanie jest nieautonomiczne. Dlatego zachowanie ukladu jest chaotyczne.

>    omega:=.3: A:=.9: r:=.5:

>    wah:=diff(x(t),t)=y(t),diff(y(t),t)=-omega*y(t)-sin(x(t))+A*cos(r*t);

wah := diff(x(t),t) = y(t), diff(y(t),t) = -.3*y(t)-sin(x(t))+.9*cos(.5*t)

>    f:=dsolve({wah, x(0)=1.2,y(0)=.2},{x(t),y(t)},numeric,output=listprocedure);

f := [t = proc (t) option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; t end proc, x(t) = proc (t) local res, plistproc, outpoint, ndsol; option `Copyright (c) 2000 by Wate...

>    with(plots):
odeplot(f,[x(t),y(t)],0..200,numpoints=200);

[Maple Plot]

>    odeplot(f,[t,x(t)],0..200);

[Maple Plot]

>    odeplot(f,[t,y(t)],0..200);

[Maple Plot]

Poniżej równanie Lorenza - pierwsze równanie, w którym zaobserwowano chaos

>    lorenz:=diff(x(t),t)=sigma*(y(t)-x(t)),
diff(y(t),t)=r*x(t)-y(t)-x(t)*z(t),
diff(z(t),t)=x(t)*y(t)-b*z(t);

lorenz := diff(x(t),t) = 10*y(t)-10*x(t), diff(y(t),t) = 28*x(t)-y(t)-x(t)*z(t), diff(z(t),t) = x(t)*y(t)-8/3*z(t)

>    sigma:=10:

>    b:=8/3:

>    r:=28:

>    ff:=dsolve({lorenz,x(0)=.2,y(0)=.1,z(0)=.5 },{x(t),y(t),z(t)},type=numeric,output=listprocedure);

ff := [t = proc (t) option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; t end proc, x(t) = proc (t) local res, plistproc, outpoint, ndsol; option `Copyright (c) 2000 by Wat...

>    fx:=subs(ff,x(t));

fx := proc (t) local res, plistproc, outpoint, ndsol; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; outpoint := evalf(t); plistproc := proc (rkf45_x) local i, comp_soln_data,...

>    fy:=subs(ff,y(t)): fz:=subs(ff,z(t)):

>    fx(0);

.2

>    fx(0.3);

3.43978041875216878

>    with(plots):
odeplot(ff,[t,x(t)],0..100);

Warning, the name changecoords has been redefined

Warning, cannot compute solution further right of 86.8255095722534236

[Maple Plot]

>    odeplot(ff,[t,y(t)],0..60);

[Maple Plot]

>    odeplot(ff,[t,x(t)],0..60);

[Maple Plot]

>    odeplot(ff,[t,z(t)],0..60);

[Maple Plot]

>    odeplot(ff,[x(t),y(t)],15..60);

[Maple Plot]

>    odeplot(ff,[x(t),y(t),z(t)],10..50);

[Maple Plot]

>    odeplot(chaos,[x(t),y(t)],0..60);

[Maple Plot]

>    odeplot(chaos,[x(t),y(t),z(t)],0..60);

[Maple Plot]

Równanie Chua opisuje chaos w prostym nieliniowym obwodzie elektrycznym.

>    restart;

>    g:=x->c*x+((d-c)/2)*(abs(x+1)-abs(x-1)):

>    a:=15: b:=25.58: c:=-5/7: d:=-8/7:

>    chua:=diff(x(t),t)=a*(y(t)-x(t)-g(x(t))),
      diff(y(t),t)=x(t)-y(t)+z(t),
      diff(z(t),t)=-b*y(t):

>    warpocz:=x(0)=.2,y(0)=.3,z(0)=.1:

>    with(DEtools):

>    with(plots):

Warning, the name changecoords has been redefined

>    F:=dsolve({chua,warpocz},numeric,output=listprocedure);

F := [t = proc (t) option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; t end proc, x(t) = proc (t) local res, plistproc, outpoint, ndsol; option `Copyright (c) 2000 by Wate...

>    odeplot(F,[x(t),y(t)],0..150);

[Maple Plot]

>    odeplot(F,[x(t),z(t)],0..150);

[Maple Plot]

>    odeplot(F,[z(t),y(t)],0..150);

[Maple Plot]

>    odeplot(F,[x(t),y(t),z(t)],0..150);

[Maple Plot]

Rozwiązania numeryczne mogą być mylące. W poniższym równaniu mianownik może bardzo zbliżać się do 0. Wtedy dokladnośc jest praktycznie iluzoryczna. Widzimy, że gdy powiększamy kawalek wykresu, to obrazek powiększony może być nawet jakościowo inny niż odpowiedni fragment na pierwszym plocie. Porównajmy kolory kolejnych krzywych.

>    row:=diff(x(t),t,t)=1/(sin(x(t)));

row := diff(x(t),`$`(t,2)) = 1/sin(x(t))

>    with(DEtools):

>    DEplot(row,x(t),t=-5..5,[[x(0)=1,D(x)(0)=0],[x(0)=2,D(x)(0)=0],[x(0)=3,D(x)(0)=0],[x(0)=4,D(x)(0)=0]],linecolour=[red,yellow,green,blue],stepsize=.01);

[Maple Plot]

>    DEplot(row,x(t),t=1.5..2.5,[[x(0)=1,D(x)(0)=0],[x(0)=2,D(x)(0)=0],[x(0)=3,D(x)(0)=0],[x(0)=4,D(x)(0)=0]],linecolour=[red,yellow,green,blue],stepsize=.001);

[Maple Plot]

>