(* 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[     44414,       1264]
NotebookOptionsPosition[     39606,       1112]
NotebookOutlinePosition[     40362,       1138]
CellTagsIndexPosition[     40319,       1135]
WindowFrame->Normal*)

(* Beginning of Notebook Content *)
Notebook[{
Cell[TextData[StyleBox["In this example we use the package IntroToSymmetry.m \
to work out the groups for the second-order ODE \n\nYxx-a*Exp[-Yx]=0 \n\n\
considered in Homework excercise 8.4.",
 FontSize->18,
 FontVariations->{"CompatibilityType"->0}]], "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.472046813630831*^9, 
  3.472046815997294*^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. The parameter a is arbitrary.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{
  "inputequation", "=", "\n", "\"\<D[y[x],x,x]-a*Exp[-D[y[x],x]]\>\""}], 
  ";"}]], "Input"],

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

Cell[BoxData[
 RowBox[{
  RowBox[{"rulesarray", "=", "\[IndentingNewLine]", 
   RowBox[{"{", "\"\<D[y[x],x,x]->a*Exp[-D[y[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[{"{", "\"\<x\>\"", "}"}]}], ";"}]], "Input"],

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

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

Cell[TextData[StyleBox["Enter the list of function and constant names that \
must be protected when the equation is converted to (x1,y1) variables.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

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

Cell[TextData[StyleBox["Enter the maximum derivative order of the equation.",
 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"],

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 r times 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", ",", "\[IndentingNewLine]", "inputequation",
     ",", "rulesarray", ",", "internalrules"}], "]"}], "]"}]], "Input"],

Cell[BoxData[
 InterpretationBox["\<\"The function FindDetermining Equations has begun, the \
memory in use = \\!\\(25090648\\), the time used = \\!\\(1.61263`\\)\"\>",
  StringForm[
  "The function FindDetermining Equations has begun, the memory in use = ``, \
the time used = ``", 25090648, 1.61263],
  Editable->False]], "Print",
 CellChangeTimes->{3.469397296048243*^9, 3.47114552444457*^9, 
  3.4715519694806347`*^9, 3.4715765279954967`*^9, 3.4835531842130938`*^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.469397296048243*^9, 3.47114552444457*^9, 
  3.4715519694806347`*^9, 3.4715765279954967`*^9, 3.4835531842516727`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The determining equations have been expressed in \
terms of z-variables, the length of zdeterminingequations = \\!\\(7\\), the \
byte count of zdeterminingequations = \\!\\(808\\), the memory in use = \
\\!\\(25179248\\), the time used = \\!\\(1.657653`\\)\"\>",
  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 = ``", 7, 808, 25179248, 1.657653],
  Editable->False]], "Print",
 CellChangeTimes->{3.469397296048243*^9, 3.47114552444457*^9, 
  3.4715519694806347`*^9, 3.4715765279954967`*^9, 3.483553184254257*^9}],

Cell[BoxData[
 InterpretationBox["\<\"FindDeterminingEquations is done. The memory in use = \
\\!\\(25180112\\), the time used = \\!\\(1.6578890000000002`\\)\"\>",
  StringForm[
  "FindDeterminingEquations is done. The memory in use = ``, the time used = \
``", 25180112, 1.6578890000000002`],
  Editable->False]], "Print",
 CellChangeTimes->{3.469397296048243*^9, 3.47114552444457*^9, 
  3.4715519694806347`*^9, 3.4715765279954967`*^9, 3.483553184256185*^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.469397296048243*^9, 3.47114552444457*^9, 
  3.4715519694806347`*^9, 3.4715765279954967`*^9, 3.4835531842579393`*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.04608600000000007`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.4693972962255507`*^9, 3.4711455244900713`*^9, 
  3.4715519698286657`*^9, 3.47157652834201*^9, 3.483553184302374*^9}]
}, Open  ]],

