(* Content-type: application/mathematica *)

(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)

(* CreatedBy='Mathematica 7.0' *)

(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[       145,          7]
NotebookDataLength[     44568,       1192]
NotebookOptionsPosition[     40320,       1055]
NotebookOutlinePosition[     40894,       1078]
CellTagsIndexPosition[     40851,       1075]
WindowFrame->Normal*)

(* Beginning of Notebook Content *)
Notebook[{
Cell[TextData[StyleBox["In this example we use the package IntroToSymmetry.m \
to work out the point group of the nonlinear wave equation, \n\n\
ftt-f^2*fxx=0.",
 FontSize->14,
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["Clear all symbols in the current context.", "Text",
 CellChangeTimes->{{3.4715644485587473`*^9, 3.47156448605101*^9}}],

Cell[BoxData[
 RowBox[{"ClearAll", "[", 
  RowBox[{"Evaluate", "[", 
   RowBox[{
    RowBox[{"Context", "[", "]"}], "<>", "\"\<*\>\""}], "]"}], "]"}]], "Input"],

Cell[TextData[{
 StyleBox["First read in the package which is located in User Home \
Folder/Library/",
  FontWeight->"Plain"],
 StyleBox["Mathematica",
  FontWeight->"Plain",
  FontSlant->"Italic"],
 StyleBox["/Applications/SymmetryAnalysis.",
  FontWeight->"Plain"]
}], "Text",
 CellChangeTimes->{{3.472046215957556*^9, 3.472046255573135*^9}, {
  3.472046289795615*^9, 3.472046308115048*^9}, {3.4720466725423717`*^9, 
  3.472046673357225*^9}},
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{"Needs", "[", "\"\<SymmetryAnalysis`IntroToSymmetry`\>\"", 
  "]"}]], "Input"],

Cell[TextData[StyleBox["Enter the input equation as a string. Don't include \
the ==0 at the end.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{
  "inputequation", "=", "\n", 
   "\"\<f[x,t]^2*D[f[x,t],x,x]-D[f[x,t],t,t]\>\""}], ";"}]], "Input"],

Cell[TextData[{
 StyleBox["The function ",
  FontWeight->"Plain"],
 "f[x,t]",
 StyleBox[" is a solution of the equation and this constraint must be applied \
in the form of a rule to the invariance condition. Be careful to check signs.",
  FontWeight->"Plain"]
}], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"rulesarray", "=", "\[IndentingNewLine]", 
   RowBox[{"{", "\"\<D[f[x,t],t,t]\[Rule]f[x,t]^2*D[f[x,t],x,x]\>\"", "}"}]}],
   ";"}]], "Input"],

Cell[TextData[StyleBox["Enter the list of independent variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"independentvariables", "=", 
   RowBox[{"{", 
    RowBox[{"\"\<x\>\"", ",", "\"\<t\>\""}], "}"}]}], ";"}]], "Input"],

Cell[TextData[StyleBox["Enter the list of dependent variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"dependentvariables", "=", 
   RowBox[{"{", "\"\<f\>\"", "}"}]}], ";"}]], "Input"],

Cell[TextData[StyleBox["Enter the list of function and/or constant names that \
must be preserved when the equation is expressed in terms of generic \
y1[x1,x2] variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"frozennames", "=", 
   RowBox[{"{", "\"\<\>\"", "}"}]}], ";"}]], "Input"],

Cell[TextData[StyleBox["Enter the maximum derivative order of the input \
equation(s).",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"p", "=", "2"}], ";"}]], "Input"],

