Solve initial-boundary value problems for parabolic-elliptic PDEs in 1-D
sol = pdepe(m,pdefun,icfun,bcfun,xmesh,tspan)
sol = pdepe(m,pdefun,icfun,bcfun,xmesh,tspan,options)
[sol,tsol,sole,te,ie] = pdepe(m,pdefun,icfun,bcfun,xmesh,tspan,options)
| A parameter corresponding to the symmetry of the problem. |
| A handle to a function that defines the components of the PDE. |
| A handle to a function that defines the initial conditions. |
| A handle to a function that defines the boundary conditions. |
| A vector [ |
| A vector [ |
| Some options of the underlying ODE solver are available
in |
sol = pdepe(m,pdefun,icfun,bcfun,xmesh,tspan)
solves
initial-boundary value problems for systems of parabolic and elliptic
PDEs in the one space variable x and time t. pdefun
, icfun
,
and bcfun
are function handles. See Create Function Handle for
more information. The ordinary differential equations (ODEs) resulting
from discretization in space are integrated to obtain approximate
solutions at times specified in tspan
. The pdepe
function
returns values of the solution on a mesh provided in xmesh
.
Parameterizing Functions explains how to provide additional
parameters to the functions pdefun
, icfun
,
or bcfun
, if necessary.
pdepe
solves PDEs of the form:
(1-3) |
The PDEs hold for t0 ≤ t ≤ tf and a ≤ x ≤ b. The interval [a,b] must be finite. m can be 0, 1, or 2, corresponding to slab, cylindrical, or spherical symmetry, respectively. If m > 0, then a must be ≥ 0.
In Equation 1-3, f (x,t,u,∂u/∂x) is a flux term and s (x,t,u,∂u/∂x) is a source term. The coupling of the partial derivatives with respect to time is restricted to multiplication by a diagonal matrix c (x,t,u,∂u/∂x). The diagonal elements of this matrix are either identically zero or positive. An element that is identically zero corresponds to an elliptic equation and otherwise to a parabolic equation. There must be at least one parabolic equation. An element of c that corresponds to a parabolic equation can vanish at isolated values of x if those values of x are mesh points. Discontinuities in c and/or s due to material interfaces are permitted provided that a mesh point is placed at each interface.
For t = t0 and all x, the solution components satisfy initial conditions of the form
(1-4) |
For all t and either x = a or x = b, the solution components satisfy a boundary condition of the form
(1-5) |
Elements of q are either identically zero or never zero. Note that the boundary conditions are expressed in terms of the flux f rather than ∂u/∂x. Also, of the two coefficients, only p can depend on u.
In the call sol = pdepe(m,pdefun,icfun,bcfun,xmesh,tspan)
:
m
corresponds to m.
xmesh(1)
and xmesh(end)
correspond
to a and b.
tspan(1)
and tspan(end)
correspond
to t0 and tf.
pdefun
computes the terms c, f,
and s (Equation 1-3). It has the form
[c,f,s] = pdefun(x,t,u,dudx)
The input arguments are scalars x
and t
and
vectors u
and dudx
that approximate
the solution u and its partial derivative with
respect to x, respectively. c
, f
,
and s
are column vectors. c
stores
the diagonal elements of the matrix c (Equation 1-3).
icfun
evaluates the initial conditions.
It has the form
u = icfun(x)
When called with an argument x
, icfun
evaluates
and returns the initial values of the solution components at x
in
the column vector u
.
bcfun
evaluates the terms p and q of
the boundary conditions (Equation 1-5). It has the form
[pl,ql,pr,qr] = bcfun(xl,ul,xr,ur,t)
ul
is the approximate solution at the left
boundary xl
= a and ur
is
the approximate solution at the right boundary xr
= b. pl
and ql
are
column vectors corresponding to p and q evaluated
at xl
, similarly pr
and qr
correspond
to xr
. When m > 0 and a =
0, boundedness of the solution near x = 0 requires
that the flux f vanish at a =
0. pdepe
imposes this boundary
condition automatically and it ignores values returned in pl
and ql
.
pdepe
returns the solution as a multidimensional
array sol
. ui = ui
= sol
(:
,:
,i
)
is an approximation to the i
th component of the
solution vector u. The element ui
(j
,k
)
= sol
(j
,k
,i
)
approximates ui at (t,x) = (tspan
(j
),xmesh
(k
)).
ui
= sol
(j
,:
,i
)
approximates component i
of the solution at time tspan
(j
)
and mesh points xmesh(:)
. Use pdeval
to
compute the approximation and its partial derivative ∂ui/∂x at
points not included in xmesh
. See pdeval
for details.
sol = pdepe(m,pdefun,icfun,bcfun,xmesh,tspan,options)
solves
as above with default integration parameters replaced by values in options
,
an argument created with the odeset
function.
Only some of the options of the underlying ODE solver are available
in pdepe
: RelTol
, AbsTol
, NormControl
, InitialStep
,
and MaxStep
. The defaults obtained by leaving off
the input argument options
will generally be satisfactory.
See odeset
for details.
[sol,tsol,sole,te,ie] = pdepe(m,pdefun,icfun,bcfun,xmesh,tspan,options)
with
the 'Events'
property in options
set
to a function handle Events
, solves as above while
also finding where event functions g(t,u(x,t))
are
zero. For each function you specify whether the integration is to
terminate at a zero and whether the direction of the zero crossing
matters. Three column vectors are returned by events
:
[value,isterminal,direction] = events(m,t,xmesh,umesh)
. xmesh
contains
the spatial mesh and umesh
is the solution at the
mesh points. Use pdeval
to evaluate the solution
between mesh points. For the I-th event function, value(i)
is
the value of the function, ISTERMINAL(I) = 1
if
the integration is to terminate at a zero of this event function and
0 otherwise. direction(i) = 0
if all zeros are
to be computed (the default), +1 if only zeros where the event function
is increasing, and -1 if only zeros where the event function is
decreasing. Output tsol
is a column vector of
times specified in tspan
, prior to first terminal
event. SOL(j,:,:)
is the solution at T(j)
. TE
is
a vector of times at which events occur. SOLE(j,:,:)
is
the solution at TE(j)
and indices in vector IE
specify
which event occurred.
If UI = SOL(j,:,i)
approximates component
i of the solution at time TSPAN(j)
and mesh points XMESH
, pdeval
evaluates the approximation and
its partial derivative ∂ui/∂x at
the array of points XOUT
and returns them in UOUT
and DUOUTDX: [UOUT,DUOUTDX] = PDEVAL(M,XMESH,UI,XOUT)
Note: The partial derivative ∂ui/∂x is evaluated here rather than the flux. The flux is continuous, but at a material interface the partial derivative may have a jump. |
Example 1. This example illustrates the straightforward formulation, computation, and plotting of the solution of a single PDE.
This equation holds on an interval 0 ≤ x ≤ 1 for times t ≥ 0.
The PDE satisfies the initial condition
and boundary conditions
It is convenient to use local functions to place all the functions
required by pdepe
in a single function.
function pdex11 m = 0; x = linspace(0,1,20); t = linspace(0,2,5); sol = pdepe(m,@pdex1pde,@pdex1ic,@pdex1bc,x,t); % Extract the first solution component as u. u = sol(:,:,1); % A surface plot is often a good way to study a solution. surf(x,t,u) title('Numerical solution computed with 20 mesh points.') xlabel('Distance x') ylabel('Time t') % A solution profile can also be illuminating. figure plot(x,u(end,:)) title('Solution at t = 2') xlabel('Distance x') ylabel('u(x,2)') % -------------------------------------------------------------- function [c,f,s] = pdex1pde(x,t,u,DuDx) c = pi^2; f = DuDx; s = 0; % -------------------------------------------------------------- function u0 = pdex1ic(x) u0 = sin(pi*x); % -------------------------------------------------------------- function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t) pl = ul; ql = 0; pr = pi * exp(-t); qr = 1;
In this example, the PDE, initial condition, and boundary conditions
are coded in local functions pdex1pde
, pdex1ic
,
and pdex1bc
.
The surface plot shows the behavior of the solution.
The following plot shows the solution profile at the final value
of t
(i.e., t = 2
).
Example 2. This example illustrates the solution of a system of PDEs. The problem has boundary layers at both ends of the interval. The solution changes rapidly for small t.
The PDEs are
where F(y) = exp(5.73y) – exp(–11.46y).
This equation holds on an interval 0 ≤ x ≤ 1 for times t ≥ 0.
The PDE satisfies the initial conditions
and boundary conditions
In the form expected by pdepe
, the equations
are
The boundary conditions on the partial derivatives of u have
to be written in terms of the flux. In the form expected by pdepe
,
the left boundary condition is
and the right boundary condition is
The solution changes rapidly for small t.
The program selects the step size in time to resolve this sharp change,
but to see this behavior in the plots, the example must select the
output times accordingly. There are boundary layers in the solution
at both ends of [0,1], so the example places mesh points near 0
and 1
to
resolve these sharp changes. Often some experimentation is needed
to select a mesh that reveals the behavior of the solution.
function pdex4 m = 0; x = [0 0.005 0.01 0.05 0.1 0.2 0.5 0.7 0.9 0.95 0.99 0.995 1]; t = [0 0.005 0.01 0.05 0.1 0.5 1 1.5 2]; sol = pdepe(m,@pdex4pde,@pdex4ic,@pdex4bc,x,t); u1 = sol(:,:,1); u2 = sol(:,:,2); figure surf(x,t,u1) title('u1(x,t)') xlabel('Distance x') ylabel('Time t') figure surf(x,t,u2) title('u2(x,t)') xlabel('Distance x') ylabel('Time t') % -------------------------------------------------------------- function [c,f,s] = pdex4pde(x,t,u,DuDx) c = [1; 1]; f = [0.024; 0.17] .* DuDx; y = u(1) - u(2); F = exp(5.73*y)-exp(-11.47*y); s = [-F; F]; % -------------------------------------------------------------- function u0 = pdex4ic(x); u0 = [1; 0]; % -------------------------------------------------------------- function [pl,ql,pr,qr] = pdex4bc(xl,ul,xr,ur,t) pl = [0; ul(2)]; ql = [1; 0]; pr = [ur(1)-1; 0]; qr = [0; 1];
In this example, the PDEs, initial conditions, and boundary
conditions are coded in local functions pdex4pde
, pdex4ic
,
and pdex4bc
.
The surface plots show the behavior of the solution components.
[1] Skeel, R. D. and M. Berzins, "A Method for the Spatial Discretization of Parabolic Equations in One Space Variable," SIAM Journal on Scientific and Statistical Computing, Vol. 11, 1990, pp.1–32.