(* 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[     58617,       1546]
NotebookOptionsPosition[     53350,       1385]
NotebookOutlinePosition[     54126,       1412]
CellTagsIndexPosition[     54083,       1409]
WindowFrame->Normal*)

(* Beginning of Notebook Content *)
Notebook[{
Cell[TextData[StyleBox["Use the package IntroToSymmetry.m to work out the \
point group of of the Keplerian equations of motion of a particle moving in a \
spherical potential field.",
 FontSize->14,
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["\<\
This next command turns off spurious spelling error warnings.\
\>", "Text"],

Cell[BoxData[
 RowBox[{"Off", "[", 
  RowBox[{"General", "::", "spell"}], "]"}]], "Input"],

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["Needs[\"SymmetryAnalysis`IntroToSymmetry`\"]", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

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

Cell[BoxData[
 RowBox[{
  RowBox[{"independentvariables", "=", 
   RowBox[{"{", "\"\<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[{"{", 
    RowBox[{"\"\<x\>\"", ",", "\"\<y\>\"", ",", "\"\<z\>\""}], "}"}]}], 
  ";"}]], "Input"],

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

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

Cell[TextData[StyleBox["Enter the maximum derivative order.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 RowBox[{
  RowBox[{"porder", "=", "3"}], ";"}]], "Input"],

Cell[TextData[StyleBox["The maximum derivative order that the infinitesimals \
are assumed to depend on is specified by the input parameter rorder. 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 rorder=0.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

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

Cell[TextData[StyleBox["When searching for Lie-Backlund groups (rorder=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 equations to produce derivatives of \
order porder+rorder 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.",
 FontWeight->"Plain"]], "Text",
 ImageRegion->{{0, 1}, {0, 1}}],

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

Cell["\<\
ALL of the equations of motion must be applied to EACH invariance condition. \
Replace the second derivative wherever it appears in the invariance condition.\
\>", "Text"],

Cell["\<\
rulesarray=
{\"D[x[t],t,t]->-
a*x[t]/((x[t]^2+y[t]^2+z[t]^2)^(3/2))\",
\"D[y[t],t,t]->-
a*y[t]/((x[t]^2+y[t]^2+z[t]^2)^(3/2))\",
\"D[z[t],t,t]->-
a*z[t]/((x[t]^2+y[t]^2+z[t]^2)^(3/2))\"};\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["Enter the first input equation as a string, ie, in quotes.", "Text"],

Cell["\<\
inputequation1=
\"D[x[t],t,t]+a*x[t]/((x[t]^2+y[t]^2+z[t]^2)^(3/2))\";\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["\<\
Now work out the determining equations of the Lie point group which leaves \
inputequation1  invariant.The Mathematica function Timing outputs the time \
required for the FindDeterminingEquations function to execute.\
\>", "Text"],

Cell[CellGroupData[{

Cell["\<\
Timing[FindDeterminingEquations[
independentvariables,dependentvariables,frozennames,porder,rorder,xseon,
inputequation1,rulesarray,internalrules]]\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 InterpretationBox["\<\"The function FindDetermining Equations has begun, the \
memory in use = \\!\\(44794920\\), the time used = \\!\\(15.295012`\\)\"\>",
  StringForm[
  "The function FindDetermining Equations has begun, the memory in use = ``, \
the time used = ``", 44794920, 15.295012],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694828938321733`*^9, 3.469483203459984*^9, 
  3.471572623032167*^9, 3.483788875827155*^9, 3.483789099109147*^9, 
  3.483789364249938*^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.4694828938321733`*^9, 3.469483203459984*^9, 
  3.471572623032167*^9, 3.483788875827155*^9, 3.483789099109147*^9, 
  3.483789364598641*^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 = \\!\\(12224\\), the memory in use = \\!\
\\(33399872\\), the time used = \\!\\(15.745128000000001`\\)\"\>",
  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, 12224, 33399872, 
   15.745128000000001`],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694828938321733`*^9, 3.469483203459984*^9, 
  3.471572623032167*^9, 3.483788875827155*^9, 3.483789099109147*^9, 
  3.483789364692629*^9}],

Cell[BoxData[
 InterpretationBox["\<\"FindDeterminingEquations is done. The memory in use = \
\\!\\(33401432\\), the time used = \\!\\(15.745409`\\)\"\>",
  StringForm[
  "FindDeterminingEquations is done. The memory in use = ``, the time used = \
``", 33401432, 15.745409],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694828938321733`*^9, 3.469483203459984*^9, 
  3.471572623032167*^9, 3.483788875827155*^9, 3.483789099109147*^9, 
  3.483789364694963*^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.4694828938321733`*^9, 3.469483203459984*^9, 
  3.471572623032167*^9, 3.483788875827155*^9, 3.483789099109147*^9, 
  3.4837893646970587`*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.45126899999999814`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.469482894334415*^9, 3.469483203997748*^9, 
  3.471572623531767*^9, 3.4837888762786007`*^9, 3.483789099598628*^9, 
  3.483789364699905*^9}]
}, Open  ]],

Cell["\<\
Here are the determining equations in terms of z-variables and in the form of \
strings.\
\>", "Text"],

Cell["zdeterminingequations1=zdeterminingequations;", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["Enter the second input equation as a string, ie, in quotes.", "Text"],

Cell["\<\
inputequation2=
\"D[y[t],t,t]+a*y[t]/((x[t]^2+y[t]^2+z[t]^2)^(3/2))\";\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["\<\
Now work out the determining equations of the Lie point group which leaves \
inputequation2 invariant.\
\>", "Text"],

Cell[CellGroupData[{

Cell["\<\
Timing[FindDeterminingEquations[
independentvariables,dependentvariables,frozennames,porder,rorder,xseon,
inputequation2,rulesarray,internalrules]]\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 InterpretationBox["\<\"The function FindDetermining Equations has begun, the \
memory in use = \\!\\(33279872\\), the time used = \\!\\(15.74745`\\)\"\>",
  StringForm[
  "The function FindDetermining Equations has begun, the memory in use = ``, \
the time used = ``", 33279872, 15.74745],
  Editable->False]], "Print",
 CellChangeTimes->{3.469482894415002*^9, 3.469483204162223*^9, 
  3.4715726236170883`*^9, 3.4837888763771152`*^9, 3.483789099709511*^9, 
  3.483789364799761*^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.469482894415002*^9, 3.469483204162223*^9, 
  3.4715726236170883`*^9, 3.4837888763771152`*^9, 3.483789099709511*^9, 
  3.4837893651766043`*^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 = \\!\\(12224\\), the memory in use = \\!\
\\(33420984\\), the time used = \\!\\(16.198343`\\)\"\>",
  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, 12224, 33420984, 
   16.198343],
  Editable->False]], "Print",
 CellChangeTimes->{3.469482894415002*^9, 3.469483204162223*^9, 
  3.4715726236170883`*^9, 3.4837888763771152`*^9, 3.483789099709511*^9, 
  3.48378936528277*^9}],

Cell[BoxData[
 InterpretationBox["\<\"FindDeterminingEquations is done. The memory in use = \
\\!\\(33421848\\), the time used = \\!\\(16.198627000000002`\\)\"\>",
  StringForm[
  "FindDeterminingEquations is done. The memory in use = ``, the time used = \
``", 33421848, 16.198627000000002`],
  Editable->False]], "Print",
 CellChangeTimes->{3.469482894415002*^9, 3.469483204162223*^9, 
  3.4715726236170883`*^9, 3.4837888763771152`*^9, 3.483789099709511*^9, 
  3.4837893652850943`*^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.469482894415002*^9, 3.469483204162223*^9, 
  3.4715726236170883`*^9, 3.4837888763771152`*^9, 3.483789099709511*^9, 
  3.483789365286866*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.45208399999999926`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.469482894934854*^9, 3.469483204657138*^9, 
  3.4715726241506453`*^9, 3.483788876795843*^9, 3.483789100136183*^9, 
  3.483789365289371*^9}]
}, Open  ]],

Cell["\<\
Here are the determining equations in terms of z-variables and in the form of \
strings.\
\>", "Text"],

Cell["zdeterminingequations2=zdeterminingequations;", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["Enter the third input equation as a string, ie, in quotes.", "Text"],

Cell["\<\
inputequation3=
\"D[z[t],t,t]+a*z[t]/((x[t]^2+y[t]^2+z[t]^2)^(3/2))\";\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["\<\
Now work out the determining equations of the Lie point group which leaves \
inputequation3 invariant.\
\>", "Text"],

Cell[CellGroupData[{

Cell["\<\
Timing[FindDeterminingEquations[
independentvariables,dependentvariables,frozennames,porder,rorder,xseon,
inputequation3,rulesarray,internalrules]]\
\>", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[BoxData[
 InterpretationBox["\<\"The function FindDetermining Equations has begun, the \
memory in use = \\!\\(33300064\\), the time used = \\!\\(16.204425`\\)\"\>",
  StringForm[
  "The function FindDetermining Equations has begun, the memory in use = ``, \
the time used = ``", 33300064, 16.204425],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694828951015177`*^9, 3.469483204764618*^9, 
  3.471572624300885*^9, 3.483788876961615*^9, 3.483789100292905*^9, 
  3.483789365469598*^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.4694828951015177`*^9, 3.469483204764618*^9, 
  3.471572624300885*^9, 3.483788876961615*^9, 3.483789100292905*^9, 
  3.483789365848707*^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 = \\!\\(12224\\), the memory in use = \\!\
\\(33439608\\), the time used = \\!\\(16.656336`\\)\"\>",
  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, 12224, 33439608, 
   16.656336],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694828951015177`*^9, 3.469483204764618*^9, 
  3.471572624300885*^9, 3.483788876961615*^9, 3.483789100292905*^9, 
  3.4837893659581337`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"FindDeterminingEquations is done. The memory in use = \
\\!\\(33440472\\), the time used = \\!\\(16.656628`\\)\"\>",
  StringForm[
  "FindDeterminingEquations is done. The memory in use = ``, the time used = \
``", 33440472, 16.656628],
  Editable->False]], "Print",
 CellChangeTimes->{3.4694828951015177`*^9, 3.469483204764618*^9, 
  3.471572624300885*^9, 3.483788876961615*^9, 3.483789100292905*^9, 
  3.483789365975429*^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.4694828951015177`*^9, 3.469483204764618*^9, 
  3.471572624300885*^9, 3.483788876961615*^9, 3.483789100292905*^9, 
  3.483789366008873*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"0.4531819999999982`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.469482895611867*^9, 3.469483205260902*^9, 
  3.471572624795642*^9, 3.4837888773841047`*^9, 3.483789100793165*^9, 
  3.48378936604175*^9}]
}, Open  ]],

Cell["\<\
Here are the determining equations in terms of z-variables and in the form of \
strings.\
\>", "Text"],

Cell["zdeterminingequations3=zdeterminingequations;", "Input",
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["\<\
zdeterminingequations4=Join[
zdeterminingequations1,
zdeterminingequations2,
zdeterminingequations3];\
\>", "Input",
 CellChangeTimes->{{3.4837889429833717`*^9, 3.483788956542596*^9}},
 ImageRegion->{{0, 1}, {0, 1}}],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Length", "[", "zdeterminingequations4", "]"}]], "Input"],

Cell[BoxData["48"], "Output",
 CellChangeTimes->{3.469482895718824*^9, 3.46948320543128*^9, 
  3.4715726248679047`*^9, 3.483788877479292*^9, 3.48378910087646*^9, 
  3.483789366185191*^9}]
}, Open  ]],

Cell[CellGroupData[{

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

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
   RowBox[{"z1", "\[Rule]", "t"}], ",", 
   RowBox[{"z2", "\[Rule]", 
    RowBox[{"x", "[", "t", "]"}]}], ",", 
   RowBox[{"z3", "\[Rule]", 
    RowBox[{"y", "[", "t", "]"}]}], ",", 
   RowBox[{"z4", "\[Rule]", 
    RowBox[{"z", "[", "t", "]"}]}]}], "}"}]], "Output",
 CellChangeTimes->{3.469482895786707*^9, 3.469483205488572*^9, 
  3.471572624909727*^9, 3.483788877538604*^9, 3.483789100915079*^9, 
  3.483789366223681*^9}]
}, Open  ]],

Cell["\<\
Here are the determining equations in a slightly more readable form as \
expressions rather than strings.\
\>", "Text"],

Cell["\<\
zdeteqns=ToExpression[zdeterminingequations4]/.{Sqrt[z2^2+z3^2+z4^2]->rr};\
\>", "Input",
 CellChangeTimes->{
  3.469482874597474*^9, 3.4694831200216627`*^9, {3.483788969347413*^9, 
   3.483788985364101*^9}},
 ImageRegion->{{0, 1}, {0, 1}}],

Cell["\<\
Here is the correspondence between z-variables and conventional variables.\
\>", "Text"],

Cell[CellGroupData[{

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

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
   RowBox[{"z1", "\[Rule]", "t"}], ",", 
   RowBox[{"z2", "\[Rule]", 
    RowBox[{"x", "[", "t", "]"}]}], ",", 
   RowBox[{"z3", "\[Rule]", 
    RowBox[{"y", "[", "t", "]"}]}], ",", 
   RowBox[{"z4", "\[Rule]", 
    RowBox[{"z", "[", "t", "]"}]}]}], "}"}]], "Output",
 CellChangeTimes->{3.469483206121735*^9, 3.4715726255407743`*^9, 
  3.4837888781838408`*^9, 3.4837891009931726`*^9, 3.483789366302411*^9}]
}, Open  ]],

Cell["\<\
Now solve the determining equations in terms of multivariable polynomials. \
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["\<\
Timing[SolveDeterminingEquations[
independentvariables,dependentvariables,rorder,xseon,zdeterminingequations4,\
order=3]]\
\>", "Input",
 CellChangeTimes->{{3.48378905443211*^9, 3.483789056606119*^9}},
 ImageRegion->{{0, 1}, {0, 1}}],

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.469483210273851*^9, 3.471572625651194*^9, 
  3.483788878285981*^9, 3.4837891010382843`*^9, 3.4837893664292192`*^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.469483210273851*^9, 3.471572625651194*^9, 
  3.483788878285981*^9, 3.4837891010382843`*^9, 3.483789367050766*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(35191744\\), The time = \\!\
\\(17.292878`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 35191744, 17.292878],
  Editable->False]], "Print",
 CellChangeTimes->{3.469483210273851*^9, 3.471572625651194*^9, 
  3.483788878285981*^9, 3.4837891010382843`*^9, 3.48378936705194*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of unknown polynomial coefficients = \
\\!\\(140\\)\"\>",
  StringForm["The number of unknown polynomial coefficients = ``", 140],
  Editable->False]], "Print",
 CellChangeTimes->{3.469483210273851*^9, 3.471572625651194*^9, 
  3.483788878285981*^9, 3.4837891010382843`*^9, 3.48378936735096*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The number of equations for the polynomial \
coefficients = \\!\\(669\\)\"\>",
  StringForm[
  "The number of equations for the polynomial coefficients = ``", 669],
  Editable->False]], "Print",
 CellChangeTimes->{3.469483210273851*^9, 3.471572625651194*^9, 
  3.483788878285981*^9, 3.4837891010382843`*^9, 3.4837893673518667`*^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.469483210273851*^9, 3.471572625651194*^9, 
  3.483788878285981*^9, 3.4837891010382843`*^9, 3.4837893673527403`*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(34945096\\), The time = \\!\
\\(17.572688`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 34945096, 17.572688],
  Editable->False]], "Print",
 CellChangeTimes->{3.469483210273851*^9, 3.471572625651194*^9, 
  3.483788878285981*^9, 3.4837891010382843`*^9, 3.483789367354035*^9}],

Cell[BoxData["\<\"Solve has finished.\"\>"], "Print",
 CellChangeTimes->{3.469483210273851*^9, 3.471572625651194*^9, 
  3.483788878285981*^9, 3.4837891010382843`*^9, 3.483789368072747*^9}],

Cell[BoxData["\<\"The function SolveDeterminingEquations is finished \
executing.\"\>"], "Print",
 CellChangeTimes->{3.469483210273851*^9, 3.471572625651194*^9, 
  3.483788878285981*^9, 3.4837891010382843`*^9, 3.483789368110959*^9}],

Cell[BoxData[
 InterpretationBox["\<\"The memory in use = \\!\\(35124496\\), The time = \\!\
\\(18.198081`\\)\"\>",
  StringForm["The memory in use = ``, The time = ``", 35124496, 18.198081],
  Editable->False]], "Print",
 CellChangeTimes->{3.469483210273851*^9, 3.471572625651194*^9, 
  3.483788878285981*^9, 3.4837891010382843`*^9, 3.483789368111891*^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.469483210273851*^9, 3.471572625651194*^9, 
  3.483788878285981*^9, 3.4837891010382843`*^9, 3.483789368112705*^9}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"1.5162679999999966`", ",", "Null"}], "}"}]], "Output",
 CellChangeTimes->{3.469483212949209*^9, 3.471572632041285*^9, 
  3.483788883888072*^9, 3.483789102673594*^9, 3.483789368114654*^9}]
}, Open  ]],