Cell[TextData[StyleBox["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.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"r", "=", "0"}], ";"}]], "Input",
 CellChangeTimes->{{3.4715630325299377`*^9, 3.471563034047867*^9}, {
  3.4715663266993027`*^9, 3.471566327425129*^9}}],

Cell[TextData[StyleBox["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.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"xseon", "=", "1"}], ";"}]], "Input"],

Cell[TextData[StyleBox["When searching for Lie-Backlund groups it is \
necessary to differentiate the input equation with respect to each \
independent variable to produce derivatives of order p+r. These higher order \
differential consequences are appended 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.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"internalrules", "=", "0"}], ";"}]], "Input"],

Cell[TextData[StyleBox["Now work out the determining equations of the Lie \
point group that leaves the equation  invariant. The output is available as a \
table of strings called zdeterminingequations.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Timing", "[", 
  RowBox[{"FindDeterminingEquations", "[", "\[IndentingNewLine]", 
   RowBox[{
   "independentvariables", ",", "dependentvariables", ",", "frozennames", ",",
     "p", ",", "r", ",", "xseon", ",", "inputequation", ",", "rulesarray", 
    ",", "internalrules"}], "]"}], "]"}]], "Input",
 CellChangeTimes->{{3.471563039353066*^9, 3.471563040240786*^9}, {
  3.471566331914218*^9, 3.471566332898034*^9}}],

Cell[BoxData[
 InterpretationBox["\<\"The function FindDetermining Equations has begun, the \
memory in use = \\!\\(38859464\\), the time used = \\!\\(17.11605`\\)\"\>",
  StringForm[
  "The function FindDetermining Equations has begun, the memory in use = ``, \
the time used = ``", 38859464, 17.11605],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694707340643*^9, 3.471561692317341*^9, 
  3.47156306636029*^9, 3.471566306288766*^9, 3.471566376744767*^9, 
  3.471579332322803*^9, 3.483746834738641*^9}],

Cell[BoxData["\<\"The function FindDeterminingEquations is nearly complete. \
The invariance condition has been created with all rules applied. The final \
step in the generation of the determining equations is to sum together terms \
in the table of invariance condition terms (called infinitesimaltable) that \
are multiplied by the same combination of products of free y derivatives. The \
result is the table infinitesimaltablesums corresponding to matching \
y-derivative expressions. If the invariance condition is long as it often is \
this process could take a long time since it requires sorting through the \
table infinitesimaltable once for each possible combination of y derivative \
products. This is the rate limiting step in the function \
FindDeterminingEquations.Virtually all other steps are quite fast including \
the generation of the extended derivatives of the infinitesimals.\"\>"], \
"Print",
 CellChangeTimes->{3.4694707340643*^9, 3.471561692317341*^9, 
  3.47156306636029*^9, 3.471566306288766*^9, 3.471566376744767*^9, 
  3.471579332322803*^9, 3.483746834805038*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The determining equations have been expressed in \
terms of z-variables, the length of zdeterminingequations = \\!\\(16\\), the \
byte count of zdeterminingequations = \\!\\(1968\\), the memory in use = \
\\!\\(38856824\\), the time used = \\!\\(17.194474999999997`\\)\"\>",
  StringForm[
  "The determining equations have been expressed in terms of z-variables, the \
length of zdeterminingequations = ``, the byte count of zdeterminingequations \
= ``, the memory in use = ``, the time used = ``", 16, 1968, 38856824, 
   17.194474999999997`],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694707340643*^9, 3.471561692317341*^9, 
  3.47156306636029*^9, 3.471566306288766*^9, 3.471566376744767*^9, 
  3.471579332322803*^9, 3.483746834826971*^9}],

Cell[BoxData[
 InterpretationBox["\<\"FindDeterminingEquations is done. The memory in use = \
\\!\\(38857880\\), the time used = \\!\\(17.194721`\\)\"\>",
  StringForm[
  "FindDeterminingEquations is done. The memory in use = ``, the time used = \
``", 38857880, 17.194721],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694707340643*^9, 3.471561692317341*^9, 
  3.47156306636029*^9, 3.471566306288766*^9, 3.471566376744767*^9, 
  3.471579332322803*^9, 3.4837468348290777`*^9}],

Cell[BoxData["\<\"FindDeterminingEquations has finished executing. You can \
look at the output in the table zdeterminingequations. Each entry in this \
table is a determining equation in string format expressed in terms of \
z-variables. Rules for converting between z-variables and conventional \
variables are contained in the table ztableofrules. To view the determining \
equations in terms of conventional variables use the command \
ToExpression[zdeterminingequations]/.ztableofrules. There are two other items \
the user may wish to look at; the equation converted to generic \
(x1,x2,...,y1,y2,...) variables is designated equationgenericvariables and \
the various derivatives of the equation that appear in the invariance \
condition can be viewed in the table invarconditiontable. Rules for \
converting between z-variables and generic variables are contained in the \
table ztableofrulesxy.\"\>"], "Print",
 CellChangeTimes->{3.4694707340643*^9, 3.471561692317341*^9, 
  3.47156306636029*^9, 3.471566306288766*^9, 3.471566376744767*^9, 
  3.471579332322803*^9, 3.4837468348309402`*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.07945600000000042`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.4694707341730833`*^9, 3.4715616924270477`*^9, 
  3.471563066487711*^9, 3.4715663063665*^9, 3.471566376831658*^9, 
  3.471579332425845*^9, 3.483746834833654*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData["equationgenericvariables"], "Input"],

Cell[BoxData["\<\"y1[x1,x2]^2*D[y1[x1,x2],x1,x1]-D[y1[x1,x2],x2,x2]\"\>"], \
"Output",
 CellChangeTimes->{3.4694707342167597`*^9, 3.471561692459094*^9, 
  3.4715630665318336`*^9, 3.471566306437375*^9, 3.4715663768929653`*^9, 
  3.471579332477662*^9, 3.48374683487276*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData["invarconditiontable"], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0", ",", "0", ",", 
   RowBox[{"2", " ", 
    RowBox[{"y1", "[", 
     RowBox[{"x1", ",", "x2"}], "]"}], " ", 
    RowBox[{
     SuperscriptBox["y1", 
      TagBox[
       RowBox[{"(", 
        RowBox[{"2", ",", "0"}], ")"}],
       Derivative],
      MultilineFunction->None], "[", 
     RowBox[{"x1", ",", "x2"}], "]"}]}], ",", "0", ",", "0", ",", 
   SuperscriptBox[
    RowBox[{"y1", "[", 
     RowBox[{"x1", ",", "x2"}], "]"}], "2"], ",", "0", ",", 
   RowBox[{"-", "1"}]}], "}"}]], "Output",
 CellChangeTimes->{3.469470734271325*^9, 3.471561692504665*^9, 
  3.471563066584955*^9, 3.471566306479619*^9, 3.471566376932034*^9, 
  3.4715793325242662`*^9, 3.4837468349063387`*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData["ztableofrules"], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
   RowBox[{"z1", "\[Rule]", "x"}], ",", 
   RowBox[{"z2", "\[Rule]", "t"}], ",", 
   RowBox[{"z3", "\[Rule]", 
    RowBox[{"f", "[", 
     RowBox[{"x", ",", "t"}], "]"}]}]}], "}"}]], "Output",
 CellChangeTimes->{3.469470734316394*^9, 3.471561692540866*^9, 
  3.471563066619493*^9, 3.471566306541292*^9, 3.471566376998171*^9, 
  3.471579332578236*^9, 3.483746834943287*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[StyleBox["Here are the determining equations expressed in terms \
of z-variables. This output may be quite long. The equations in the table can \
be distinguished by the ==0 at the end of each item.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData["zdeterminingequations"], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"\<\"2*Derivative[0, 0, 1][xse1][z1, z2, z3] == 0\"\>", 
   ",", "\<\"-2*z3^2*Derivative[0, 0, 1][xse1][z1, z2, z3] == 0\"\>", 
   ",", "\<\"-2*z3^2*Derivative[0, 0, 1][xse2][z1, z2, z3] == 0\"\>", 
   ",", "\<\"2*z3^2*Derivative[0, 0, 1][xse2][z1, z2, z3] == 0\"\>", 
   ",", "\<\"Derivative[0, 0, 2][xse1][z1, z2, z3] == 0\"\>", 
   ",", "\<\"-(z3^2*Derivative[0, 0, 2][xse1][z1, z2, z3]) == 0\"\>", 
   ",", "\<\"Derivative[0, 0, 2][xse2][z1, z2, z3] == 0\"\>", 
   ",", "\<\"-(z3^2*Derivative[0, 0, 2][xse2][z1, z2, z3]) == 0\"\>", 
   ",", "\<\"-Derivative[0, 0, 2][eta1][z1, z2, z3] + 2*Derivative[0, 1, \
1][xse2][z1, z2, z3] == 0\"\>", 
   ",", "\<\"2*z3*eta1[z1, z2, z3] + 2*z3^2*Derivative[0, 1, 0][xse2][z1, z2, \
z3] - 2*z3^2*Derivative[1, 0, 0][xse1][z1, z2, z3] == 0\"\>", 
   ",", "\<\"2*Derivative[0, 1, 0][xse1][z1, z2, z3] - 2*z3^2*Derivative[1, \
0, 0][xse2][z1, z2, z3] == 0\"\>", 
   ",", "\<\"z3^2*Derivative[0, 0, 2][eta1][z1, z2, z3] - \
2*z3^2*Derivative[1, 0, 1][xse1][z1, z2, z3] == 0\"\>", 
   ",", "\<\"2*Derivative[0, 1, 1][xse1][z1, z2, z3] - 2*z3^2*Derivative[1, \
0, 1][xse2][z1, z2, z3] == 0\"\>", 
   ",", "\<\"-Derivative[0, 2, 0][eta1][z1, z2, z3] + z3^2*Derivative[2, 0, \
0][eta1][z1, z2, z3] == 0\"\>", 
   ",", "\<\"Derivative[0, 2, 0][xse1][z1, z2, z3] + 2*z3^2*Derivative[1, 0, \
1][eta1][z1, z2, z3] - z3^2*Derivative[2, 0, 0][xse1][z1, z2, z3] == 0\"\>", 
   ",", "\<\"-2*Derivative[0, 1, 1][eta1][z1, z2, z3] + Derivative[0, 2, \
0][xse2][z1, z2, z3] - z3^2*Derivative[2, 0, 0][xse2][z1, z2, z3] == 0\"\>"}],
   "}"}]], "Output",
 CellChangeTimes->{3.4694707343717623`*^9, 3.471561692588005*^9, 
  3.471563066664897*^9, 3.4715663065964622`*^9, 3.471566377054673*^9, 
  3.471579332623908*^9, 3.483746834977378*^9}]
}, Open  ]],

