Linear Methods of Applied Mathematics

Classification of PDEs

(c) Copyright 2000 by Evans M. Harrell II and James V. Herod. 
     All rights reserved.

Notes for the instructor.

This contains calculations and examples which correlate with chapter XVIII of the WWW text by Harrell and Herod.

Students can be encouraged to cut and paste from this notebook to do homework.

Instructions

This notebook uses Mathematica  to perform calculations for Harrell and Herod's hypertext book, Linear Methods of Applied Mathematics.   The student needs only a basic knowledge of Mathematica  to use the notebook, which is designed both to show how to work problems in the text and to provide a template for using Mathematica  to work other problems of the student's own design.  

Calculations will be performed when the reader presses enter in a given calculation cell (bold print).  It is best to activate the cells in order, so that Mathematica  will be able to call on operators and functions defined in earlier cells.  Red color coding is used to warn the reader when a given calculation relies on an earlier one.

Introduction.

Second-order partial differential equations of the form


(in Mathematica notation:  
	a[x,y]  D[u[x,y] , {x,2}] + b[x,y] D[u[x,y] , x,y] + c[x,y] D[u[x,y] , {x,2}] 
		+ lower order terms  == f[x,y]                  )

may seem to allow for tremendous variety, but in fact, putting aside "degenerate cases," there are only three kinds of equations of this type, and they behave qualitatively like the Poisson (potential) equation, the heat equation, or the wave equation.  In this notebook we discuss the classification of the different types of equations of second order and how to put them into standard "canonical" forms.