Cell["\<\
Here are the infinitesimal transformation functions for the independent \
variables.\
\>", "Text"],

Cell[CellGroupData[{

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

Cell[BoxData[
 RowBox[{"{", "\<\"xse1[z1_, z2_, z3_, z4_]=a10 + a11*z1\"\>", 
  "}"}]], "Output",
 CellChangeTimes->{3.469483213058634*^9, 3.4715726321843843`*^9, 
  3.483788883976739*^9, 3.4837891027978*^9, 3.483789368256997*^9}]
}, Open  ]],

Cell["and for the dependent variables.", "Text"],

Cell[CellGroupData[{

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

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"\<\"eta1[z1_, z2_, z3_, z4_]=(2*a11*z2)/3 - b24*z3 - b34*z4\"\>", 
   ",", "\<\"eta2[z1_, z2_, z3_, z4_]=b24*z2 + (2*a11*z3)/3 - b310*z4\"\>", 
   ",", "\<\"eta3[z1_, z2_, z3_, z4_]=b34*z2 + b310*z3 + (2*a11*z4)/3\"\>"}], 
  "}"}]], "Output",
 CellChangeTimes->{3.4694832131155043`*^9, 3.471572632251397*^9, 
  3.483788884035193*^9, 3.483789102840816*^9, 3.4837893683160467`*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Length", "[", "solveequations", "]"}]], "Input"],

Cell[BoxData["669"], "Output",
 CellChangeTimes->{3.469483213165312*^9, 3.471572632317267*^9, 
  3.483788884069034*^9, 3.483789102873312*^9, 3.4837893683611593`*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Length", "[", "allunknowns", "]"}]], "Input"],

Cell[BoxData["140"], "Output",
 CellChangeTimes->{3.469483213265463*^9, 3.471572632384688*^9, 
  3.483788884115981*^9, 3.4837891029185143`*^9, 3.483789368395479*^9}]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"infinitesimalgroups1", "=", 
   RowBox[{"infinitesimalgroups", "/.", 
    RowBox[{"{", 
     RowBox[{
      RowBox[{"z1", "\[Rule]", "t"}], ",", 
      RowBox[{"z2", "\[Rule]", "x"}], ",", 
      RowBox[{"z3", "\[Rule]", "y"}], ",", 
      RowBox[{"z4", "\[Rule]", "z"}]}], "}"}]}]}], ";"}]], "Input"],

Cell["\<\
Check the groups.xse's are on the left,eta's are on the right.\
\>", "Text",
 FontWeight->"Plain",
 FontVariations->{"CompatibilityType"->0}],

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

Cell[BoxData[
 TagBox[GridBox[{
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", "1", "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"0", ",", "0", ",", "0"}], "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", "t", "}"}], ",", 
       RowBox[{"{", 
        RowBox[{
         FractionBox[
          RowBox[{"2", " ", "x"}], "3"], ",", 
         FractionBox[
          RowBox[{"2", " ", "y"}], "3"], ",", 
         FractionBox[
          RowBox[{"2", " ", "z"}], "3"]}], "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", "0", "}"}], ",", 
       RowBox[{"{", 
        RowBox[{
         RowBox[{"-", "y"}], ",", "x", ",", "0"}], "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", "0", "}"}], ",", 
       RowBox[{"{", 
        RowBox[{
         RowBox[{"-", "z"}], ",", "0", ",", "x"}], "}"}]}], "}"}]},
    {
     RowBox[{"{", 
      RowBox[{
       RowBox[{"{", "0", "}"}], ",", 
       RowBox[{"{", 
        RowBox[{"0", ",", 
         RowBox[{"-", "z"}], ",", "y"}], "}"}]}], "}"}]}
   },
   GridBoxAlignment->{"Columns" -> {{Left}}},
   GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}],
  "Column"]], "Output",
 CellChangeTimes->{3.469483213431767*^9, 3.471572632485319*^9, 
  3.483788884194269*^9, 3.4837891030390177`*^9, 3.483789368473987*^9}]
}, Open  ]],

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

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Simplify", "[", 
  RowBox[{"ToExpression", "[", "zdeterminingequations4", "]"}], 
  "]"}]], "Input",
 CellChangeTimes->{{3.471145481019026*^9, 3.4711455173104143`*^9}, 
   3.471146122753789*^9, {3.47154140257237*^9, 3.471541418863482*^9}, {
   3.4715667761993*^9, 3.4715667786858253`*^9}, 3.471567789726531*^9, 
   3.471568099275279*^9, 3.4715715735656223`*^9, 3.471572095183077*^9, {
   3.4715726099623337`*^9, 3.471572610792289*^9}, {3.483789357507732*^9, 
   3.4837893591769133`*^9}}],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
  "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", 
   ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", 
   "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", 
   ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", 
   "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", 
   ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", 
   "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", 
   ",", "True", ",", "True", ",", "True", ",", "True", ",", "True", ",", 
   "True", ",", "True", ",", "True", ",", "True"}], "}"}]], "Output",
 CellChangeTimes->{3.471572632601561*^9, 3.4837888842725897`*^9, 
  3.483789103120781*^9, 3.483789368533156*^9}]
}, Open  ]],

