In this example, we use the package IntroToSymmetry.m to work out the point group of a coupled pair of PDEs, the boundary layer stream function equation with a buoyancy induced forcing term, 

ΨxΨxy-ΨxΨyy-β(ginf/rhoinf)(T-Tinf)-nu*Ψyyy=0, 

and a convection-diffusion equation for the temperature, 

(alpha)Tyy-ΨyTx+ΨxTy=0.

The following command turns off spurious spelling error messages.

Off[General::spell]

First read in the package which is located in a folder called SymmetryAnalysis inside the Mathematica folder.

Needs["SymmetryAnalysis`IntroToSymmetry`"]

Enter the list of independent variables.

independentvariables = {"x", "y"};

Enter the list of dependent variables.

dependentvariables = {"Ψ", "t"};

Enter the input equations as strings. Don't include the ==0 at the end. The ambient reference temperature is tinf.

equation1 = "D[Ψ[x,y],y,y,y]+
(1/nu)*beta*(ginf/rhoinf)*(t[x,y]-tinf)+
(1/nu)*D[Ψ[x,y],x]*D[Ψ[x,y],y,y]-
(1/nu)*D[Ψ[x,y],y]*D[Ψ[x,y],x,y]";

equation2=
"D[t[x,y],y,y]-
(1/alpha)*D[Ψ[x,y],y]*D[t[x,y],x]+
(1/alpha)*D[Ψ[x,y],x]*D[t[x,y],y]";

\(\(rulesarray = {"D[Ψ[x,y],y,y,y]->-
(1/nu)*beta*(ginf/rhoinf)*(t[x,y]-tinf)-
(1/nu)*D[Ψ[x,y],x]*D[Ψ[x,y],y,y]+
(1/nu)*D[Ψ[x,y],y]*D[Ψ[x,y],x,y]", 
"D[t[x,y],y,y]->
(1/alpha)*D[Ψ[x,y],y]*D[t[x,y],x]-
(1/alpha)*D[Ψ[x,y],x]*D[t[x,y],y]"};\)\)

The input equations are expressed internally in terms of generic variables, (x1,x2,x3,..., y1,y2,y3,...) using the function StringReplace. When this is done it is important that function names and constant names that may appear in the equation are not modified. Enter these protected names in string format.

\(\(frozennames = {"nu", "beta", "ginf", "tinf", "rhoinf"};\)\)

Enter the maximum derivative order of the input equation set.

p = 3;

The maximum derivative order that the infinitesimals are assumed to depend on is specified by the input parameter r. This parameter is only nonzero when the user is looking for Lie contact groups or Lie-Backlund groups. For the usual case where one is searching for point groups set r=0.

r = 0;

When searching for Lie-Backlund groups (r=1 or greater) one can, without loss of generality, leave the independent variables untransformed. The corresponding infinitesimals (the xse's) are set to zero by setting xseon=0. If one is searching for point groups then set xseon=1. The choice xseon=1 is also an option when looking for Lie-Backlund groups and this can be useful when looking for contact symmetries.

xseon = 1;

When searching for Lie-Backlund groups it is necessary to differentiate the input equation to produce derivatives of order p+r and append these higher order differential consequences to the set of rules applied to the invariance condition. This process is carried out automatically when internalrules=1. For point groups the equation or equation system is the only rule or set of rules needed and one sets internalrules=0.

internalrules = 0;

Now work out the determining equations of the Lie point group that leaves equation1 invariant. The output is available as a table of strings called zdeterminingequations. Notice that rulesarray contains both equations and that therefore both equations in the set are applied to the invariance condition for each equation.

Timing[
      FindDeterminingEquations[
independentvariables, 
        dependentvariables, frozennames, 
p, r, xseon, 
        equation1, rulesarray, internalrules]]

equationgenericvariables

invarconditiontable

Here are the determining equations in terms of z-variables. Set them equal to a new table called zdeterminingequations1. Remove the semicolon at the end if you want to look at the equations.

zdeterminingequations1 = zdeterminingequations;

Now work out the determining equations of the point group which leaves equation2 invariant.

Timing[
      FindDeterminingEquations[independentvariables, dependentvariables, 
        frozennames, p, r, xseon, equation2, rulesarray, 
        internalrules]]

equationgenericvariables

invarconditiontable

Here are the determining equations in terms of z-variables. Set them equal to a new table called zdeterminingequations2. Remove the semicolon at the end if you want to look at the equations.

zdeterminingequations2 = zdeterminingequations;

Now concatenate these two sets of determining equations together to form the table zdeterminingequations3 that contains the determining equations for the entire equation set.

zdeterminingequations3=Join[
zdeterminingequations1,zdeterminingequations2];

How many determining equations are we dealing with?

Length[zdeterminingequations3]

Here is the correspondence between z-variables and conventional variables.

ztableofrules

Now solve the determining equations in terms of multivariable polynomials of some selected order.

Timing[
      SolveDeterminingEquations[
independentvariables, 
        dependentvariables, r, xseon, zdeterminingequations3, 
        order = 3]]

Here are the infinitesimal transformation functions for the independent variables.

xsefunctions

and for the dependent variables.

etafunctions

ToExpression[xsefunctions]/.ztableofrules

ToExpression[etafunctions]/.ztableofrules

ColumnForm[infinitesimalgroups /. ztableofrules]

Notice that the infinite dimensional translation group on the wall normal coordinate still comes out, ie, this symmetry is not lost when the temperature equation is coupled to the boundary layer equation. This invariance allows the solution on a flat plate to be mapped to an arbitrary shaped wall (within reason).

Now generate the commutator table of the Lie algebra. Convert z-variables to conventional variables. Note that in the conversion the functional dependence of the conventional variables is left out. The procedure that creates the commutator table requires that the table of groups be in this form.

infinitesimalgroupsxy = 
        infinitesimalgroups /. {z1 -> x, z2 -> y, 
            z3 -> Ψ, z4 -> t};

MakeCommutatorTable[independentvariables, dependentvariables, 
      infinitesimalgroupsxy]

MatrixForm[Simplify[commutatortable]]