Cell["How many determining equations are there?", "Text"],

Cell[CellGroupData[{

Cell["Length[zdeterminingequations]", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData["16"], "Output",
 CellChangeTimes->{3.4694707344173737`*^9, 3.471561692642556*^9, 
  3.471563066701269*^9, 3.471566306630172*^9, 3.471566377098226*^9, 
  3.4715793326776543`*^9, 3.483746835010806*^9}]
}, Open  ]],

Cell["\<\
Now solve the determining equations in terms of multivariable polynomials of \
a selected order. The Mathematica function Solve uses Gaussian elimination to \
solve a  large number of linear equations for the polynomial coefficients. \
The time roughly follows

time/timeref=((number of equations)/(number of equationsref))^n

where the exponent is between 2.4 and 2.7. The Mathematica function Timing \
outputs the time required for the SolveDeterminingEquations function to \
execute.\
\>", "Text"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Timing", "[", 
  RowBox[{"SolveDeterminingEquations", "[", "\[IndentingNewLine]", 
   RowBox[{
   "independentvariables", ",", "dependentvariables", ",", "r", ",", "xseon", 
    ",", "zdeterminingequations", ",", 
    RowBox[{"order", "=", "4"}]}], "]"}], "]"}]], "Input",
 CellChangeTimes->{{3.47156304956818*^9, 3.4715630504800997`*^9}, {
  3.471566352288683*^9, 3.471566353120047*^9}}],

Cell[BoxData[
 InterpretationBox["\<\"The variable powertablelength is the number of terms \
required for each multivariate polynomial used for the infinitesimals. This \
number is determined by the choice of polynomial order and the number of \
zvariables. The time needed to solve the determining equations increases as \
powertable increases. powertablelength = \\!\\(35\\)\"\>",
  StringForm[
  "The variable powertablelength is the number of terms required for each \
multivariate polynomial used for the infinitesimals. This number is \
determined by the choice of polynomial order and the number of zvariables. \
The time needed to solve the determining equations increases as powertable \
increases. powertablelength = ``", 35],
  Editable->False]], "Print",
 CellChangeTimes->{3.469470734477844*^9, 3.471561692691785*^9, 
  3.4715630667483892`*^9, 3.4715663066778717`*^9, 3.471566377155871*^9, 
  3.471579332728201*^9, 3.483746835044344*^9}],

Cell[BoxData["\<\"The polynomial expansions have been substituted into the \
determining equations. It is now time to collect the coefficients of various \
powers of zvariables into a table called table of coefficientsall. This step \
uses the function CoefficientList and is a fairly time consuming procedure.\"\
\>"], "Print",
 CellChangeTimes->{3.469470734477844*^9, 3.471561692691785*^9, 
  3.4715630667483892`*^9, 3.4715663066778717`*^9, 3.471566377155871*^9, 
  3.471579332728201*^9, 3.483746835078689*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(39004056\\), The time = \\!\
\\(17.238826`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 39004056, 17.238826],
  Editable->False]], "Print",
 CellChangeTimes->{3.469470734477844*^9, 3.471561692691785*^9, 
  3.4715630667483892`*^9, 3.4715663066778717`*^9, 3.471566377155871*^9, 
  3.471579332728201*^9, 3.483746835109872*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of unknown polynomial coefficients = \
\\!\\(105\\)\"\>",
  StringForm["The number of unknown polynomial coefficients = ``", 105],
  Editable->False]], "Print",
 CellChangeTimes->{3.469470734477844*^9, 3.471561692691785*^9, 
  3.4715630667483892`*^9, 3.4715663066778717`*^9, 3.471566377155871*^9, 
  3.471579332728201*^9, 3.483746835143423*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of equations for the polynomial \
coefficients = \\!\\(238\\)\"\>",
  StringForm[
  "The number of equations for the polynomial coefficients = ``", 238],
  Editable->False]], "Print",
 CellChangeTimes->{3.469470734477844*^9, 3.471561692691785*^9, 
  3.4715630667483892`*^9, 3.4715663066778717`*^9, 3.471566377155871*^9, 
  3.471579332728201*^9, 3.483746835176908*^9}],