Cell[CellGroupData[{

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

Cell[BoxData["\<\"D[y1[x1],x1,x1]-a*Exp[-D[y1[x1],x1]]\"\>"], "Output",
 CellChangeTimes->{3.4693972963355303`*^9, 3.4711455245602293`*^9, 
  3.471551969910976*^9, 3.471576528461214*^9, 3.483553184352745*^9}]
}, Open  ]],

Cell[CellGroupData[{

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

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0", ",", "0", ",", 
   RowBox[{"a", " ", 
    SuperscriptBox["\[ExponentialE]", 
     RowBox[{"-", 
      RowBox[{
       SuperscriptBox["y1", "\[Prime]",
        MultilineFunction->None], "[", "x1", "]"}]}]]}], ",", "1"}], 
  "}"}]], "Output",
 CellChangeTimes->{3.469397296408732*^9, 3.471145524621439*^9, 
  3.4715519700130167`*^9, 3.4715765285415497`*^9, 3.483553184406578*^9}]
}, Open  ]],

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

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
   RowBox[{"z1", "\[Rule]", "x"}], ",", 
   RowBox[{"z2", "\[Rule]", 
    RowBox[{"y", "[", "x", "]"}]}]}], "}"}]], "Output",
 CellChangeTimes->{3.4693972964919853`*^9, 3.471145524667391*^9, 
  3.471551970084272*^9, 3.471576528625041*^9, 3.483553184470893*^9}],

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[{"\<\"-(a*Derivative[0, 1][xse1][z1, z2]) == 0\"\>", 
   ",", "\<\"-Derivative[0, 2][xse1][z1, z2] == 0\"\>", 
   ",", "\<\"a*Derivative[0, 1][eta1][z1, z2] + a*Derivative[1, 0][eta1][z1, \
z2] - 2*a*Derivative[1, 0][xse1][z1, z2] == 0\"\>", 
   ",", "\<\"a*Derivative[0, 1][eta1][z1, z2] - 3*a*Derivative[0, \
1][xse1][z1, z2] - a*Derivative[1, 0][xse1][z1, z2] == 0\"\>", 
   ",", "\<\"Derivative[0, 2][eta1][z1, z2] - 2*Derivative[1, 1][xse1][z1, \
z2] == 0\"\>", ",", "\<\"Derivative[2, 0][eta1][z1, z2] == 0\"\>", 
   ",", "\<\"2*Derivative[1, 1][eta1][z1, z2] - Derivative[2, 0][xse1][z1, \
z2] == 0\"\>"}], "}"}]], "Output",
 CellChangeTimes->{3.469397296575397*^9, 3.471145524722168*^9, 
  3.4715519701503057`*^9, 3.471576528791157*^9, 3.4835531845191593`*^9}]
}, Open  ]],

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

Cell[CellGroupData[{

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

Cell[BoxData["7"], "Output",
 CellChangeTimes->{3.469397296658763*^9, 3.471145524783465*^9, 
  3.471551970234404*^9, 3.471576528883325*^9, 3.4835531845742207`*^9}]
}, Open  ]],

Cell["\<\
Lets look at the determining equations in a slightly more readable form.\
\>", "Text",
 FontWeight->"Plain",
 FontVariations->{"CompatibilityType"->0}],

Cell[BoxData[
 RowBox[{"zdeterminingequationscolumn", "=", 
  TagBox[
   FormBox[
    RowBox[{"Column", "[", 
     RowBox[{
      RowBox[{"ToExpression", "[", "zdeterminingequations", "]"}], ",", 
      RowBox[{"{", 
       RowBox[{"Left", ",", "Below"}], "}"}]}], "]"}],
    TraditionalForm],
   TraditionalForm,
   Editable->True]}]], "Input"],

