Solving Differential Equations

Maple uses a number techniques for solving differential equations, including exact methods, series techniques, and numerical solutions. First we find the general solution of a differential equation.

> de1 := diff(y(t),t$2) + 4*diff(y(t),t) + 4*y(t) = 0;

de := diff(y(t),`$`(t,2))+4*diff(y(t),t)+4*y(t) = 0...

> dsolve(de1, y(t));

y(t) = _C1*exp(-2*t)+_C2*exp(-2*t)*t

Next we solve and initial value problem.

> de2 := diff(y(t),t$2) + 4*diff(y(t),t) + 5*y(t) = 15*t^3;

de2 := diff(y(t),`$`(t,2))+4*diff(y(t),t)+5*y(t) = ...

> dsolve({de2, y(0) = 5, D(y)(0) = -2}, y(t));

y(t) = -432/125+198/25*t-36/5*t^2+3*t^3+874/125*exp...

The equation below is Bessel's equation of second order, which has well known solutions known as Bessel's functions. We use Maple to show the series solution of this equation.

> de3 := t^2*diff(y(t),t$2) + t*diff(y(t),t) + (t^2-4)*y(t) = 0;

de3 := t^2*diff(y(t),`$`(t,2))+t*diff(y(t),t)+(t^2-...

> dsolve(de3, y(t));

y(t) = _C1*BesselJ(2,t)+_C2*BesselY(2,t)

> dsolve(de3, y(t), series);

y(t) = _C1*t^2*(series(1-1/12*t^2+1/384*t^4+O(t^6),...
y(t) = _C1*t^2*(series(1-1/12*t^2+1/384*t^4+O(t^6),...

We can increase the number of terms generated by the series solution.

> Order := 12:

> dsolve(de3, y(t), series);

y(t) = _C1*t^2*(series(1-1/12*t^2+1/384*t^4-1/23040...
y(t) = _C1*t^2*(series(1-1/12*t^2+1/384*t^4-1/23040...
y(t) = _C1*t^2*(series(1-1/12*t^2+1/384*t^4-1/23040...
y(t) = _C1*t^2*(series(1-1/12*t^2+1/384*t^4-1/23040...

Maple can solve some systems of differential equations.

> sys := {diff(x(t),t) = 2*x(t) - y(t) - 2*z(t), diff(y(t),t) = x(t) + 2*y(t), diff(z(t),t) = 2*x(t) - z(t)};

sys := {diff(x(t),t) = 2*x(t)-y(t)-2*z(t), diff(z(t...
sys := {diff(x(t),t) = 2*x(t)-y(t)-2*z(t), diff(z(t...

> dsolve(sys, {x(t),y(t),z(t)});

{x(t) = exp(t)*(_C1+_C2*sin(sqrt(2)*t)+_C3*cos(sqrt...
{x(t) = exp(t)*(_C1+_C2*sin(sqrt(2)*t)+_C3*cos(sqrt...
{x(t) = exp(t)*(_C1+_C2*sin(sqrt(2)*t)+_C3*cos(sqrt...
{x(t) = exp(t)*(_C1+_C2*sin(sqrt(2)*t)+_C3*cos(sqrt...
{x(t) = exp(t)*(_C1+_C2*sin(sqrt(2)*t)+_C3*cos(sqrt...

Many differential equations cannot be solved exactly, but there are numerical methods to solve differential equations. The default method for Maple is the Runge-Kutta Fehlberg 45 method. We use the Lotka-Volterra model to demonstrate the numerical solver.

> LVx := diff(x(t),t) = x(t)*(1-y(t));
LVy := diff(y(t),t) = 0.3*y(t)*(x(t)-1);

LVx := diff(x(t),t) = x(t)*(1-y(t))

LVy := diff(y(t),t) = .3*y(t)*(x(t)-1)

> ff := dsolve({LVx, LVy, x(0)=0.2, y(0)=1},
{x(t),y(t)}, type=numeric, output=listprocedure);

ff := [t = proc (t) option `Copyright (c) 1993 by t...
ff := [t = proc (t) option `Copyright (c) 1993 by t...

> fx := subs(ff,x(t)): fy := subs(ff,y(t)):

Next we use numerical solution to generate a series of points, which are then graphed.

> LVsoln := [seq([fx(0.1*n),fy(0.1*n)], n = 0..200)]:

> plot(LVsoln, title=`Lotka-Volterra Model`, labels=[`prey`,`predator`], color=blue, thickness=2);

[Maple Plot]