Cell[BoxData["\<\"Now it we are ready to use the function Solve to find the \
nonzero polynomial coefficients corresponding to the symmetries of the input \
equation(s). This can take a while.\"\>"], "Print",
 CellChangeTimes->{3.469470734477844*^9, 3.471561692691785*^9, 
  3.4715630667483892`*^9, 3.4715663066778717`*^9, 3.471566377155871*^9, 
  3.471579332728201*^9, 3.483746835210312*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(39075160\\), The time = \\!\
\\(17.246534`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 39075160, 17.246534],
  Editable->False]], "Print",
 CellChangeTimes->{3.469470734477844*^9, 3.471561692691785*^9, 
  3.4715630667483892`*^9, 3.4715663066778717`*^9, 3.471566377155871*^9, 
  3.471579332728201*^9, 3.48374683524306*^9}],

Cell[BoxData["\<\"Solve has finished.\"\>"], "Print",
 CellChangeTimes->{3.469470734477844*^9, 3.471561692691785*^9, 
  3.4715630667483892`*^9, 3.4715663066778717`*^9, 3.471566377155871*^9, 
  3.471579332728201*^9, 3.483746835275403*^9}],

Cell[BoxData["\<\"The function SolveDeterminingEquations is finished \
executing.\"\>"], "Print",
 CellChangeTimes->{3.469470734477844*^9, 3.471561692691785*^9, 
  3.4715630667483892`*^9, 3.4715663066778717`*^9, 3.471566377155871*^9, 
  3.471579332728201*^9, 3.4837468353098087`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(39112888\\), The time = \\!\
\\(17.253649`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 39112888, 17.253649],
  Editable->False]], "Print",
 CellChangeTimes->{3.469470734477844*^9, 3.471561692691785*^9, 
  3.4715630667483892`*^9, 3.4715663066778717`*^9, 3.471566377155871*^9, 
  3.471579332728201*^9, 3.483746835341716*^9}],

Cell[BoxData["\<\"You can look at the output in the tables xsefunctions and \
etafunctions. Each entry in these tables is an infinitesimal function in \
string format expressed in terms of z-variables and the group parameters. The \
output can also be viewed with the group parameters stripped away by looking \
at the table infinitesimalgroups. In either case you may wish to convert the \
z-variables to conventional variables using the table ztableofrules. \
\\n\\nKeep in mind that this function only finds solutions of the determining \
equations that are of polynomial form. The determining equations may admit \
solutions that involve transcendental functions and/or integrals. Note that \
arbitrary functions may appear in the infinitesimals and that these can be \
detected by running the package function SolveDeterminingEquations for \
several polynomial orders. If terms of ever increasing order appear, then an \
arbitrary function is indicated.\"\>"], "Print",
 CellChangeTimes->{3.469470734477844*^9, 3.471561692691785*^9, 
  3.4715630667483892`*^9, 3.4715663066778717`*^9, 3.471566377155871*^9, 
  3.471579332728201*^9, 3.483746835375856*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.055413999999998964`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.469470734575333*^9, 3.471561693055966*^9, 
  3.471563067115568*^9, 3.471566306719089*^9, 3.471566377170281*^9, 
  3.471579332781842*^9, 3.483746835407818*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[StyleBox["Here are the infinitesimals for the independent \
variables expressed in terms of z-variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData["xsefunctions"], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"\<\"xse1[z1_, z2_, z3_]=a10 + (a25 + b115)*z1\"\>", 
   ",", "\<\"xse2[z1_, z2_, z3_]=a20 + a25*z2\"\>"}], "}"}]], "Output",
 CellChangeTimes->{3.4694707346359587`*^9, 3.471561693201398*^9, 
  3.471563067261836*^9, 3.4715663067586737`*^9, 3.471566377199192*^9, 
  3.471579332824449*^9, 3.483746835506831*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[StyleBox["and the infinitesimals for the dependent variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData["etafunctions"], "Input"],

Cell[BoxData[
 RowBox[{"{", "\<\"eta1[z1_, z2_, z3_]=b115*z3\"\>", "}"}]], "Output",
 CellChangeTimes->{3.469470734700058*^9, 3.471561693250474*^9, 
  3.471563067312066*^9, 3.471566306814066*^9, 3.4715663772548018`*^9, 
  3.4715793328782997`*^9, 3.48374683560806*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[StyleBox["Express the xse functions in terms of input \
variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"ToExpression", "[", "xsefunctions", "]"}], "/.", 
  RowBox[{"{", 
   RowBox[{
    RowBox[{"z1", "\[Rule]", "t"}], ",", 
    RowBox[{"z2", "\[Rule]", "x"}], ",", 
    RowBox[{"z3", "\[Rule]", "f"}]}], "}"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
   RowBox[{"a10", "+", 
    RowBox[{
     RowBox[{"(", 
      RowBox[{"a25", "+", "b115"}], ")"}], " ", "t"}]}], ",", 
   RowBox[{"a20", "+", 
    RowBox[{"a25", " ", "x"}]}]}], "}"}]], "Output",
 CellChangeTimes->{3.4694707347666693`*^9, 3.4715616933188467`*^9, 
  3.47156306737728*^9, 3.471566306859495*^9, 3.4715663772990837`*^9, 
  3.471579332925062*^9, 3.483746835657284*^9}]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[StyleBox["Express the eta function in terms of these variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"ToExpression", "[", "etafunctions", "]"}], "/.", 
  RowBox[{"{", 
   RowBox[{
    RowBox[{"z1", "\[Rule]", "t"}], ",", 
    RowBox[{"z2", "\[Rule]", "x"}], ",", 
    RowBox[{"z3", "\[Rule]", "f"}]}], "}"}]}]], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"b115", " ", "f"}], "}"}]], "Output",
 CellChangeTimes->{3.469470734916864*^9, 3.471561693383994*^9, 
  3.471563067444763*^9, 3.471566306913329*^9, 3.471566377354528*^9, 
  3.4715793329789133`*^9, 3.483746835708405*^9}]
}, Open  ]],

Cell["Here is a list of the various infinitesimal groups.", "Text"],

Cell[BoxData[
 RowBox[{
  RowBox[{"infinitesimalgroupsxy", "=", 
   RowBox[{"infinitesimalgroups", "/.", 
    RowBox[{"{", 
     RowBox[{
      RowBox[{"z1", "\[Rule]", "t"}], ",", 
      RowBox[{"z2", "\[Rule]", "x"}], ",", 
      RowBox[{"z3", "\[Rule]", "f"}]}], "}"}]}]}], ";"}]], "Input"],

Cell[BoxData[
 RowBox[{"Column", "[", "infinitesimalgroupsxy", "]"}]], "Input"],

Cell[BoxData[
 TagBox[GridBox[{
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"1", ",", "0"}], "}"}], ",", 
       RowBox[{"{", "0", "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"0", ",", "1"}], "}"}], ",", 
       RowBox[{"{", "0", "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"t", ",", "x"}], "}"}], ",", 
       RowBox[{"{", "0", "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", 
        RowBox[{"t", ",", "0"}], "}"}], ",", 
       RowBox[{"{", "f", "}"}]}], "}"}]}
   },
   GridBoxAlignment->{"Columns" -> {{Left}}},
   GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}],
  "Column"]], "Output",
 CellChangeTimes->{3.469470735016274*^9, 3.471561693484839*^9, 
  3.471563067544409*^9, 3.471566307040523*^9, 3.471566377462332*^9, 
  3.471579333137128*^9, 3.483746835790965*^9}],

