Method of lines/example implementation/dss002

From Scholarpedia
Jump to: navigation, search
    %  File: dss002.m
    %
       function [ux]=dss002(xl,xu,n,u)
    %
    %  Function dss002 computes the first derivative, u , of a
    %                                                  x
    %  variable u over the spatial domain xl le x le xu.
    %
    %  Argument list
    %
    %     xl      Lower boundary value of x (input)
    %
    %     xu      Upper boundary value of x (input)
    %
    %     n       Number of grid points in the x domain including the
    %             boundary points (input)
    %
    %     u       One-dimensional array containing the values of u at
    %             the n grid point points for which the derivative is
    %             to be computed (input)
    %
    %     ux      One-dimensional array containing the numerical
    %             values of the derivatives of u at the n grid points
    %             (output)
    %
    %  Function dss002 computes the first derivative, u , of a
    %                                                  x
    %  variable u over the spatial domain xl le x le xu from the
    %  classical three-point, second-order finite difference approxi-
    %  tions
    %
    %                                       2
    %  u1  = (1/2dx)(-3u1 + 4u2 - u3) + O(dx ) (left boundary,     (1)
    %    x                                         x = xl)
    %
    %                                   2
    %  ui  = (1/2dx)(ui+1 - ui-1) + O(dx ) (interior point,        (2)
    %    x                                   x ne xl, xu)
    %
    %                                          2
    %  un  = (1/2dx)(3un - 4un-1 + un-2) + O(dx ) (right boundary, (3)
    %    x                                            x = xu)
    %
    %  Equations (1) to (3) apply over a grid in x with corresponding
    %  values of the function u(x) represented as
    %
    %   u1      u2       u3         ui        un-2      un-1    un
    %
    %  x=xl  x=xl+dx  x=xl+2dx ... X=xi ... X=xu-2dx  x=xu-dx  x=xu
    %
    %  The origin of equations (1) to (3) is outlined below.
    %
    %  Consider the following polynomial in x of arbitrary order
    %
    %                                     2             3
    %  u(x) = a0 + a1(x - x0) + a2(x - x0)  + a3(x - x0)  + ....   (4)
    %
    %  We seek the values of the coefficients a0, a1, a2, ... for a
    %  particular function u(x).  If x = x0 is substituted in equation
    %  (4), we have immediately a0 = u(x0).  Next, if equation (4) is
    %  differentiated with respect to x,
    %
    %                                                   2
    %  du(x)/dx = u (x) = a1 + 2a2(x - x0) + 3a3(x - x0)  + ...    (5)
    %              x
    %
    %  Again, with x = x0, a1 = du(x0)/dx = u (x0).  Differentiation
    %                                        x
    %  of equation (5) in turn gives
    %
    %  d2u(x)/dx2 = u  (x) = 2a2 + 6a3(x - x0) + ...
    %                2x
    %
    %  And for x = x0, a2 = u  (x0)/2f (2f = 1*2, i.e., 2 factorial).
    %                        2x
    %
    %  We can continue this process of differentiation followed by the
    %  substitution x = x0 to obtain the successive coefficients in
    %  equation (4), a3, a4, ...  Finally, substitution of these co-
    %  efficients in equation (4) gives
    %
    %                                                 2
    %  u(x) = u(x0) + u (x0)(x - x0) + u  (x0)(x - x0)  +
    %                  x       1f       2x       2f
    %                                                              (6)
    %                                3                  4
    %                 U  (x0)(x - x0)  + u  (x0)(x - x0)  + ...
    %                  3x       3f        4x       4f
    %
    %  The correspondence between equation (6) and the well-known
    %  Taylor series should be clear.  Thus the expansion of a
    %  function, u(x), around a neighboring point x0 in terms of u(x0)
    %  and the derivatives of u(x) at x = x0 is equivalent to approxi-
    %  mating u(x) near x0 by a polynomial.
    %
    %  Equation (6) is the starting point for the derivation of the
    %  classical finite difference approximations of derivatives such
    %  as the three-point formulas of equations (1), (2) and (3).  We
    %  will now consider the derivation of these three-point formulas
    %  in a standard format that can then be extended to higher
    %  multi-point formulas in other subroutines, e.g., five-point
    %  formulas in routine dss004.
    %
    %  Three-point formulas
    %
    %     (1)  Left end, point i = 1
    %
    %  If equation (6) is written around the points x = xl for x = xl +
    %  dx and x = xl + 2dx, for which the corresponding values of u(x)
    %  are u1, u2 and u3 (u1 and u2 are separated with respect to x by
    %  distance dx as are u2 and u3, i.e., we assume a uniform grid
    %  spacing, dx, for independent variable x)
    %
    %                                2            3
    %  u2 = u1 + u1 ( dx) + u1  ( dx)  + u1  ( dx)  + ...          (7)
    %              x  1f      2x  2f       3x  3f
    %
    %                                2            3
    %  u3 = u1 + u1 (2dx) + u1  (2dx)  + u1  (2dx)  + ...          (8)
    %              x  1f      2x  2f       3x  3f
    %
    %  We can now take a linear combination of equations (7) and (8)
    %  by first multiplying equation (7) by a constant, a, and equa-
    %  tion (8) by constant b
    %
    %                                  2           3
    %  a(u2 = u1 + u1 ( dx) + u1  ( dx) + u1  ( dx) + ...)         (9)
    %                x  1f      2x  2f      3x  3f
    %
    %                                  2           3
    %  b(u3 = u1 + u1 (2dx) + u1  (2dx) + u1  (2dx) + ...)        (10)
    %                x  1f      2x  2f      3x  3f
    %
    %  Constants a and b are then selected so that the coefficients of
    %  the u1  terms sum to one (since we are interested in obtaining
    %        x
    %  a finite difference approximation for this first derivative).
    %  Also, we select a and b so that the coefficients of the u1
    %                                                            2x
    %  terms sum to zero in order to drop out the contribution of this
    %  second derivative (the basic idea is to drop out as many of the
    %  derivatives as possible in the Taylor series beyond the deri-
    %  vative of interest, in this case u1 , in order to produce a
    %                                     x
    %  finite difference approximation for the derivative of maximum
    %  accuracy).  In this case we have only two constants, a and b,
    %  to select so we can drop out only the second derivative, u1  ,
    %                                                             2x
    %  in the Taylor series (in addition to retaining the first deri-
    %  vative).  This procedure leads to two linear algebraic equa-
    %  tions in the two constants
    %
    %  a + 2b = 1
    %
    %  a + 4b = 0
    %
    %  Solution of these equations for a and b gives
    %
    %  a = 2, b = -1/2
    %
    %  Solution of equations (9) and (10) for u1  with these values of
    %  a and b gives equation (1)               x
    %
    %                                      2
    %  u1 = (1/2dx)(-3u1 + 4u2 - u3) + O(dx )                      (1)
    %    x
    %               2
    %  The term O(dx ) indicates a principal error term due to trunca-
    %                                                2
    %  tion of the Taylor series which is of order dx .  This term in
    %                    2
    %  fact equals u1  dx /3f, which is easily obtained in deriving
    %                3x
    %  equation (1).
    %
    %  This same basic procedure can now be applied to the derivation
    %  of equations (2) and (3).
    %
    %     (2)  Interior point i
    %
    %                                    2           3
    %  a(ui-1 = ui + ui (-dx) + ui  (-dx) + ui  (-dx) + ...)
    %                  x  1f      2x  2f      3x  3f
    %
    %                                    2           3
    %  b(ui+1 = ui + ui ( dx) + ui  ( dx) + ui  ( dx) + ...)
    %                  x  1f      2x  2f      3x  3f
    %
    %  -a + b = 1
    %
    %   a + b = 0
    %
    %  a = 1/2, b = -1/2
    %                                   2
    %  ui  = (1/2dx)(ui+1 - ui-1) + O(dx )                         (2)
    %    x
    %
    %     (3)  Right end, point i = n
    %
    %                                      2            3
    %  a(un-2 = un + un (-2dx) + un  (-2dx) + un  (-2dx) + ...)
    %                  X   1f      2x   2f      3x   3f
    %
    %                                      2            3
    %  b(un-1 = un + un ( -dx) + un  ( -dx) + un  ( -dx) + ...)
    %                  x   1f      2x   2f      3x   3f
    %
    %  -2a - b = 1
    %
    %   4a + b = 0
    %
    %   a = -2, b = 1/2
    %                                          2
    %  un  = (1/2dx)(3un - 4un-1 + un-2) + O(dx )                  (3)
    %    x
    %
    %  The weighting coefficients for equations (1), (2) and (3) can
    %  be summarized as
    %
    %          -3   4  -1
    %
    %     1/2  -1   0   1
    %
    %           1  -4   3
    %
    %  Which are the coefficients reported by Bickley for n = 2, m =
    %  1, p = 0, 1, 2 (Bickley, W. G., Formulae for Numerical Differ-
    %  entiation, Math. Gaz., vol. 25, 1941).
    %
    %  Equations (1), (2) and (3) can now be programmed to generate
    %  the derivative u (x) of u(x).
    %                  x
    %
    %  Compute the spatial increment
       dx=(xu-xl)/(n-1);
       r2fdx=1./(2.*dx);
       nm1=n-1;
    %
    %  Equation (1) (note - the rhs of the finite difference approxi-
    %  tions, equations (1), (2) and (3) have been formatted so that
    %  the numerical weighting coefficients can be more easily associ-
    %  ated with the Bickley matrix listed above)
       ux(1)=r2fdx*...
         (     -3.   *u(  1)     +4.   *u(  2)     -1.   *u(  3));
    %
    %  Equation (2)
       for i=2:nm1
         ux(i)=r2fdx*...
         (     -1.   *u(i-1)     +0.   *u(  i)     +1.   *u(i+1));
       end
    %
    %  Equation (3)
       ux(n)=r2fdx*...
         (      1.   *u(n-2)     -4.   *u(n-1)     +3.   *u(  n));
    %
    
    
    Personal tools
    Namespaces

    Variants
    Actions
    Navigation
    Focal areas
    Activity
    Tools