Cell["\<\
This is the well known 5 parameter group of translation in time, 3-D rotation \
in space and space-time dilation. Let's produce the commutator table.\
\>", "Text"],

Cell[BoxData[
 RowBox[{"MakeCommutatorTable", "[", "\[IndentingNewLine]", 
  RowBox[{
  "independentvariables", ",", "dependentvariables", ",", 
   "infinitesimalgroups1"}], "]"}]], "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.469483213482938*^9, 3.47157263265586*^9, 
  3.483788884302965*^9, 3.483789103174445*^9, 3.483789368582715*^9}],

Cell[CellGroupData[{

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

Cell[BoxData[
 TagBox[
  RowBox[{"(", "\[NoBreak]", GridBox[{
     {
      RowBox[{"(", "\[NoBreak]", 
       TagBox[GridBox[{
          {
           RowBox[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "1", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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"}], "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "z", ",", 
             RowBox[{"-", "y"}]}], "}"}]}
         },
         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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{
             RowBox[{"-", "z"}], ",", "0", ",", "x"}], "}"}]}
         },
         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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", 
             RowBox[{"-", "z"}], ",", "y"}], "}"}]}
         },
         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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"y", ",", 
             RowBox[{"-", "x"}], ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"z", ",", "0", ",", 
             RowBox[{"-", "x"}]}], "}"}]}
         },
         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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{
             RowBox[{"-", "y"}], ",", "x", ",", "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[{"{", "0", "}"}]},
          {
           RowBox[{"{", 
            RowBox[{"0", ",", "0", ",", "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.469483213538397*^9, 3.471572632725752*^9, 
  3.4837888843587646`*^9, 3.483789103231306*^9, 3.483789368632285*^9}]
}, Open  ]],

Cell[CellGroupData[{

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

Cell[BoxData["70503496"], "Output",
 CellChangeTimes->{3.469483213582614*^9, 3.47157263279011*^9, 
  3.483788884397916*^9, 3.4837891032693872`*^9, 3.483789368679103*^9}]
}, Open  ]]
},
WindowToolbars->{},
CellGrouping->Manual,
WindowSize->{944, 989},
WindowMargins->{{63, Automatic}, {Automatic, 32}},
PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}},
ShowCellLabel->True,
ShowCellTags->False,
RenderingOptions->{"ObjectDithering"->True,
"RasterDithering"->False},
MacintoshSystemPageSetup -> \
"0080001804P000000_82@?okonh34`9B;@<5:0?l00;m009H0UP0000068dB`0B`\n\
02d5X5k/02H80@4101P00BL?00400@00000000000000P0010000020D00000000\n\
0000000000000000000004T400002004",
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, 263, 5, 55, "Text"],
Cell[811, 27, 85, 2, 32, "Text"],
Cell[899, 31, 90, 2, 33, "Input"],
Cell[992, 35, 124, 1, 32, "Text"],
Cell[1119, 38, 160, 4, 33, "Input"],
Cell[1282, 44, 476, 13, 32, "Text"],
Cell[1761, 59, 93, 1, 33, "Input"],
Cell[1857, 62, 130, 2, 32, "Text"],
Cell[1990, 66, 118, 3, 33, "Input"],
Cell[2111, 71, 128, 2, 32, "Text"],
Cell[2242, 75, 170, 5, 33, "Input"],
Cell[2415, 82, 229, 4, 32, "Text"],
Cell[2647, 88, 109, 3, 33, "Input"],
Cell[2759, 93, 125, 2, 32, "Text"],
Cell[2887, 97, 72, 2, 33, "Input"],
Cell[2962, 101, 395, 6, 70, "Text"],
Cell[3360, 109, 72, 2, 33, "Input"],
Cell[3435, 113, 514, 7, 89, "Text"],
Cell[3952, 122, 71, 2, 33, "Input"],
Cell[4026, 126, 535, 8, 89, "Text"],
Cell[4564, 136, 79, 2, 33, "Input"],
Cell[4646, 140, 181, 3, 51, "Text"],
Cell[4830, 145, 244, 9, 131, "Input"],
Cell[5077, 156, 74, 0, 32, "Text"],
Cell[5154, 158, 127, 4, 50, "Input"],
Cell[5284, 164, 240, 4, 51, "Text"],
Cell[CellGroupData[{
Cell[5549, 172, 204, 5, 66, "Input"],
Cell[5756, 179, 496, 9, 45, "Print"],
Cell[6255, 190, 1077, 15, 216, "Print"],
Cell[7335, 207, 775, 13, 64, "Print"],
Cell[8113, 222, 464, 9, 25, "Print"],
Cell[8580, 233, 1081, 15, 216, "Print"],
Cell[9664, 250, 255, 5, 33, "Output"]
}, Open  ]],
Cell[9934, 258, 112, 3, 32, "Text"],
Cell[10049, 263, 94, 1, 33, "Input"],
Cell[10146, 266, 75, 0, 32, "Text"],
Cell[10224, 268, 127, 4, 50, "Input"],
Cell[10354, 274, 126, 3, 32, "Text"],
Cell[CellGroupData[{
Cell[10505, 281, 204, 5, 66, "Input"],
Cell[10712, 288, 496, 9, 45, "Print"],
Cell[11211, 299, 1081, 15, 216, "Print"],
Cell[12295, 316, 757, 13, 64, "Print"],
Cell[13055, 331, 487, 9, 45, "Print"],
Cell[13545, 342, 1081, 15, 216, "Print"],
Cell[14629, 359, 255, 5, 33, "Output"]
}, Open  ]],
Cell[14899, 367, 112, 3, 32, "Text"],
Cell[15014, 372, 94, 1, 33, "Input"],
Cell[15111, 375, 74, 0, 32, "Text"],
Cell[15188, 377, 127, 4, 50, "Input"],
Cell[15318, 383, 126, 3, 32, "Text"],
Cell[CellGroupData[{
Cell[15469, 390, 204, 5, 66, "Input"],
Cell[15676, 397, 496, 9, 45, "Print"],
Cell[16175, 408, 1077, 15, 216, "Print"],
Cell[17255, 425, 758, 13, 64, "Print"],
Cell[18016, 440, 464, 9, 25, "Print"],
Cell[18483, 451, 1079, 15, 216, "Print"],
Cell[19565, 468, 253, 5, 33, "Output"]
}, Open  ]],
Cell[19833, 476, 112, 3, 32, "Text"],
Cell[19948, 481, 94, 1, 33, "Input"],
Cell[20045, 484, 226, 7, 82, "Input"],
Cell[CellGroupData[{
Cell[20296, 495, 80, 1, 33, "Input"],
Cell[20379, 498, 187, 3, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[20603, 506, 62, 1, 33, "Input"],
Cell[20668, 509, 465, 12, 33, "Output"]
}, Open  ]],
Cell[21148, 524, 129, 3, 32, "Text"],
Cell[21280, 529, 250, 6, 33, "Input"],
Cell[21533, 537, 98, 2, 32, "Text"],
Cell[CellGroupData[{
Cell[21656, 543, 62, 1, 33, "Input"],
Cell[21721, 546, 446, 11, 33, "Output"]
}, Open  ]],
Cell[22182, 560, 489, 11, 145, "Text"],
Cell[CellGroupData[{
Cell[22696, 575, 243, 6, 50, "Input"],
Cell[22942, 583, 903, 14, 83, "Print"],
Cell[23848, 599, 463, 6, 83, "Print"],
Cell[24314, 607, 355, 6, 25, "Print"],
Cell[24672, 615, 343, 6, 25, "Print"],
Cell[25018, 623, 369, 7, 25, "Print"],
Cell[25390, 632, 345, 4, 45, "Print"],
Cell[25738, 638, 356, 6, 25, "Print"],
Cell[26097, 646, 188, 2, 25, "Print"],
Cell[26288, 650, 232, 3, 25, "Print"],
Cell[26523, 655, 356, 6, 25, "Print"],
Cell[26882, 663, 1109, 14, 235, "Print"],
Cell[27994, 679, 227, 4, 33, "Output"]
}, Open  ]],
Cell[28236, 686, 108, 3, 32, "Text"],
Cell[CellGroupData[{
Cell[28369, 693, 61, 1, 33, "Input"],
Cell[28433, 696, 230, 4, 33, "Output"]
}, Open  ]],
Cell[28678, 703, 48, 0, 32, "Text"],
Cell[CellGroupData[{
Cell[28751, 707, 61, 1, 33, "Input"],
Cell[28815, 710, 419, 7, 72, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[29271, 722, 72, 1, 33, "Input"],
Cell[29346, 725, 165, 2, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[29548, 732, 69, 1, 33, "Input"],
Cell[29620, 735, 165, 2, 33, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[29822, 742, 336, 9, 33, "Input"],
Cell[30161, 753, 151, 4, 32, "Text"],
Cell[30315, 759, 78, 1, 33, "Input"],
Cell[30396, 762, 1364, 46, 123, "Output"]
}, Open  ]],
Cell[31775, 811, 136, 1, 32, "Text"],
Cell[CellGroupData[{
Cell[31936, 816, 511, 9, 33, "Input"],
Cell[32450, 827, 825, 13, 72, "Output"]
}, Open  ]],
Cell[33290, 843, 173, 3, 51, "Text"],
Cell[33466, 848, 190, 4, 53, "Input"],
Cell[33659, 854, 547, 7, 102, "Print"],
Cell[CellGroupData[{
Cell[34231, 865, 77, 1, 33, "Input"],
Cell[34311, 868, 18748, 504, 223, "Output"]
}, Open  ]],
Cell[CellGroupData[{
Cell[53096, 1377, 66, 1, 33, "Input"],
Cell[53165, 1380, 169, 2, 33, "Output"]
}, Open  ]]
}
]
*)

(* End of internal cache information *)