Cell[TextData[StyleBox["Check the solution in the determining equations.",
 FontWeight->"Plain"]], "Text",
 CellChangeTimes->{{3.471560687887658*^9, 3.471560717268311*^9}},
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Simplify", "[", 
  RowBox[{"ToExpression", "[", "zdeterminingequations", "]"}], "]"}]], "Input",\

 CellChangeTimes->{{3.471560722979608*^9, 3.4715607756901417`*^9}}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
  "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", 
   ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", 
   "True", ",", "True", ",", "True", ",", "True", ",", "True"}], 
  "}"}]], "Output",
 CellChangeTimes->{3.4715616935524883`*^9, 3.47156306759406*^9, 
  3.471566307097698*^9, 3.4715663775034533`*^9, 3.47157933317494*^9, 
  3.483746835841379*^9}]
}, Open  ]],

Cell[TextData[StyleBox["The package finds four groups\n\
(xse1,xse2,eta1)=(1,0,0)\n(xse1,xse2,eta1)=(0,1,0)\n(xse1,xse2,eta1)=(t, x, \
0)\n(xse1,xse2,eta1)=(-t, 0, f).",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[TextData[StyleBox["Now generate the commutator table.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"MakeCommutatorTable", "[", 
  RowBox[{
  "independentvariables", ",", "dependentvariables", ",", 
   "infinitesimalgroupsxy"}], "]"}]], "Input"],

Cell[BoxData["\<\"MakeCommutatorTable has finished executing. You can look at \
the output in the table commutatortable. To present the output in the most \
readable form you may want view it as a matrix using \
MatrixForm[commutatortable]. Occasionally the entries in the commutatortable \
will have terms that cancel. To get rid of these terms use the function \
Simplify before viewing the table.\"\>"], "Print",
 CellChangeTimes->{3.469470735068309*^9, 3.471561693617614*^9, 
  3.4715630676661053`*^9, 3.471566307125494*^9, 3.471566377532655*^9, 
  3.471579333229907*^9, 3.483746835891469*^9}]
}, Open  ]],