We shall only look at linear equations, and assume that the coefficients a, b, and c are all finite, continuous functions and that at any (x,y) at least one of them is nonzero.   (Otherwise we can't consistently speak of the order of the equation as 2.)

In this notebook we specify a partial differential equation by listing six coefficients:

{a, b, c, d, e, f, g}

PDE[Coeffs_, x_, y_] :=  
	  Coeffs[[1]]  D[u[x, y] ,  x, x] + Coeffs[[2]]  D[u[x, y] ,  x, y] + 
		Coeffs[[3]]  D[u[x, y] , y, y]  +Coeffs[[4]]  D[u[x, y] ,  x] + 
		Coeffs[[5]]  D[u[x, y] ,  y] +Coeffs[[6]] u ==Coeffs[[7]]

The coefficients, which need to be read in, may be  constants:
a  =  1;  b = 7;  c = 3;  d = 4;  e = 5;  f = 6   . 
or functions of (x,y) such as:
a  =  x;  b = x y;  c = 3;  d = 4;  e = 5;  
      f = 6  .

The Type of the Equation

As explained in Chapter XIX, the type of the equation depends on a simple calculation of the discriminant of the coefficients - the same discriminant as for a quadratic equation written in the usual way.

\(Disc[PDECs_]\  = \ 
      b^2\  - \ 4\ a\ c\ \ \  /. \ 

        		{a\  -> \ PDECs[\([1]\)], \ b\  -> \ PDECs[\([2]\)], \ 
          c\  -> \ PDECs[\([3]\)]}\)

Type[PDECs_] := If[Disc[PDECs]<0,Elliptic,If[Disc[PDECs]>0,Hyperbolic,Parabolic]]

Examples

Coeffs1  =  {1, 2, 3, 4, 5, 6, 7};

Disc[%]

Type[Coeffs1]

What if the coefficients are not constant, as for
	a=x; b=x y;c=3;d=4;e=5;f=6; g=7  ?

Coeffs2  =  {x, x y, 3, 4, 5, 6, 7};

Disc[Coeffs2]

Type[Coeffs2]

The problem is that the type depends on the values of x,y.  The study of partial differential equations which change type is beyond the scope of this text, but we can still identify regions where the equation is of a given type:

Type[Coeffs2  /. {x  ->  2,  y  -> 7}]

Type[Coeffs2  /. {x  ->  0,  y  ->  2}]

Thus at x=0, y = 2, the equation is parabolic.  This is not very helpful, because the equation is parabolic only for x=0 and on the curve x y^2 == 12.  However, for the region x>0, xy^2 > 12, for example, it is hyperbolic, and this would be helpful as long as (x,y) is confined in this region

Canonical forms

In this section we assume that the coefficients in the leading part of the partial differential equation are constant.  By "leading part" we mean a,b, and c, the coefficients of the second derivatives.  We will find a transformaiton of variables which converts the equation into the canonical form appropriate for the type of the equation.

Nothing prevents us from fixing the values of x and y and doing the same transformations.  There will be some additional complications when we substitute because of the product rule, and it will in general not be easy to find the complicated relationship between the old variables and the new ones.  A study of the method of characteristics will go into these matters in more depth.

The problem of putting a partial differential equation into canonical form is the same as diagonalizing the principal matrix AMat, where we write the PDE as 
        Transpose[grad]  AMat  grad + BVec . grad u + e u == f, 
where grad denotes the gradient operator expressed as a column vector.  Thus:

\(AMat[PDECoeffs_]\  := {{a, b/2}, {b/2, c}}\ \ \  /. 

        	\ \ \ \ {a\  -> \ \ PDECoeffs[\([1]\)], 
          b\  -> \ \ PDECoeffs[\([2]\)], c\  -> \ \ PDECoeffs[\([3]\)]}; 

    BVec[PDECoeffs_]\ \  := 
      \ {d, e}\ \  /. 
        
{d\  -> \ \ PDECoeffs[\([4]\)], \ e\  -> \ \ PDECoeffs[\([5]\)]}
          \)

Explanation of syntax

Mathematica expresses a matrix as a list of row vectors, which are themselves lists.  Any list is given in braces:  {this, that, the other}.  If you want to see the matris in usual notation, use the command MatrixForm:

MatrixForm[{{a, b}, {c, d}}]

Our goal is to diagonalize the matrix AMat by a change of variables.  If the coefficients are constant, the change of variables will be linear, by a matrix TMat:

NewVars[TransMat_, OldVars_]  := TransMat  .  OldVars

Example

Suppose xnew= -x + y, ynew=x + y.  The transformation matrix is:

TMat  =  {{-1, 1}, {1, 1}}

NewVars[TMat, {x, y}]

Clear[TMat]

Because of the chain rule, AMat and BVec are transformed as follows:

NewAMat[TransMat_, OldA_]  :=  
          TransMat . OldA . Transpose[TransMat];
NewBVec[TransMat_, OldB_]  :=  OldB  .  Transpose[TransMat]

Examples

As in the previous example, we suppose xnew= -x + y, ynew=x + y.

TMat  =  {{-1, 1}, {1, 1}};  OldA  =  {{1, 2}, {2, 1}};

NewAMat[TMat, OldA]

Notice this is a diagonal matrix:

MatrixForm[%]

Clear[TMat, OldA]

Actually, any matrix of the form {{this, that},{that,this}} is diagonalized by the same TMat:

TMat  =  {{-1, 1}, {1, 1}};

MatrixForm[NewAMat[TMat, {{this, that}, {that, this}}]]

Clear[TMat]

Transforming PDEs

Suppose now that we have a partial differential equation with coefficients {a,b,c,d,e,f}, and we make a linear change of variables with some matrix.  Then the new coefficients are as follows:

\(NewCoeffs[TransMat_, OldA_, OldB_]\  := \ 
      \(({\(NewAMat[TransMat, OldA]\)[\([1, 1]\)], 
            \(NewAMat[TransMat, OldA]\)[\([1, 2]\)], 
            \(NewAMat[TransMat, OldA]\)[\([2, 2]\)], 
            \(NewBVec[TransMat, OldB]\)[\([1]\)], 
            \(NewBVec[TransMat, OldB]\)[\([2]\)], Coeffs[\([6]\)], 
            Coeffs[\([7]\)]}\  /. \ 

          		\ \ \ \ \ {x\  -> \((Inverse[TransMat] . {xi, eta})\)[\([1]\)], 
            
			\ \ \ \ \ 
            y\  -> \((Inverse[TransMat] . {xi, eta})\)[\([1]\)]})\)\)

Example

Coeffs  =  {1, -1, 1, 2, -4, x, y};

A = AMat[Coeffs];  B = BVec[Coeffs];

TMat  =  {{-1, 1}, {1, 1}}

NewCoeffs[TMat,A,B]

PDE[%,xi,eta]

Clear[Coeffs, A, B, TMat]

Finding the Transformation

It remains to find the correct transformation to put a differential equation into canonical form.  This is the same as finding a transformation matrix so that the new AMat of coefficients is diagonal with only 0,+1,or -1 on the diagonal.  The following example gives the pattern for various such problems:

Example 1

Clear[TMat, TMat1, FirstStep, Scales, Coeffs]

Coeffs  =  {1, -4, 1, 1, 0, x, x u^2}

TMat1 := Eigenvectors[AMat[Coeffs]]

FirstStep =  Simplify[NewAMat[TMat1,AMat[Coeffs]]]

We need to scale the diagonal entries to 0,+1, or -1, so we multiply  TMat1  by a matrix which does this:

Scales = {If[FirstStep[[1, 1]] == 0, 1, FirstStep[[1, 1]]^2], 
          If[FirstStep[[2, 2]] == 0, 1, FirstStep[[2, 2]]^2]}^
        (-1/4)

Explanation of the syntax

We need to multiply the previous matrix NewAMat[TMat1,AMat[Coeffs]] by a matrix which divides the things on the diagonal by their magnitudes, and this step calculates the scaling factors.  Since we multiply both on the right and on the left, each scaling matrix must divide by the square root of the magnitude.  We short cut to this by writing the square-root of an absolute value as the fourth root of the square.  

The If steps take care of the parabolic case, when one of the diagonals is 0.  In that case we leave it alone by dividing by 1 rather than trying to divide by 0.

We now fill this out to a 2 by 2 matrix and multiply it by TMat1 :

TMat = {{Scales[[1]], 0}, {0, Scales[[2]]}}.TMat1

Let's test it out:

Simplify[NewAMat[TMat,AMat[Coeffs]]]

Simplify[NewCoeffs[TMat,AMat[Coeffs],BVec[Coeffs]]]

{PDE[%,xi,eta],  Type[%]}

Clear[TMat, TMat1]

Example 2

Clear[TMat, TMat1, FirstStep, Scales, Coeffs]

Coeffs  =  {1, 4, 4, -1, 0, x, x}

TMat1 := Eigenvectors[AMat[Coeffs]]

FirstStep =  Simplify[NewAMat[TMat1,AMat[Coeffs]]]

We need to scale the diagonal entries to 0,+1, or -1, so we multiply  TMat1  by a matrix which does this:

Scales = {If[FirstStep[[1, 1]] == 0, 1, FirstStep[[1, 1]]^2], 
          If[FirstStep[[2, 2]] == 0, 1, FirstStep[[2, 2]]^2]}^
        (-1/4)

TMat = {{Scales[[1]], 0}, {0, Scales[[2]]}}.TMat1

Let's test it out:

Simplify[NewAMat[TMat,AMat[Coeffs]]]

Simplify[NewCoeffs[TMat,AMat[Coeffs],BVec[Coeffs]]]

{PDE[%,xi,eta],  Type[%]}

Clear[TMat, TMat1, FirstStep, Scales, Coeffs]

Example 3

Clear[TMat, TMat1, FirstStep, Scales, Coeffs]

Coeffs  =  {0, 4, 0, 1, -4, x, 0}

TMat1 := Eigenvectors[AMat[Coeffs]]

FirstStep =  Simplify[NewAMat[TMat1,AMat[Coeffs]]]

We need to scale the diagonal entries to 0,+1, or -1, so we multiply  TMat1  by a matrix which does this:

Scales = {If[FirstStep[[1, 1]] == 0, 1, FirstStep[[1, 1]]^2], 
          If[FirstStep[[2, 2]] == 0, 1, FirstStep[[2, 2]]^2]}^
        (-1/4)

TMat = {{Scales[[1]], 0}, {0, Scales[[2]]}}.TMat1

Let's test it out:

Simplify[NewAMat[TMat,AMat[Coeffs]]]

Simplify[NewCoeffs[TMat,AMat[Coeffs],BVec[Coeffs]]]

{PDE[%,xi,eta],  Type[%]}

Clear[TMat, TMat1, FirstStep, Scales, Coeffs]

Example 4

Clear[TMat, TMat1, FirstStep, Scales, Coeffs]

Coeffs  =  {1, -1, 1, 1, -4, x, x^2}

TMat1 := Eigenvectors[AMat[Coeffs]]

FirstStep =  Simplify[NewAMat[TMat1,AMat[Coeffs]]]

We need to scale the diagonal entries to 0,+1, or -1, so we multiply  TMat1  by a matrix which does this:

Scales = {If[FirstStep[[1, 1]] == 0, 1, FirstStep[[1, 1]]^2], 
          If[FirstStep[[2, 2]] == 0, 1, FirstStep[[2, 2]]^2]}^
        (-1/4)

TMat = {{Scales[[1]], 0}, {0, Scales[[2]]}}.TMat1

Let's test it out:

Simplify[NewAMat[TMat,AMat[Coeffs]]]

Simplify[NewCoeffs[TMat,AMat[Coeffs],BVec[Coeffs]]]

{PDE[%,xi,eta],  Type[%]}

Clear[TMat, TMat1, FirstStep, Scales, Coeffs]