Diferenciální rovnice

Diferenciální rovnice jsou z rozsáhlých kapitol matematiky. Jejich řešení lze, podobně jako u integrálů, rozdělit na analitické a numerické a v obou případech ho lze uskutečnit pomocí příkazu dsolve .

> restart;

> dr:=diff(y(t),t,t,t)+3*diff(y(t),t,t)+4*diff(y(t),t)+2*y(t)=sin(2*t);

dr := diff(y(t),`$`(t,3))+3*diff(y(t),`$`(t,2))+4*d...

> dsolve(dr,y(t));

y(t) = -1/10*sin(2*t)+_C1*exp(-t)+_C2*exp(-t)*sin(t...

> combine(rhs(%));

-1/10*sin(2*t)+_C1*exp(-t)+_C2*exp(-t)*sin(t)+_C3*e...

Výsledek lze jednoduše zkontrolovat omocí příkazu odetest .

> odetest(%%,dr);

0

Abychom dostali výsledek bez neurčených konstant, je nutné při zadávání rovnice uvést i počáteční podmínky.

> vysl:=combine(dsolve({dr,y(0)=2,D(y)(0)=0,(D@@2)(y)(0)=0},y(t)));

vysl := y(t) = -1/10*sin(2*t)+22/5*exp(-t)-12/5*exp...

> plot(rhs(vysl),t=0..20);

[Maple Plot]

Lze si určit i metodu řešení. V následujícím příkladě, obdržíme stejný výsledek v mírně odlišném tvaru (lze přímo vyčíst vliv počátečních podmínek) .

> dsolve(dr,y(t),method=laplace);

y(t) = (2/5+2*y(0)+2*D(y)(0)+`@@`(D,2)(y)(0))*exp(-...
y(t) = (2/5+2*y(0)+2*D(y)(0)+`@@`(D,2)(y)(0))*exp(-...

Toto nebyl náročný příklad (lineární diferenciální rovnice s konstantními koeficienty). V složitých případech, kdy neze najít analitické řešení může ještě pomoci paroximace pomocí Taylorovy řady nebo jiné možné aproximace ( powerseries ). Dále jen numerická řešení, dsolve,numeric .

> dr1:=diff(y(t),t,t)=-sin(y(t));

dr1 := diff(y(t),`$`(t,2)) = -sin(y(t))

> dsolve(dr1,y(t)); # nenajde analytické řešení

Int(-1/(sqrt(2*cos(_a)+_C1)),_a = `` .. y(t))-t-_C2...

> r6:=dsolve({dr1,y(0)=0,D(y)(0)=1},y(t), type=series);

r6 := y(t) = series(1*t-1/6*t^3+1/60*t^5+O(t^6),t,6...

> y6:=t->convert(rhs(r6),polynom):
y6(t); # aproximace řešení polymomem pátého řádu

t-1/6*t^3+1/60*t^5

> Order:=15;
r15:=dsolve({dr1,y(0)=0,D(y)(0)=1},y(t), type=series);
y15:=t->convert(rhs(r15),polynom):
y15(t); # aproximace řešení polymomem třináctého řádu

Order := 15

r15 := y(t) = series(1*t-1/6*t^3+1/60*t^5-13/5040*t...

t-1/6*t^3+1/60*t^5-13/5040*t^7+23/51840*t^9-221/285...

> Yn:=dsolve({dr1,y(0)=0,D(y)(0)=1},y(t),type=numeric); # numerické řešení

Yn := proc (rkf45_x) local i, rkf45_s, outpoint, r1...

Numerické řešení je pro konkrétní hodnotu nezáviveproměnné tvaru seznamu, kde první položka udává zmíněnou velikost nezávisle proměnné, druhá a třetí položka numerickou hodnotu výsledné proměnné (řešení) a její derivace v daném bodě.

> Yn(1);

[t = 1, y(t) = .847798683531687636, diff(y(t),t) = ...

> Y:=t->rhs(op(2,Yn(t)));

Y := proc (t) options operator, arrow; rhs(op(2,Yn(...

> Y(2); # hodnota řešení v bodě t=2

1.00461457174708269

> Yp:=plot(Y,0..2.5): y6p:=plot(y6(t),t=0..2.5,color=blue): y15p:=plot(y15(t),t=0..2.5,color=green):
with(plots):display(Yp,y6p,y15p); # srovnání jednotlivých řešení
plot(Y,0..10); # numerické řešení v širším oboru nezávisle proměnné

Warning, the name changecoords has been redefined

[Maple Plot]

[Maple Plot]

Jak je vidět z obrázku, metodu aproximace řadou lze použít pouze pro omezený rozsah hodnot nezávislé proměnné a ani vyšší řád aproximace tento rozsah významně nezvýší.

Při řešení diferenciálních rovnic lze uplatnit mnoho metod řešení, které se zadavájí v argumentu příkazu dsolve . Jejich pouhý výčet přesahuje rámec tohoto dokumrntu, proto odkážeme zájemce na uvedenou literaturu, případně help.

Samozřejme, že lze řešit i soustavy diferenciálních rovnic, podobně jako tomu je se soustavami algebraických rovnic. Zápis je velmi podobný a lze ho najít i v helpu dsolve,system , proto se dále tímto problémem zabývat nebudeme.