Cell[TextData[StyleBox["Put the commutator table in readable form.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"MatrixForm", "[", "commutatortable", "]"}]], "Input"],

Cell[BoxData[
 TagBox[
  RowBox[{"(", "\[NoBreak]", GridBox[{
     {
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "1"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"1", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"1", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", 
             RowBox[{"-", "1"}]}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{
             RowBox[{"-", "1"}], ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"x", ",", 
             RowBox[{"-", "t"}]}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{
             RowBox[{"-", "1"}], ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{
             RowBox[{"-", "x"}], ",", "t"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}], 
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0"}], "}"}]},
          {
           RowBox[{"{", "0", "}"}]}
         },
         GridBoxAlignment->{
          "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, 
           "Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
         GridBoxSpacings->{"Columns" -> {
             Offset[0.27999999999999997`], {
              Offset[0.5599999999999999]}, 
             Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
             Offset[0.2], {
              Offset[0.4]}, 
             Offset[0.2]}, "RowsIndexed" -> {}}],
        Column], "\[NoBreak]", ")"}]}
    },
    GridBoxAlignment->{
     "Columns" -> {{Center}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, 
      "RowsIndexed" -> {}},
    GridBoxSpacings->{"Columns" -> {
        Offset[0.27999999999999997`], {
         Offset[0.7]}, 
        Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
        Offset[0.2], {
         Offset[0.4]}, 
        Offset[0.2]}, "RowsIndexed" -> {}}], "\[NoBreak]", ")"}],
  Function[BoxForm`e$, 
   MatrixForm[BoxForm`e$]]]], "Output",
 CellChangeTimes->{3.469470735127235*^9, 3.471561693679514*^9, 
  3.471563067722857*^9, 3.471566307187826*^9, 3.471566377598926*^9, 
  3.4715793332820797`*^9, 3.4837468359300957`*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"MaxMemoryUsed", "[", " ", "]"}]], "Input"],