Cell[BoxData[
 TagBox[GridBox[{
    {
     RowBox[{
      RowBox[{
       RowBox[{"-", "a"}], " ", 
       RowBox[{
        SuperscriptBox["xse1", 
         TagBox[
          RowBox[{"(", 
           RowBox[{"0", ",", "1"}], ")"}],
          Derivative],
         MultilineFunction->None], "[", 
        RowBox[{"z1", ",", "z2"}], "]"}]}], "\[Equal]", "0"}]},
    {
     RowBox[{
      RowBox[{"-", 
       RowBox[{
        SuperscriptBox["xse1", 
         TagBox[
          RowBox[{"(", 
           RowBox[{"0", ",", "2"}], ")"}],
          Derivative],
         MultilineFunction->None], "[", 
        RowBox[{"z1", ",", "z2"}], "]"}]}], "\[Equal]", "0"}]},
    {
     RowBox[{
      RowBox[{
       RowBox[{"a", " ", 
        RowBox[{
         SuperscriptBox["eta1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"0", ",", "1"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}], "+", 
       RowBox[{"a", " ", 
        RowBox[{
         SuperscriptBox["eta1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"1", ",", "0"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}], "-", 
       RowBox[{"2", " ", "a", " ", 
        RowBox[{
         SuperscriptBox["xse1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"1", ",", "0"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}]}], "\[Equal]", "0"}]},
    {
     RowBox[{
      RowBox[{
       RowBox[{"a", " ", 
        RowBox[{
         SuperscriptBox["eta1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"0", ",", "1"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}], "-", 
       RowBox[{"3", " ", "a", " ", 
        RowBox[{
         SuperscriptBox["xse1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"0", ",", "1"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}], "-", 
       RowBox[{"a", " ", 
        RowBox[{
         SuperscriptBox["xse1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"1", ",", "0"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}]}], "\[Equal]", "0"}]},
    {
     RowBox[{
      RowBox[{
       RowBox[{
        SuperscriptBox["eta1", 
         TagBox[
          RowBox[{"(", 
           RowBox[{"0", ",", "2"}], ")"}],
          Derivative],
         MultilineFunction->None], "[", 
        RowBox[{"z1", ",", "z2"}], "]"}], "-", 
       RowBox[{"2", " ", 
        RowBox[{
         SuperscriptBox["xse1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"1", ",", "1"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}]}], "\[Equal]", "0"}]},
    {
     RowBox[{
      RowBox[{
       SuperscriptBox["eta1", 
        TagBox[
         RowBox[{"(", 
          RowBox[{"2", ",", "0"}], ")"}],
         Derivative],
        MultilineFunction->None], "[", 
       RowBox[{"z1", ",", "z2"}], "]"}], "\[Equal]", "0"}]},
    {
     RowBox[{
      RowBox[{
       RowBox[{"2", " ", 
        RowBox[{
         SuperscriptBox["eta1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"1", ",", "1"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}], "-", 
       RowBox[{
        SuperscriptBox["xse1", 
         TagBox[
          RowBox[{"(", 
           RowBox[{"2", ",", "0"}], ")"}],
          Derivative],
         MultilineFunction->None], "[", 
        RowBox[{"z1", ",", "z2"}], "]"}]}], "\[Equal]", "0"}]}
   },
   GridBoxAlignment->{"Columns" -> {{Left}}, "Rows" -> {{Below}}},
   GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}],
  "Column"]], "Output",
 CellChangeTimes->{3.469397296743018*^9, 3.471145524838703*^9, 
  3.471551970385117*^9, 3.471576528959475*^9, 3.483553184642161*^9}],

Cell["\<\
Because of the third equation, the fifth equation is redundant. These two can \
be used to reduce the set of determining equations from seven to five if we \
wish.\
\>", "Text",
 FontWeight->"Plain",
 FontVariations->{"CompatibilityType"->0}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"zdeterminingequationscolumn", "/.", "\[IndentingNewLine]", 
  RowBox[{"{", 
   RowBox[{
    RowBox[{
     RowBox[{"D", "[", 
      RowBox[{
       RowBox[{"xse1", "[", 
        RowBox[{"z1", ",", "z2"}], "]"}], ",", "z2"}], "]"}], "\[Rule]", 
     "0"}], ",", 
    RowBox[{
     RowBox[{"D", "[", 
      RowBox[{
       RowBox[{"xse1", "[", 
        RowBox[{"z1", ",", "z2"}], "]"}], ",", "z2", ",", "z2"}], "]"}], 
     "\[Rule]", "0"}]}], "}"}]}]], "Input"],

Cell[BoxData[
 TagBox[GridBox[{
    {"True"},
    {"True"},
    {
     RowBox[{
      RowBox[{
       RowBox[{"a", " ", 
        RowBox[{
         SuperscriptBox["eta1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"0", ",", "1"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}], "+", 
       RowBox[{"a", " ", 
        RowBox[{
         SuperscriptBox["eta1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"1", ",", "0"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}], "-", 
       RowBox[{"2", " ", "a", " ", 
        RowBox[{
         SuperscriptBox["xse1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"1", ",", "0"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}]}], "\[Equal]", "0"}]},
    {
     RowBox[{
      RowBox[{
       RowBox[{"a", " ", 
        RowBox[{
         SuperscriptBox["eta1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"0", ",", "1"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}], "-", 
       RowBox[{"a", " ", 
        RowBox[{
         SuperscriptBox["xse1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"1", ",", "0"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}]}], "\[Equal]", "0"}]},
    {
     RowBox[{
      RowBox[{
       RowBox[{
        SuperscriptBox["eta1", 
         TagBox[
          RowBox[{"(", 
           RowBox[{"0", ",", "2"}], ")"}],
          Derivative],
         MultilineFunction->None], "[", 
        RowBox[{"z1", ",", "z2"}], "]"}], "-", 
       RowBox[{"2", " ", 
        RowBox[{
         SuperscriptBox["xse1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"1", ",", "1"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}]}], "\[Equal]", "0"}]},
    {
     RowBox[{
      RowBox[{
       SuperscriptBox["eta1", 
        TagBox[
         RowBox[{"(", 
          RowBox[{"2", ",", "0"}], ")"}],
         Derivative],
        MultilineFunction->None], "[", 
       RowBox[{"z1", ",", "z2"}], "]"}], "\[Equal]", "0"}]},
    {
     RowBox[{
      RowBox[{
       RowBox[{"2", " ", 
        RowBox[{
         SuperscriptBox["eta1", 
          TagBox[
           RowBox[{"(", 
            RowBox[{"1", ",", "1"}], ")"}],
           Derivative],
          MultilineFunction->None], "[", 
         RowBox[{"z1", ",", "z2"}], "]"}]}], "-", 
       RowBox[{
        SuperscriptBox["xse1", 
         TagBox[
          RowBox[{"(", 
           RowBox[{"2", ",", "0"}], ")"}],
          Derivative],
         MultilineFunction->None], "[", 
        RowBox[{"z1", ",", "z2"}], "]"}]}], "\[Equal]", "0"}]}
   },
   GridBoxAlignment->{"Columns" -> {{Left}}, "Rows" -> {{Below}}},
   GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}],
  "Column"]], "Output",
 CellChangeTimes->{3.469397296929081*^9, 3.471145524931506*^9, 
  3.471551970480896*^9, 3.471576529045908*^9, 3.483553184704193*^9}]
}, Open  ]],

Cell[TextData[{
 StyleBox["Actually there is no real need to use the simplified set and we \
will just solve the full system.",
  FontWeight->"Plain"],
 " 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\n\ntime/timeref=((number of equations)/(number of \
equationsref))^n\n\nwhere the exponent is between 2.4 and 2.7. The \
Mathematica function Timing outputs the time required for the \
SolveDeterminingEquations function to execute."
}], "Text",
 CellChangeTimes->{{3.469397244430312*^9, 3.469397249379444*^9}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Timing", "[", 
  RowBox[{"SolveDeterminingEquations", "[", "\[IndentingNewLine]", 
   RowBox[{
   "independentvariables", ",", "dependentvariables", ",", "r", ",", "xseon", 
    ",", "zdeterminingequations", ",", 
    RowBox[{"order", "=", "4"}]}], "]"}], "]"}]], "Input"],

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 = \\!\\(15\\)\"\>",
  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 = ``", 15],
  Editable->False]], "Print",
 CellChangeTimes->{3.469397297020216*^9, 3.471145525017787*^9, 
  3.471551970568817*^9, 3.471576529129401*^9, 3.4835531847586946`*^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.469397297020216*^9, 3.471145525017787*^9, 
  3.471551970568817*^9, 3.471576529129401*^9, 3.483553184760853*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(25910480\\), The time = \\!\
\\(1.686259`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 25910480, 1.686259],
  Editable->False]], "Print",
 CellChangeTimes->{3.469397297020216*^9, 3.471145525017787*^9, 
  3.471551970568817*^9, 3.471576529129401*^9, 3.4835531847619877`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of unknown polynomial coefficients = \
\\!\\(30\\)\"\>",
  StringForm["The number of unknown polynomial coefficients = ``", 30],
  Editable->False]], "Print",
 CellChangeTimes->{3.469397297020216*^9, 3.471145525017787*^9, 
  3.471551970568817*^9, 3.471576529129401*^9, 3.483553184763115*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of equations for the polynomial \
coefficients = \\!\\(54\\)\"\>",
  StringForm[
  "The number of equations for the polynomial coefficients = ``", 54],
  Editable->False]], "Print",
 CellChangeTimes->{3.469397297020216*^9, 3.471145525017787*^9, 
  3.471551970568817*^9, 3.471576529129401*^9, 3.483553184764257*^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.469397297020216*^9, 3.471145525017787*^9, 
  3.471551970568817*^9, 3.471576529129401*^9, 3.48355318476548*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(25934216\\), The time = \\!\
\\(1.688779`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 25934216, 1.688779],
  Editable->False]], "Print",
 CellChangeTimes->{3.469397297020216*^9, 3.471145525017787*^9, 
  3.471551970568817*^9, 3.471576529129401*^9, 3.4835531847665863`*^9}],

Cell[BoxData["\<\"Solve has finished.\"\>"], "Print",
 CellChangeTimes->{3.469397297020216*^9, 3.471145525017787*^9, 
  3.471551970568817*^9, 3.471576529129401*^9, 3.483553184767639*^9}],

Cell[BoxData["\<\"The function SolveDeterminingEquations is finished \
executing.\"\>"], "Print",
 CellChangeTimes->{3.469397297020216*^9, 3.471145525017787*^9, 
  3.471551970568817*^9, 3.471576529129401*^9, 3.483553184768696*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(26076632\\), The time = \\!\
\\(1.6950939999999999`\\)\"\>",
  StringForm[
  "The memory in use = ``, The time = ``", 26076632, 1.6950939999999999`],
  Editable->False]], "Print",
 CellChangeTimes->{3.469397297020216*^9, 3.471145525017787*^9, 
  3.471551970568817*^9, 3.471576529129401*^9, 3.483553184769782*^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.469397297020216*^9, 3.471145525017787*^9, 
  3.471551970568817*^9, 3.471576529129401*^9, 3.4835531847716722`*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.021097000000000143`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.4693972971294403`*^9, 3.4711455260888157`*^9, 
  3.4715519709633408`*^9, 3.4715765295270452`*^9, 3.48355318480331*^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[{"{", "\<\"xse1[z1_, z2_]=a10 + b15*z1\"\>", "}"}]], "Output",
 CellChangeTimes->{3.4693972972408323`*^9, 3.471145526231488*^9, 
  3.471551971066031*^9, 3.4715765295796556`*^9, 3.48355318498104*^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_]=b10 + b15*z1 + b15*z2\"\>", "}"}]], "Output",\

 CellChangeTimes->{3.4693972973301992`*^9, 3.471145526296867*^9, 
  3.471551971146076*^9, 3.471576529680184*^9, 3.483553185061736*^9}]
}, Open  ]],

Cell[CellGroupData[{

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

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"ToExpression", "[", "xsefunctions", "]"}], "/.", 
  "ztableofrules"}]], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"a10", "+", 
   RowBox[{"b15", " ", "x"}]}], "}"}]], "Output",
 CellChangeTimes->{3.4693972973966427`*^9, 3.471145526364696*^9, 
  3.471551971220654*^9, 3.471576529863751*^9, 3.483553185144286*^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[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"ToExpression", "[", "etafunctions", "]"}], "/.", 
  "ztableofrules"}]], "Input"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"b10", "+", 
   RowBox[{"b15", " ", "x"}], "+", 
   RowBox[{"b15", " ", 
    RowBox[{"y", "[", "x", "]"}]}]}], "}"}]], "Output",
 CellChangeTimes->{3.469397297464137*^9, 3.471145526430909*^9, 
  3.471551971322029*^9, 3.471576529931068*^9, 3.483553185228037*^9}]
}, Open  ]]
}, Open  ]],

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

Cell[CellGroupData[{

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

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
   RowBox[{"{", 
    RowBox[{
     RowBox[{"{", "1", "}"}], ",", 
     RowBox[{"{", "0", "}"}]}], "}"}], ",", 
   RowBox[{"{", 
    RowBox[{
     RowBox[{"{", "0", "}"}], ",", 
     RowBox[{"{", "1", "}"}]}], "}"}], ",", 
   RowBox[{"{", 
    RowBox[{
     RowBox[{"{", "x", "}"}], ",", 
     RowBox[{"{", 
      RowBox[{"x", "+", "y"}], "}"}]}], "}"}]}], "}"}]], "Output",
 CellChangeTimes->{3.4693972975311193`*^9, 3.471145526497767*^9, 
  3.471551971450514*^9, 3.471576529998249*^9, 3.483553185311397*^9}]
}, Open  ]],

Cell["Here is the same in a slightly more readable form.", "Text"],

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

Cell[BoxData[
 TagBox[GridBox[{
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", "1", "}"}], ",", 
       RowBox[{"{", "0", "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", "0", "}"}], ",", 
       RowBox[{"{", "1", "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", "x", "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"x", "+", "y"}], "}"}]}], "}"}]}
   },
   GridBoxAlignment->{"Columns" -> {{Left}}},
   GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}],
  "Column"]], "Output",
 CellChangeTimes->{3.469397297598126*^9, 3.471145526565175*^9, 
  3.471551971516824*^9, 3.47157653006516*^9, 3.483553185395349*^9}],

Cell[TextData[StyleBox["The package finds the two translation groups that can \
be gotten by inspection (xse,eta)=(1,0) and (xse,eta)=(0,1) as well as the \
group \n(xse,eta)=(x,x+y). Now generate the commutator table.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["Check the infinitesimals in the determining equations.", "Text",
 CellChangeTimes->{{3.471145395559845*^9, 3.471145429404257*^9}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"ToExpression", "[", "zdeterminingequations", "]"}]], "Input",
 CellChangeTimes->{{3.471145481019026*^9, 3.4711455173104143`*^9}}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
  "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", 
   ",", "True"}], "}"}]], "Output",
 CellChangeTimes->{3.471145526631111*^9, 3.4715519715840483`*^9, 
  3.471576530131364*^9, 3.483553185480611*^9}]
}, Open  ]],

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.469397297664637*^9, 3.471145526698851*^9, 
  3.471551971650631*^9, 3.4715765301985607`*^9, 3.483553185562417*^9}]
}, Open  ]],

Cell[TextData[StyleBox["Put the commutator table in matrix 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]", GridBox[{
         {"0"},
         {"0"}
        },
        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]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0"},
         {"0"}
        },
        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]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"1"},
         {"1"}
        },
        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]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0"},
         {"0"}
        },
        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]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0"},
         {"0"}
        },
        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]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0"},
         {"1"}
        },
        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]", ")"}]},
     {
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {
          RowBox[{"-", "1"}]},
         {
          RowBox[{"-", "1"}]}
        },
        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]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0"},
         {
          RowBox[{"-", "1"}]}
        },
        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]", ")"}], 
      RowBox[{"(", "\[NoBreak]", GridBox[{
         {"0"},
         {"0"}
        },
        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]", ")"}]}
    },
    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.469397297732086*^9, 3.47114552677559*^9, 
  3.471551971717882*^9, 3.471576530265978*^9, 3.483553185646174*^9}]
}, Open  ]],

Cell[TextData[StyleBox["This is a solvable Lie algebra.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[CellGroupData[{

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

Cell[BoxData["26196496"], "Output",
 CellChangeTimes->{3.469397297797221*^9, 3.471145526831251*^9, 
  3.471551971783642*^9, 3.4715765303314238`*^9, 3.48355318573111*^9}]
}, Open  ]]
},
WindowToolbars->{},
CellGrouping->Manual,
WindowSize->{1066, 1073},
WindowMargins->{{9, Automatic}, {Automatic, 29}},
PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}},
ShowCellLabel->True,
ShowCellTags->False,
RenderingOptions->{"ObjectDithering"->True,
"RasterDithering"->False},
MacintoshSystemPageSetup -> \
"01@0001804P000000_82@?okonh34`9B;@85:0?l0@00009H0UP00P0068dB`001\n\
2@00I00100000@004Q800BL?0040000000000000000004<001000`00000@0?oH\n\
ofXIX1=F8040400000400000000000l1",
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, 293, 5, 116, "Text"],
Cell[841, 27, 124, 1, 26, "Text"],
Cell[968, 30, 160, 4, 27, "Input"],
Cell[1131, 36, 474, 13, 26, "Text"],
Cell[1608, 51, 101, 2, 27, "Input"],
Cell[1712, 55, 193, 3, 26, "Text"],
Cell[1908, 60, 127, 4, 43, "Input"],
Cell[2038, 66, 229, 4, 26, "Text"],
Cell[2270, 72, 163, 4, 43, "Input"],
Cell[2436, 78, 130, 2, 26, "Text"],
Cell[2569, 82, 118, 3, 27, "Input"],
Cell[2690, 87, 128, 2, 26, "Text"],
Cell[2821, 91, 116, 3, 27, "Input"],
Cell[2940, 96, 213, 3, 26, "Text"],
Cell[3156, 101, 144, 4, 27, "Input"],
Cell[3303, 107, 141, 2, 26, "Text"],
Cell[3447, 111, 67, 2, 27, "Input"],
Cell[3517, 115, 385, 6, 41, "Text"],
Cell[3905, 123, 67, 2, 27, "Input"],
Cell[3975, 127, 509, 7, 56, "Text"],
Cell[4487, 136, 71, 2, 27, "Input"],
Cell[4561, 140, 535, 8, 56, "Text"],
Cell[5099, 150, 79, 2, 27, "Input"],
Cell[5181, 154, 268, 4, 26, "Text"],
Cell[CellGroupData[{
Cell[5474, 162, 347, 6, 58, "Input"],
Cell[5824, 170, 470, 8, 20, "Print"],
Cell[6297, 180, 1055, 14, 111, "Print"],
Cell[7355, 196, 720, 11, 36, "Print"],
Cell[8078, 209, 459, 8, 20, "Print"],
Cell[8540, 219, 1057, 14, 111, "Print"],
Cell[9600, 235, 233, 4, 27, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[9870, 244, 50, 0, 27, "Input"],
Cell[9923, 246, 208, 2, 27, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[10168, 253, 45, 0, 27, "Input"],
Cell[10216, 255, 421, 11, 38, "Output"]
}, Open  ]],
Cell[10652, 269, 39, 0, 27, "Input"],
Cell[10694, 271, 300, 7, 27, "Output"],
Cell[CellGroupData[{
Cell[11019, 282, 279, 4, 26, "Text"],
Cell[11301, 288, 47, 0, 27, "Input"],
Cell[11351, 290, 806, 13, 88, "Output"]
}, Open  ]],
Cell[12172, 306, 57, 0, 26, "Text"],
Cell[CellGroupData[{
Cell[12254, 310, 78, 1, 27, "Input"],
Cell[12335, 313, 163, 2, 27, "Output"]
}, Open  ]],
Cell[12513, 318, 161, 4, 26, "Text"],
Cell[12677, 324, 345, 11, 27, "Input"],
Cell[13025, 337, 4186, 140, 145, "Output"],
Cell[17214, 479, 252, 6, 26, "Text"],
Cell[CellGroupData[{
Cell[17491, 489, 483, 15, 43, "Input"],
Cell[17977, 506, 3296, 110, 137, "Output"]
}, Open  ]],
Cell[21288, 619, 725, 12, 101, "Text"],
Cell[CellGroupData[{
Cell[22038, 635, 296, 6, 43, "Input"],
Cell[22337, 643, 901, 14, 51, "Print"],
Cell[23241, 659, 461, 6, 51, "Print"],
Cell[23705, 667, 354, 6, 20, "Print"],
Cell[24062, 675, 340, 6, 20, "Print"],
Cell[24405, 683, 363, 7, 20, "Print"],
Cell[24771, 692, 340, 4, 36, "Print"],
Cell[25114, 698, 354, 6, 20, "Print"],
Cell[25471, 706, 186, 2, 20, "Print"],
Cell[25660, 710, 230, 3, 20, "Print"],
Cell[25893, 715, 376, 7, 20, "Print"],
Cell[26272, 724, 1109, 14, 141, "Print"],
Cell[27384, 740, 236, 4, 27, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[27657, 749, 184, 3, 26, "Text"],
Cell[27844, 754, 38, 0, 27, "Input"],
Cell[27885, 756, 220, 3, 27, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[28142, 764, 141, 2, 26, "Text"],
Cell[28286, 768, 38, 0, 27, "Input"],
Cell[28327, 770, 230, 4, 27, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[28594, 779, 144, 3, 26, "Text"],
Cell[CellGroupData[{
Cell[28763, 786, 115, 3, 27, "Input"],
Cell[28881, 791, 236, 5, 27, "Output"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[29166, 802, 143, 2, 26, "Text"],
Cell[CellGroupData[{
Cell[29334, 808, 115, 3, 27, "Input"],
Cell[29452, 813, 300, 7, 27, "Output"]
}, Open  ]]
}, Open  ]],
Cell[29779, 824, 67, 0, 26, "Text"],
Cell[CellGroupData[{
Cell[29871, 828, 226, 6, 27, "Input"],
Cell[30100, 836, 548, 17, 27, "Output"]
}, Open  ]],
Cell[30663, 856, 66, 0, 26, "Text"],
Cell[30732, 858, 79, 1, 27, "Input"],
Cell[30814, 861, 703, 23, 61, "Output"],
Cell[31520, 886, 284, 4, 41, "Text"],
Cell[31807, 892, 136, 1, 26, "Text"],
Cell[CellGroupData[{
Cell[31968, 897, 153, 2, 27, "Input"],
Cell[32124, 901, 264, 6, 27, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[32425, 912, 168, 4, 27, "Input"],
Cell[32596, 918, 550, 7, 51, "Print"]
}, Open  ]],
Cell[33161, 928, 130, 2, 26, "Text"],
Cell[CellGroupData[{
Cell[33316, 934, 77, 1, 27, "Input"],
Cell[33396, 937, 5795, 158, 123, "Output"]
}, Open  ]],
Cell[39206, 1098, 121, 2, 26, "Text"],
Cell[CellGroupData[{
Cell[39352, 1104, 66, 1, 27, "Input"],
Cell[39421, 1107, 169, 2, 27, "Output"]
}, Open  ]]
}
]
*)

(* End of internal cache information *)
