Skip to Main Content Skip to Search
Product Documentation

plot::Ode2d2D plots of ODE solutions

plot::Ode3d3D plots of ODE solutions

plot::Ode2d(f, [t_0, t_1, Symbol::hellip], Y_0) and plot::Ode3d(f, [t_0, t_1, Symbol::hellip], Y_0) render two- and threedimensional projections of the solutions of the initial value problem given by f, t0 and Y0, respectively.

→ Examples

Calls:

plot::Ode2d(f, [t0, t1, ...], Y0, <[G1, <Style = style1>, <Color = c1>], [G2, <Style = style2>, <Color = c2>], ...>, <method>, <RelativeError = rtol>, <AbsoluteError = atol>, <Stepsize = h>, <a = amin .. amax>, Options)

plot::Ode2d(f, [Automatic, `t_{start}`, `t_{end}`, `t_{step}`], Y0, <[G1, <Style = style1>, <Color = c1>], [G2, <Style = style2>, <Color = c2>], ...>, <method>, <RelativeError = rtol>, <AbsoluteError = atol>, <Stepsize = h>, <a = amin .. amax>, Options)

plot::Ode2d([t0, t1, ...], f, Y0, <[G1, <Style = style1>, <Color = c1>], [G2, <Style = style2>, <Color = c2>], ...>, <method>, <RelativeError = rtol>, <AbsoluteError = atol>, <Stepsize = h>, <a = amin .. amax>, Options)

plot::Ode2d([Automatic, `t_{start}`, `t_{end}`, `t_{step}`], f, Y0, <[G1, <Style = style1>, <Color = c1>], [G2, <Style = style2>, <Color = c2>], ...>, <method>, <RelativeError = rtol>, <AbsoluteError = atol>, <Stepsize = h>, <a = amin .. amax>, Options)

plot::Ode3d(f, [t0, t1, ...], Y0, <[G1, <Style = style1>, <Color = c1>], [G2, <Style = style2>, <Color = c2>], ...>, <method>, <RelativeError = rtol>, <AbsoluteError = atol>, <Stepsize = h>, <a = amin .. amax>, Options)

plot::Ode3d(f, [Automatic, `t_{start}`, `t_{end}`, `t_{step}`], Y0, <[G1, <Style = style1>, <Color = c1>], [G2, <Style = style2>, <Color = c2>], ...>, <method>, <RelativeError = rtol>, <AbsoluteError = atol>, <Stepsize = h>, <a = amin .. amax>, Options)

plot::Ode3d([t0, t1, ...], f, Y0, <[G1, <Style = style1>, <Color = c1>], [G2, <Style = style2>, <Color = c2>], ...>, <method>, <RelativeError = rtol>, <AbsoluteError = atol>, <Stepsize = h>, <a = amin .. amax>, Options)

plot::Ode3d([Automatic, `t_{start}`, `t_{end}`, `t_{step}`], f, Y0, <[G1, <Style = style1>, <Color = c1>], [G2, <Style = style2>, <Color = c2>], ...>, <method>, <RelativeError = rtol>, <AbsoluteError = atol>, <Stepsize = h>, <a = amin .. amax>, Options)

Parameters:

f

the vector field of the ODE: a procedure. See numeric::odesolve for details. 
f is equivalent to the attribute Function.

t0, t1, ...: 

the time mesh: real numerical values. If data are displayed with Style = Splines, these values must be in ascending order. 
t0, t1, ... is equivalent to the attribute TimeMesh.

`t_{start}`, `t_{end}`, `t_{step}`

the time mesh: real numerical values. `t_{end}` must be larger than `t_{start}` and `t_{step}` must be positive and should be smaller than t_end - t_start
`t_{start}`, `t_{end}`, `t_{step}` are equivalent to the attribute TimeMesh.

Y0

the initial condition of the ODE: a list or a 1-dimensional array. See numeric::odesolve
Y0 is equivalent to the attribute InitialConditions.

G1, G2, ...: 

“generators of plot data”: procedures mapping a solution point (t, Y(t)) to a list [x, y] or [x, y, z] representing a plot point in 2D or 3D, respectively. 
G1, G2, ... is equivalent to the attribute Projectors.

method

use a specific numerical scheme (see numeric::odesolve)

Options:

Style = style

sets the style in which the plot data are displayed. The following styles are available: Points, Lines, Splines, [Lines, Points], and [Splines, Points]. The default style is [Splines, Points].

Color = c

sets the RGB color  c in which the plot data are displayed. The default color of the ith generator is the ith entry of the attribute Colors.

RelErr = rtol

sets a numerical discretization tolerance (see numeric::odesolve)

AbsErr = atol

sets a numerical discretization tolerance (see numeric::odesolve)

Stepsize = h

sets a constant stepsize (see numeric::odesolve)

Related Domains:

plot::Curve2d, plot::Curve3d, plot::PointList2d, plot::PointList3d, plot::Polygon2d, plot::Polygon3d, plot::Streamlines2d

Related Functions:

numeric::ode2vectorfield, numeric::odesolve, numeric::odesolve2

Details:

Example 1

The following procedure f together with the initial value Y0 represent the initial value problem (diff(Y, t) = f(t, Y)) = t*Y - Y^2, Y(0) = 2. In MuPAD®, the 1-dimensional vector Y is represented by a list with one element. The body of the function f below addresses the first (and only) entry of this list as Y1 and returns the 1-dimensional vector t*Y - Y^2 as a list with one element. Also the initial condition Y0 is a 1-dimensional vector represented by a list:

f := (t, Y) -> [t*Y[1] - Y[1]^2]:
Y0 := [2]:

Alternatively, the utility function numeric::ode2vectorfield can be used to generate the input parameters in a more intuitive way:

[f, t0, Y0] := [numeric::ode2vectorfield(
      {y'(t) = t*y(t) - y(t)^2, y(0) = 2}, [y(t)])]

[`proc f(t, Y) ... end`, 0, [2]]

The numerical solution is to consist of sample points over the time mesh t[i] = i, i = 0, 1, Symbol::hellip, 10. We use the default generator of plot::Ode2d. This generates the sample points together with a smooth spline curve connecting these points:

p := plot::Ode2d(f, [$ 0..10], Y0,
                 PointSize = 2*unit::mm,
                 PointStyle = Stars):

Finally, the ode solution is rendered by a call to plot:

plot(p, TicksDistance = 2.0, GridVisible = TRUE,
     SubgridVisible = TRUE):

MuPAD graphics

Example 2

We consider the nonlinear oscillator D(D(y)) + y^7 = 0, y(0) = 1, D(y)(0) = 0. As a dynamical system for Y = [y, D(y)], we have to solve the following initial value problem diff(Y, t) = f(t, Y), Y(0) = Y_0:

f := (t, Y) -> [Y[2], - Y[1]^7]:
Y0 := [1, 0]:

The following generator produces a plot of the solution Y(t) against the time parameter t:

G1 := (t, Y) -> [t, Y[1]]:

Further, we are interested in the values of the function F = y^2/2 + D(y)^2/2. The generator G2 produces the values F(y(t), D(y)(t)) along the solution and plots these values against t:

G2 := (t, Y) -> [t, Y[1]^2/2 + Y[2]^2/2]:

The energy function (the “Hamiltonian”) H = D(y)^2/2 + y^8/8 should be conserved along the solution curve. We define a corresponding generator G3 to plot H(y(t), D(y)(t)) as a function of t:

G3 := (t, Y) -> [t, Y[1]^8/8 + Y[2]^2/2]:

The solution curve is combined with the graph of the function F(t) = F(y(t), D(y)(t)) and the conserved energy H(t) = H(y(t), D(y)(t)):

p := plot::Ode2d(f, [i/2 $ i = 0..40], Y0,
                 [G1, Style = Lines, Color = RGB::Red],
                 [G1, Style = Points, Color = RGB::Black],
                 [G2, Style = Lines, Color = RGB::Blue],
                 [G2, Style = Points, Color = RGB::Black],
                 [G3, Style = Lines, Color = RGB::Green],
                 [G3, Style = Points, Color = RGB::Black],
                 PointSize = 1.5*unit::mm,
                 LineWidth = 0.2*unit::mm
                ):

Note that by using each generator twice, we are able to set different colors for the lines and points. The renderer is called:

plot(p):

MuPAD graphics

To visualize the dependency of the trajectory on the initial conditions, we animate plot::Ode2d over different values of D(y)(0):

plot(plot::Ode2d(f, [i/6 $ i = 0..120], [1, a], a = -1/2..1/2,
                 [G1, Style = Lines, Color = RGB::Red],
                 [G2, Style = Lines, Color = RGB::Blue],
                 [G3, Style = Lines, Color = RGB::Green],
                 LineWidth = 0.2*unit::mm, Frames=25))

MuPAD graphicsimage

Example 3

We consider the initial value problem (D(y) = f(t, y)) = t*sin(t + y^2), y(0) = 0`:`

f := (t, y) -> t*sin(t + y^2): Y0:= [0]:

The following vector field is tangent to the solution curves:

p1 := plot::VectorField2d([1, f(t, y)], t = 0..4, y = -1.2..1.2,
                          Mesh = [21, 25], Color = RGB::Black):

The following object represents the plot of the solution as a function of t:

p2 := plot::Ode2d(
   (t,Y) -> [f(t, Y[1])], [i/3 $ i=0..12], Y0,
   [(t, Y) -> [t, Y[1]], Style = Points, Color = RGB::Red],
   [(t, Y) -> [t, Y[1]], Style = Splines, Color = RGB::Blue]):

We define the point size explicitly:

p2::PointSize := 2*unit::mm:

Finally, we combine the vector field and the ODE plot to a scene and call the renderer:

plot(p1, p2, XTicksDistance = 0.5, YTicksDistance = 0.2,
     Axes = Frame, AxesTitles = ["t", "y"],
     GridVisible = TRUE):

MuPAD graphics

Example 4

By default, numeric::odesolve (which is used by plot::Ode2d and plot::Ode3d internally) uses adaptive step sizes and a method of order 8. Usually, there is no reason to change these settings, except for demonstrative purposes. In the following animation, we use a straightforward explicit Euler method (of first order) and show how decreasing the step size improves the quality of the calculated solution.

Our differential equation is D(y) = y, obviously fulfilled by the exponential function:

[f, t0, Y0] := [numeric::ode2vectorfield(
                   {y'(t)=y(t), y(0)=1}, [y(t)])]:

To judge the quality of the numerical solution, we plot the symbolic solution alongside the approximation:

plot(plot::Function2d(exp(x), x=0..3,
                      Color = RGB::Black, LineStyle = Dashed),
     plot::Ode2d(f, [Automatic, 0, 3, 1/n], Y0, n = 1..50,
                 EULER1, Stepsize = 1/n,
                 [(t, Y) -> [t, Y[1]], Style=[Lines, Points]]))

MuPAD graphicsimage

Example 5

We consider the nonlinear oscillator D(D(y)) + y^3 = sin(t), y(0) = 0, D(y)(0) = 0.5. As a dynamical system for Y = [y, D(y)], we have to solve the following initial value problem diff(Y, t) = f(t, Y), Y(0) = Y_0:

f := (t, Y) -> [Y[2], sin(t) - Y[1]^3]:
Y0 := [0, 0.5]:

The following generator produces a phase plot in the (x, y) plane, embedded in a 3D plot:

G1 := (t, Y) -> [Y[1], Y[2], 0]:

Further, we use the z coordinate of the 3D plot to display the value of the “energy” function E = y^2/2 + D(y)^2/2 over the phase curve:

G2 := (t, Y) -> [Y[1], Y[2], (Y[1]^2 + Y[2]^2)/2]:

The phase curve in the (x, y) plane is combined with the graph of the energy function:

p := plot::Ode3d(f, [i/5 $ i = 0..100], Y0,
                 [G1, Style = Splines, Color = RGB::Red],
                 [G2, Style = Points, Color = RGB::Black],
                 [G2, Style = Lines, Color = RGB::Blue]):

We set an explicit size of the points used in the representation of the energy:

p::PointSize := 2*unit::mm:

The renderer is called:

plot(p, AxesTitles = ["y", "y'", "E"],
     CameraDirection = [10, -15, 5]):

MuPAD graphics

Example 6

The Lorenz ODE is the system

diff(matrix([[x], [y], [z]]), t) = matrix([[p*(y - x)], [- x*z + r*x - y], [x*y - b*z]])

with fixed parameters p, r, b. As a dynamical system for Y = [x, y, z], we have to solve the ODE diff(Y, t) = f(t, Y) with the following vector field:

f := proc(t, Y)
     local x, y, z;
     begin
        [x, y, z] := Y:
        [p*(y - x), -x*z + r*x - y, x*y - b*z]
     end_proc:

We consider the following parameters and the following initial condition Y0:

p := 10: r := 28: b := 1:
Y0 := [1, 1, 1]:

The following generator Gxyz produces a 3D phase plot of the solution. The generator Gyz projects the solution curve to the (y, z) plane with x = 20; the generator Gxz projects the solution curve to the (x, z) plane with y = -15; the generator Gxy projects the solution curve to the (x, y) plane with z = 0:

Gxyz := (t, Y) -> Y:
Gyz := (t, Y) -> [ 20,  Y[2], Y[3]]:
Gxz := (t, Y) -> [Y[1], -15,  Y[3]]:
Gxy := (t, Y) -> [Y[1], Y[2],   0 ]:

With these generators, we create a 3D plot object consisting of the phase curve and its projections.

object := plot::Ode3d(f, [i/10 $ i=1..100], Y0,
           [Gxyz, Style = Splines, Color = RGB::Red],
           [Gyz, Style = Splines, Color = RGB::Grey50],
           [Gxz, Style = Splines, Color = RGB::Grey50],
           [Gxy, Style = Splines, Color = RGB::Grey50],
           Submesh = 7):

Finally, the plot is rendered. This call is somewhat time consuming because it calls the numerical solver numeric::odesolve to produce the graphical data:

plot(object, CameraDirection = [-220, 110, 150])

MuPAD graphics

  


Recommended Products

Includes the most popular MATLAB recorded presentations with Q&A sessions led by MATLAB experts.

 © 1984-2012- The MathWorks, Inc.    -   Site Help   -   Patents   -   Trademarks   -   Privacy Policy   -   Preventing Piracy   -   RSS