Cell[BoxData["40944184"], "Output",
 CellChangeTimes->{3.469470735169943*^9, 3.471561693710965*^9, 
  3.471563067766631*^9, 3.471566307226976*^9, 3.471566377632587*^9, 
  3.4715793333250847`*^9, 3.4837468359586773`*^9}]
}, Open  ]]
},
WindowToolbars->{},
CellGrouping->Manual,
WindowSize->{913, 916},
WindowMargins->{{55, Automatic}, {Automatic, 28}},
PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}},
ShowCellLabel->True,
ShowCellTags->False,
RenderingOptions->{"ObjectDithering"->True,
"RasterDithering"->False},
Magnification->1.25,
FrontEndVersion->"7.0 for Mac OS X x86 (32-bit) (February 18, 2009)",
StyleDefinitions->"Default.nb"
]
(* End of Notebook Content *)

(* Internal cache information *)
(*CellTagsOutline
CellTagsIndex->{}
*)
(*CellTagsIndex
CellTagsIndex->{}
*)
(*NotebookFileOutline
Notebook[{
Cell[545, 20, 240, 5, 97, "Text"],
Cell[788, 27, 124, 1, 32, "Text"],
Cell[915, 30, 160, 4, 33, "Input"],
Cell[1078, 36, 476, 13, 32, "Text"],
Cell[1557, 51, 101, 2, 33, "Input"],
Cell[1661, 55, 163, 3, 32, "Text"],
Cell[1827, 60, 135, 4, 53, "Input"],
Cell[1965, 66, 304, 8, 51, "Text"],
Cell[2272, 76, 175, 4, 53, "Input"],
Cell[2450, 82, 130, 2, 32, "Text"],
Cell[2583, 86, 151, 4, 33, "Input"],
Cell[2737, 92, 128, 2, 32, "Text"],
Cell[2868, 96, 116, 3, 33, "Input"],
Cell[2987, 101, 237, 4, 51, "Text"],
Cell[3227, 107, 108, 3, 33, "Input"],
Cell[3338, 112, 152, 3, 32, "Text"],
Cell[3493, 117, 67, 2, 33, "Input"],
Cell[3563, 121, 385, 6, 70, "Text"],
Cell[3951, 129, 186, 4, 33, "Input"],
Cell[4140, 135, 509, 7, 89, "Text"],
Cell[4652, 144, 71, 2, 33, "Input"],
Cell[4726, 148, 569, 8, 89, "Text"],
Cell[5298, 158, 79, 2, 33, "Input"],
Cell[5380, 162, 268, 4, 51, "Text"],
Cell[CellGroupData[{
Cell[5673, 170, 439, 8, 72, "Input"],
Cell[6115, 180, 511, 9, 45, "Print"],
Cell[6629, 191, 1094, 15, 216, "Print"],
Cell[7726, 208, 790, 13, 64, "Print"],
Cell[8519, 223, 483, 9, 45, "Print"],
Cell[9005, 234, 1098, 15, 216, "Print"],
Cell[10106, 251, 277, 5, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[10420, 261, 50, 0, 33, "Input"],
Cell[10473, 263, 271, 4, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[10781, 272, 45, 0, 33, "Input"],
Cell[10829, 274, 721, 20, 42, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[11587, 299, 39, 0, 33, "Input"],
Cell[11629, 301, 412, 10, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[12078, 316, 278, 4, 51, "Text"],
Cell[12359, 322, 47, 0, 33, "Input"],
Cell[12409, 324, 1798, 29, 414, "Output"]
}, Open  ]],
Cell[14222, 356, 57, 0, 32, "Text"],
Cell[CellGroupData[{
Cell[14304, 360, 78, 1, 33, "Input"],
Cell[14385, 363, 213, 3, 33, "Output"]
}, Open  ]],
Cell[14613, 369, 510, 11, 145, "Text"],
Cell[CellGroupData[{
Cell[15148, 384, 412, 8, 53, "Input"],
Cell[15563, 394, 950, 15, 83, "Print"],
Cell[16516, 411, 512, 7, 83, "Print"],
Cell[17031, 420, 405, 7, 25, "Print"],
Cell[17439, 429, 393, 7, 25, "Print"],
Cell[17835, 438, 416, 8, 25, "Print"],
Cell[18254, 448, 392, 5, 64, "Print"],
Cell[18649, 455, 404, 7, 25, "Print"],
Cell[19056, 464, 237, 3, 25, "Print"],
Cell[19296, 469, 283, 4, 25, "Print"],
Cell[19582, 475, 405, 7, 25, "Print"],
Cell[19990, 484, 1158, 15, 254, "Print"],
Cell[21151, 501, 276, 5, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[21464, 511, 184, 3, 32, "Text"],
Cell[21651, 516, 38, 0, 33, "Input"],
Cell[21692, 518, 348, 6, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[22077, 529, 141, 2, 32, "Text"],
Cell[22221, 533, 38, 0, 33, "Input"],
Cell[22262, 535, 267, 4, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[22566, 544, 146, 3, 32, "Text"],
Cell[CellGroupData[{
Cell[22737, 551, 253, 7, 33, "Input"],
Cell[22993, 560, 420, 11, 33, "Output"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[23462, 577, 143, 2, 32, "Text"],
Cell[23608, 581, 253, 7, 33, "Input"],
Cell[23864, 590, 258, 5, 33, "Output"]
}, Open  ]],
Cell[24137, 598, 67, 0, 32, "Text"],
Cell[24207, 600, 293, 8, 33, "Input"],
Cell[24503, 610, 79, 1, 33, "Input"],
Cell[24585, 613, 958, 32, 91, "Output"],
Cell[25546, 647, 204, 3, 32, "Text"],
Cell[CellGroupData[{
Cell[25775, 654, 190, 4, 33, "Input"],
Cell[25968, 660, 435, 9, 53, "Output"]
}, Open  ]],
Cell[26418, 672, 233, 4, 107, "Text"],
Cell[26654, 678, 124, 2, 32, "Text"],
Cell[CellGroupData[{
Cell[26803, 684, 168, 4, 33, "Input"],
Cell[26974, 690, 597, 8, 102, "Print"]
}, Open  ]],
Cell[27586, 701, 132, 2, 32, "Text"],
Cell[CellGroupData[{
Cell[27743, 707, 77, 1, 33, "Input"],
Cell[27823, 710, 12156, 331, 185, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[40016, 1046, 66, 1, 33, "Input"],
Cell[40085, 1049, 219, 3, 33, "Output"]
}, Open  ]]
}
]
*)

(* End of internal cache information *)
