You are on page 1of 8

plots

odeplot

2-D or 3-D plot of output from dsolve

Calling Sequence

Parameters

Description

Examples

Calling Sequence

odeplot(dsn, vars, range, options)

Parameters

dsn

output from a call to dsolve( ... , numeric)

vars

(optional list) axes and functions to plot

range

(optional) range; range of the independent variable

options

(optional) equations that specify plot options; see plot/options and plot3d/option

Description

• The odeplot function plots or animates one or more solution curves (either 2-D or 3-D) obtained from
the output (dsn) of a call to dsolve/numeric.
Note: If you are using the output=piecewise option with dsolve/numeric, you should use the plot
function to plot or animate your solution.

• The ordering of the coordinates is given by vars. If no coordinates are given, then it is assumed that a
plot of the first dependent variable as a function of the independent variable is desired (that is, the first
two coordinates of the solution).

Significantly more flexibility is available in the specification of the coordinates.

The coordinates can be functions of the independent variable, or any dependent variable and
derivative values that are part of the dsolve/numeric solution. For example, for a second-order problem
in

y(x)

, you could specify a plot of

y(x)

versus

2 /d \

y(x) + |--- y(x)|

\ dx /

with

[ 2]

[ 2 /d \]

[y(x), y(x) + |--- y(x)| ]

[ \ dx /]

Multiple curves can be plotted by specifying a nested list format. For example,

[ [ d ]]

[[x, y(x)], [x, --- y(x)]]

[ [ dx ]]
displays the dependent variable and its derivative as a function of

on the same plot.

Curve-specific options can be specified for each curve (for plots with multiple curves) by including them
in the desired variable list after the plot variables. Allowed options are color, linestyle, style, symbol,
symbolsize, and thickness. (These are described in plot/options and plot3d/option.) For example, the
plot described by the nested list above can be displayed with

y(x)

in blue dots, and

--- y(x)

dx

as a red line of thickness 2 with the argument


[[x,y(x),color=blue,style=point],[x,diff(y(x),x),color=red,thickness=2]].

• The range argument defines the range of the independent variable to produce the plot, and must
evaluate to real numbers. If not supplied, the range is determined as follows:

– If the dsolve/numeric output is not of a procedure type (that is, it is in the form of a matrix or Matrix),
then the values present in the matrix are used directly for the plot.

– If the problem is a boundary value problem (BVP), then the plot is produced for the entire solution
region.

– If the problem is a initial value problem (IVP), and was created with a range (rkf45 and rosenbrock
only), then that range is used for the plot.

– If the problem is a IVP, _Env_smart_dsolve_numeric is set to true, and a prior call was made to the
procedure, the plot is produced from the initial point to the point used in the prior call.

– Finally, if none of the above conditions are met, then the plot is produced for the range x0-10..x0+10,
where x0 is the initial point for the IVP.

• If the default numerical IVP solvers rkf45 and rosenbrock were used with the range argument to
obtain dsn, then an additional option is available to control the number of points used to produce the
plot. The refine=v option tells odeplot to use v times the number of stored points for the plot, where v
must be a non-negative integer or one over a non-negative integer.
For example, specification of refine=1 tells odeplot to use all points in the stored solution, while
refine=2 requests twice the computed points, and refine=1/3 requests one-third the computed points.

Note: Use of this option with a range solution of dsolve/numeric produces an adaptive plot, where
more points are plotted in more rapidly changing solution regions (that is, regions where a greater
number of steps were required by the numerical method). See the Van der Pol example below.

Note: This option cannot be used with the numpoints option.

• If not specified, the labels of the plot are obtained from the vars argument (or from the
dsolve/numeric solution if vars is not specified). Since these are displayed as text, the derivative of

y(x)

with respect to

is displayed as

--- y(x)

dx

, and the function

y(x)

is displayed as

. Variables specified in vars using operator notation, such as

D(y)(x)

are left unchanged.

For 2-D plots, if the length of the text of an automatically-generated axis label exceeds 10 characters, it
is not displayed. To display long labels as a legend (instead of omitting them), specify the labels=legend
option.

Labels can be disabled by specifying them as empty strings or identifiers (that is, labels=["",""] or
labels=[``,``]).

• If the frames=n option is given, then odeplot produces an animation of the solution over the
independent variable range for the plot, from lowest to highest value. The final frame of the animation
is the same as the plot created without the frames option. Note: The refine option cannot be used with
animations, as odeplot must choose the points for the animated plot.

• Remaining arguments must be equations of the form option = value. These options are the same as
found for plot (in the case of 2-D solution curves) or those found for plot3d (in the case of 3-D solution
curves). See plot/options and plot3d/option for details.

• The result of a call to odeplot is a PLOT or PLOT3D data structure which can be rendered by the
plotting device. You can assign this value to a variable, save it in a file, then read it back in for redisplay.
See plot/structure for more details.

Examples

with(plots);

dsolve/numeric solution using a range, so odeplot defaults to that range

p := dsolve({y(0) = 1, (D(y))(x) = y(x)}, type = numeric, range = -5 .. 2);

odeplot(p);

or with refinement

odeplot(p, refine = 2);

dsolve/numeric matrix output

p := dsolve({y(0) = 1, (D(y))(x) = y(x)}, numeric, output = Array([-1, -.8, -.6, -.4, -.2, 0]));

odeplot(p);

Animation of a solution

Note: To play an animation in this help page, right-click (Control-click, on Macintosh) the plot to display
the context menu. Select Animation > Play.

p := dsolve({y(0) = 1, (D(y))(x) = y(x)}, y(x), type = numeric);

odeplot(p, [x, y(x)], -1 .. 1, frames = 20);

Removing labels
p := dsolve({diff(y(x), x) = sin(x*y(x)), y(0) = 2}, y(x), type = numeric);

odeplot(p, [x, y(x)], 0 .. 6, labels = ["", ""]);

sys := diff(y(x), x) = z(x), diff(z(x), x) = y(x);

fcns := {y(x), z(x)};

p := dsolve({sys, y(0) = 0, z(0) = 1}, fcns, type = numeric, method = classical);

Specification of numpoints

odeplot(p, [x, y(x)], -4 .. 4, numpoints = 25);

Multiple curves

y(x)

and

z(x)

against

. This is the command to create the plot from the Plotting Guide.

odeplot(p, [[x, y(x)], [x, z(x)]], -4 .. 4);

Phase plot of

y(x)

against

z(x)

odeplot(p, [y(x), z(x)], -4 .. 4);

Limit the view of the phase plot


odeplot(p, [y(x), z(x)], -4 .. 4, view = [-3 .. 3, 0 .. 3]);

Three-dimensional solution curve

odeplot(p, [x, y(x), z(x)], -4 .. 4, color = orange);

The command to create the 3-D plot from the Plotting Guide is

odeplot(p, [[x, y(x), z(x), color = orange, style = point], [x, z(x), y(x), color = blue, thickness = 2]], -5 .. 5);

Multiple curves with different options

odeplot(p, [[x, y(x), color = orange, style = point], [x, z(x), color = blue, thickness = 2]], -4 .. 4);

Same as above, but animated.

Once again, note that to play an animation in this help page, right-click (Control-click, on Macintosh) the
plot to display the context menu. Select Animation > Play.

odeplot(p, [[x, y(x), color = orange, style = point], [x, z(x), color = blue, thickness = 2]], -4 .. 4, frames =
20);

An example (the Van der Pol equation) where use of a solution with range and plotting with option
refine gives a significantly higher quality plot than without:

ode := diff(x(t), t, t)+(1000*(x(t)^2-1))*(diff(x(t), t))+x(t) = 0;

ics := x(0) = 2, (D(x))(0) = 0;

sol := dsolve({ics, ode}, x(t), numeric, stiff = true, range = 0 .. 3000);

odeplot(sol, [x(t), diff(x(t), t)], 0 .. 3000, refine = 1);

See Also

DEtools[DEplot]

dsolve/numeric/BVP
dsolve/numeric/IVP

PDEtools[PDEplot]

plot

plot/options

plot/structure

plot3d

plot3d/option

You might also like