0% found this document useful (0 votes)
286 views6 pages

Numeric Solutions of ODEs in Maple

The document introduces Maple's dsolve/numeric command for numerically solving ordinary differential equations (ODEs) when an analytical solution cannot be found. It demonstrates using dsolve/numeric to obtain numeric solutions for single ODEs and systems of ODEs, and shows how to extract and plot the numeric solutions as a function of the independent variable.

Uploaded by

Nasg Kul
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
286 views6 pages

Numeric Solutions of ODEs in Maple

The document introduces Maple's dsolve/numeric command for numerically solving ordinary differential equations (ODEs) when an analytical solution cannot be found. It demonstrates using dsolve/numeric to obtain numeric solutions for single ODEs and systems of ODEs, and shows how to extract and plot the numeric solutions as a function of the independent variable.

Uploaded by

Nasg Kul
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

> restart;

Numeric solutions of ODEs in Maple


The purpose of this worksheet is to introduce Maple's dsolve/numeric command. There are many
examples of differential equations that Maple cannot solve analytically, it these cases a default call to
dsolve returns a null (blank) result:
> ode := diff(y(x),x,x) + y(x)^2 = x^2;
dsolve(ode);
d2
ode :=
y x C y x 2 = x2
(1)
2
dx
If this happens, one can obtain a solution numerically by specifying initial conditions and providing the
option "numeric":
> ICs := y(0) = 0, D(y)(0)= 1/2;
sol := dsolve({ode,ICs},numeric);
1
ICs := y 0 = 0, D y 0 =
2
sol := proc x_rkf45 ... end proc
(2)
The output of dsolve is by default a Maple procedure of a single argument. If we call this procedure with
argument x, we obtain information about the solution at that value of the independent variable:
> sol(1);
d
x = 1., y x = 0.560986197489666,
y x = 0.739332218315567
(3)
dx
That is, we get a list giving us a numeric approximation to the value of the unknown and its first
derivative at our choice of x. If the equation we wanted to solve was higher order (say nth order), we
would have more elements in the list corresponding to all the derivatives of y up to n K 1 th order. The
default behaviour of dsolve/numeric is to return a procedure which itself returns a list; however, we can
instead have it return a list of procedures but using the optional command "output = listprocedure".
> sol := dsolve({ode,ICs},numeric,output=listprocedure);
d
sol := x = proc x ... end proc, y x = proc x ... end proc,
y x = proc x
(4)
dx
...
end proc
Here, we get a list of three equations. The RHS of each equation is a procedure that calculates what is
represented on the LHS. For example, the RHS of the second element is a procedure that calculates
y x . We can isolate this particular procedure as follows:
> y_sol := sol[2];
y_sol := rhs(y_sol);
y_sol := y x = proc x ... end proc
y_sol := proc x ... end proc
(5)
Now, y_sol is a procedure that just returns the numeric solution for y as a function of x:
> y_sol(2);
1.79279104009982
This procedure can readily be used to obtain a plot of the numeric solution of the ODE:

(6)

> plot(y_sol(x),x=-10..10,axes=boxed);

10

0
K10

K5

0
x

10

This is not the only way to obtain a plot of the numeric solution of an ODE, look at ?plots/odeplot
for an alternate method (I recommend the one given here, howeever). The dsolve/numeric command
can also be used to solve systems of ODEs such as the following [this is a predator-prey model from
mathematical biology where X T and Y T represent the populations of humans and fish, respectively]
:
> ODE1 := diff(X(T), T) = -X(T)*(-1+Y(T));
ODE2 := diff(Y(T), T) = Y(T)*(-1+X(T))*alpha;
d
X T = KX T K1 C Y T
dT
d
ODE2 :=
Y T = Y T K1 C X T a
dT
ODE1 :=

Here is the code to generate procedures X_sol and Y_sol giving the numeric solution for the two
unknowns for a particular choice of initial data and .
> alpha := 1;
X0 := 2;
Y0 := 1;
ans := dsolve([ODE1,ODE2,X(0)=X0,Y(0)=Y0],numeric,output=
listprocedure);

(7)

>

X_sol := rhs(ans[2]);
Y_sol := rhs(ans[3]);

ans := T = proc T
...
end proc

a := 1
X0 := 2
Y0 := 1
... end proc, X T = proc T

X_sol := proc T
Y_sol := proc T

... end proc, Y T = proc T

... end proc


... end proc

(8)

Here is a plot of the two solutions:


> plot([X_sol(T),Y_sol(T)],T=0..10);

1.5

0.5
0

10

A phase portrait of the system is an implicitly defined curve where the horizontal coordinate is X T and
the vertical coordinate is Y T :
> plot([X_sol(T),Y_sol(T),T=0..10]);

1.5

0.5
0.5

1.5

The above numeric solution was for a particular choice of initial data. Lets generate a series of ten
solution curves for a number of choices of initial data (N.B. now we choose a = 10):
> alpha := 10;
for i from 1 to 10 do:
X0 := 1+i/10;
Y0 := 1;
ans := dsolve([ODE1,ODE2,X(0)=X0,Y(0)=Y0],numeric,output=
listprocedure);
X_sol[i] := rhs(ans[2]);
Y_sol[i] := rhs(ans[3]);
print(i);
od:
a := 10
1
2
3
4
5
6
7

(9)

8
9
10

(9)

Here is a plot of the X solutions as a function of T:


> plot([seq(X_sol[i](T),i=1..10)],T=0..10);

1.5

0.5
0

Here is a plot of the phase portrait of each of the solutions:


> plot([seq([X_sol[i](T),Y_sol[i](T),T=0..10],i=1..10)]);

10

0.5

1.5

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy