(*********************************************************************** Mathematica-Compatible Notebook This notebook can be used on any computer system with Mathematica 4.0, MathReader 4.0, or any compatible application. The data for the notebook starts with the line containing stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. ***********************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 22152, 575]*) (*NotebookOutlinePosition[ 22907, 602]*) (* CellTagsIndexPosition[ 22863, 598]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Mass-Spring System:\n One Dimensional Animation Model\n", FontFamily->"Arial", FontSize->24, FontWeight->"Bold"], StyleBox["\nDavid Altherr : altherda@email.uc.edu : www.davidaltherr.net", FontFamily->"Arial", FontSize->12, FontWeight->"Bold", FontSlant->"Italic"], StyleBox["\n", FontFamily->"Arial", FontSize->12], StyleBox["Copyright \[Copyright] 2001 David Altherr ; Permission granted to \ use under Open Source MIT public license.", FontFamily->"Arial", FontSize->12, FontSlant->"Italic"] }], "Title", FontColor->RGBColor[0, 0, 0.605478], Background->GrayLevel[0.900008]], Cell[CellGroupData[{ Cell["Notebook Abstract", "Section"], Cell["\<\ The following notebook develops a system for animating a mass-spring system \ according to any specified function. This notebook is intended to be used as \ a visualization tool that is easily extendable to various studies including \ differential equations and oscillatory systems. We begin by developing the \ fundamental graphics primitives from the parametric equation of a torus. \ Extending these primitives, we define general equations for the mass and \ spring models with several variable parameters. We then define a set of \ functions that allows us to manipulate the model such that the mass will \ follow a specified displacement function over a specified time domain. We \ also present two examples of the system in use; a simple harmonic oscillator \ as well as a slightly more complex oscillator. Finally, we define another \ set of functions for exporting the generated images into GIFs in the file \ system.\ \>", "Text", Background->GrayLevel[0.900008]], Cell["\<\ Note: Only the source code is provided in this notebook, the images must be \ rendered via execution of the cells; this notebook, when fully rendered, may \ require a maximum 14 MB of hard drive space to save not including the \ optionally exported gif files.\ \>", "Text", Background->GrayLevel[0.900008]] }, Open ]], Cell[CellGroupData[{ Cell["Model Graphics Primitives", "Section"], Cell[TextData[{ "In order to model the spring, we first start with the basic parametric \ equation of a torus; the particular equation we have chosen defines a torus \ with a primary radius of 1 and a secondary radius of ", Cell[BoxData[ \(TraditionalForm\`1\/2\)]], ". " }], "Text", FontFamily->"Times New Roman", Background->GrayLevel[0.900008]], Cell[BoxData[{ \(\(Clear["\"];\)\), "\[IndentingNewLine]", \(<< Default3D`\)}], "Input"], Cell[BoxData[{ \(\(x1[t_, u_] := Cos[t] + .5 Cos[t]*Cos[u];\)\), "\[IndentingNewLine]", \(\(y1[t_, u_] := \ Sin[t] + .5 Sin[t]*Cos[u];\)\), "\[IndentingNewLine]", \(\(z1[t_, u_] := \ .5\ Sin[u];\)\), "\[IndentingNewLine]", \(\(ParametricPlot3D[{x1[t, u], y1[t, u], z1[t, u]}, {t, 0, 2 \[Pi]}, {u, 0, 2 \[Pi]}, ImageSize \[Rule] 72\ *\ 3.5];\)\)}], "Input"], Cell["\<\ If we then add a factor of t to the z component of our parametric equation, \ we can then define a simple cylindrical helix; a very good model of a \ spring's shape. We also assign the constants of our equations to represent \ the physical attributes of a spring, namely the radius of the wire from which \ it is shaped and the radius of the spring itself, measured from the center of \ one section wire to the center of the opposite section of wire.\ \>", "Text", FontFamily->"Times New Roman", Background->GrayLevel[0.900008]], Cell[BoxData[{ \(\(rwire = \ .2;\)\), "\[IndentingNewLine]", \(\(rspring = \ 2;\)\), "\[IndentingNewLine]", \(\(x2[t_, u_] := rspring\ Cos[t] + rwire\ Cos[t]*Cos[u];\)\), "\[IndentingNewLine]", \(\(y2[t_, u_] := rspring\ Sin[t] + rwire\ Sin[t]*Cos[u];\)\), "\[IndentingNewLine]", \(\(z2[t_, u_] := \ \ rwire\ Sin[u] + t;\)\), "\[IndentingNewLine]", \(\(ParametricPlot3D[{x2[t, u], y2[t, u], z2[t, u]}, {t, 0, 2 \[Pi]}, {u, 0, 2 \[Pi]}, ImageSize \[Rule] 72\ *\ 3.5];\)\)}], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["General Graphics Functions", "Section"], Cell["\<\ In addition to the pertinent radii, we must also consider two more physical \ attributes; the height of the spring, and the number of turns. We will \ assume constant values for the time being, though these parameters will be \ defined as function arguments later on.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[{ \(\(rspring\ = \ 1;\)\), "\[IndentingNewLine]", \(\(rwire\ = \ .12;\)\), "\[IndentingNewLine]", \(\(height\ = \ 12;\)\), "\[IndentingNewLine]", \(\(turns\ = 8;\)\)}], "Input"], Cell["\<\ We then define the parametric equations of the spring based on these physical \ attributes.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[{ \(Off[General::"\"]\), "\[IndentingNewLine]", \(\(x[v_, u_, rwire_, rspring_] := rspring*\ Cos[v] + rwire*Cos[v]*Cos[u];\)\), "\n", \(\(y[v_, u_, rwire_, rspring_] := \ rspring\ *\ Sin[v] + rwire\ *Sin[v]*Cos[u];\)\), "\n", \(\(z[v_, u_, rwire_, height_, turns_] := \ \ rwire\ *\ Sin[u] + v \(\(\ \)\(height\)\)\/\(turns\ 2 \[Pi]\);\)\)}], "Input"], Cell["\<\ We also define a generic torus equation which we will use to model the ends \ of the spring so that they are generally flat. We will also use a special \ case of this equation to model our \"mass\" object as a sphere; granted, we \ could use a more exact parametric equation to a sphere, but this will give us \ a more interestingly shaped solid. \ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[ \(\(ztorus[v_, u_, rwire_, height_, turns_] := \ \ rwire\ *\ Sin[u] + \ height;\)\)], "Input"], Cell["\<\ We then define the parametric surface equation of the spring as a list of \ three graphics including the cylindrical helix, and two torii as the spring \ end approximations.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[ \(\(spring[rwire_, rspring_, height_, turns_] := {ParametricPlot3D[{x[v, u, rwire\ , rspring], y[v, u, rwire, rspring], z[v, u, rwire, height, turns], {EdgeForm[]}}, {v, 0, turns\ 2 \[Pi]}, {u, 0, 2 \[Pi]}, PlotPoints \[Rule] {120, 12}, PlotRange \[Rule] {\(-1\), 17}, DisplayFunction \[Rule] Identity], ParametricPlot3D[{x[v, u, rwire\ , rspring], y[v, u, rwire, rspring], ztorus[0, u, rwire, 0, 1], {EdgeForm[]}}, {v, 2 \[Pi]*1/3, 2 \[Pi]}, {u, 0, \ 2 \[Pi]}, PlotPoints \[Rule] {12, 12}, PlotRange \[Rule] {\(-1\), 17}, DisplayFunction \[Rule] Identity], ParametricPlot3D[{x[v, u, rwire\ , rspring], y[v, u, rwire, rspring], ztorus[0, u, rwire, height, 1], {EdgeForm[]}}, {v, 0, 2 \[Pi]*2/3}, {u, 0, 2 \[Pi]}, PlotPoints \[Rule] {12, 12}, PlotRange \[Rule] {\(-1\), 17}, DisplayFunction \[Rule] Identity]};\)\)], "Input"], Cell["\<\ We now assign the physical attributes if our \"mass\" sphere. The zsphere \ attribute is simply the location of the center of the sphere above the center \ of the approximating end torus at the top of the spring; our definition below \ ensures that the sphere will sit perfectly in this torus without any \ intersection or gap.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[{ \(\(rsphere = 1.2;\)\), "\[IndentingNewLine]", \(\(zsphere := \@\(\((rwire + rsphere)\)\^2 - rspring\^2\);\)\)}], "Input"], Cell["\<\ Below we define the parametric surface equation of our \"mass\" sphere as a \ special case of a torus where the primary radius is zero and the secondary \ radius defines the radius of the resulting sphere.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[{ \(Off[General::"\"]\), "\[IndentingNewLine]", \(\(sphere[\[Rho]_, h_] := ParametricPlot3D[{x[v, u, \[Rho], 0], y[v, u, \[Rho], 0], ztorus[v, u, \[Rho], h, 1], {EdgeForm[]}}, {v, 0, 2 \[Pi]}, {u, 0, 2 \[Pi]}, PlotPoints \[Rule] {10, 10}, PlotRange \[Rule] {\(-1\), 17}, DisplayFunction \[Rule] Identity];\)\)}], "Input"], Cell["\<\ We also define a parametric space curve that will display the two dimensional \ plot of a function in three dimensional space.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[ \(\(motionplot[func_, t_] := ParametricPlot3D[{v, 0, func[v + t], {Thickness[ .02], RGBColor[ .9, 0, 0]}}, {v, \(-\[Pi]\), \[Pi]}, PlotPoints \[Rule] 40, PlotRange \[Rule] {\(-1\), 17}, DisplayFunction \[Rule] Identity];\)\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["Specific Model Plots", "Section"], Cell["\<\ We start by verifying that our parametric spring model will plot correctly in \ three dimensional space.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[ RowBox[{ RowBox[{"Show", "[", RowBox[{\({spring[rwire, rspring, height, turns]}\), ",", \(DisplayFunction \[Rule] $DisplayFunction\), StyleBox[",", "Input"], StyleBox[\(Boxed -> False\), "Input"], StyleBox[",", "Input"], StyleBox[\(Axes -> False\), "Input"], ",", \(PlotRange \[Rule] {\(-1\), 13}\), " ", ",", \(ImageSize \[Rule] 72\ *\ 1.5\)}], "]"}], ";"}]], "Input"], Cell["\<\ The command below will plot all three objects in three dimensional space; \ notice that the function appears to intersect the \"mass\" at the center of \ the sphere.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[ RowBox[{ RowBox[{"Show", "[", RowBox[{\({spring[rwire, rspring, height, turns], sphere[rsphere, height + zsphere], motionplot[9 + 3\ Cos[#1] + zsphere &, 0]}\), ",", \(DisplayFunction \[Rule] $DisplayFunction\), ",", StyleBox[\(LightSources\ -> \ {{{0, \ 0, \ 1}, \ RGBColor[ .6, \ .1, \ .1]}, \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {{1, \ 0, \ 0.4}, \ RGBColor[ .1, \ .1, \ .6]}, \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {{0, \ 1, \ 0.4}, \ RGBColor[ .1, \ .8, \ .1]}}\), "Input"], StyleBox[",", "Input"], StyleBox[\(Boxed -> False\), "Input"], StyleBox[",", "Input"], StyleBox[\(Axes -> False\), "Input"], ",", \(ImageSize \[Rule] 72\ *\ 3\)}], "]"}], ";"}]], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["General Animation Functions", "Section"], Cell["\<\ We can now define an animation function that will animate our mass-spring \ system.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[ RowBox[{ RowBox[{\(AnimateSpring[rwire_, rspring_, height_, turns_, rsphere_, functn_, tstart_, tend_, frames_]\), ":=", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"Show", "[", RowBox[{\({spring[rwire, rspring, functn[time], turns], sphere[rsphere, functn[time] + zsphere], motionplot[functn[#1 + time] + zsphere &, 0]}\), ",", \(DisplayFunction \[Rule] $DisplayFunction\), ",", StyleBox[\(LightSources\ -> \ {{{0, \ 0, \ 1}, \ RGBColor[ .6, \ .1, \ .1]}, \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {{1, \ 0, \ 0.4}, \ RGBColor[ .1, \ .1, \ .6]}, \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {{0, \ 1, \ 0.4}, \ RGBColor[ .1, \ .8, \ .1]}}\), "Input"], StyleBox[",", "Input"], StyleBox[\(Boxed -> False\), "Input"], StyleBox[",", "Input"], StyleBox[\(Axes -> False\), "Input"], ",", \(ImageSize \[Rule] 72\ *\ 3\)}], "]"}], ";"}], ",", \({time, tstart, tend - 1\/frames, \(tend - tstart\)\/frames}\)}], "]"}]}], ";"}]], "Input"], Cell["\<\ To simplify the animation function we can define a dependent function with \ all physical attributes of the spring mass system predefined, leaving only \ the function and the parameters of the animation as required arguments.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[ \(PreDefAnimSpring[functn_, tstart_, tend_, frames_] := AnimateSpring[ .14, 1.0, 12, 7, 1.3, functn, tstart, tend, frames]\)], "Input"], Cell["\<\ We also define a set of functions that will allow us to resize the actual \ range of the plotted function to a static range within the specified \ domain.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[{ \(\(getDomainApprox := \ N[Range[#[\([\)\(1\)\(]\)], #[\([\)\(2\)\(]\)], N[#[\([\)\(2\)\(]\)] - #[\([1]\)], 20]\/20] &, 20];\)\), "\n", \(\(getFuncMin := Min[#1 /@ \ getDomainApprox[#2]] &;\)\), "\n", \(\(getFuncMax := Max[#1 /@ \ getDomainApprox[#2]] &;\)\), "\n", \(\(resizeFuncAdd := \((\(-getFuncMin[#1, #2]\))\) &;\)\), "\n", \(\(resizeFuncMult := \(recMax - recMin\)\/\(getFuncMax[#1, #2] - \ getFuncMin[#1, #2]\) &;\)\), "\n", \(\(resizeFunc[functn_, domain_] := \((functn[t] + resizeFuncAdd[functn, domain])\)* resizeFuncMult[functn, domain] + recMin;\)\)}], "Input"] }, Open ]], Cell[CellGroupData[{ Cell["Specific Model Animations", "Section"], Cell["\<\ To ensure that we are working within realistic function ranges, we simply \ resize the range of the function to a static range of {6,12}\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[ \(recMin = 6; \ recMax = 12;\)], "Input"], Cell["We will also set the number of frames to animate", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[ \(\(animFrames = 15;\)\)], "Input"], Cell["\<\ Now we can use our functions to animate the movement of the system as defined \ by a simple oscillatory function: y(t) = 9 + 3 cos(t). Note: these \ animations may take a minute or two to render on most machines.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[{ \(\(myFunc1 := .01 Cos[#] &;\)\), "\[IndentingNewLine]", \(\(domain1\ = \ {0, 2 \[Pi]};\)\), "\[IndentingNewLine]", \(\(newFunc1[t_] := Evaluate[resizeFunc[myFunc1, domain1]];\)\)}], "Input"], Cell[BoxData[ \(\(PreDefAnimSpring[newFunc1, domain1[\([1]\)], domain1[\([2]\)], animFrames];\)\)], "Input"], Cell["\<\ One major advantage to this animation system is that it will work for \ virtually any function. Below we have tried a little more complicated \ function: a series of trigonometric functions. Note that the center of the \ \"mass\" always follows the height of the function as it passes over the \ center of the spring.\ \>", "Text", Background->GrayLevel[0.900008]], Cell[BoxData[{ \(\(myFunc2 := \ 9 + \[Sum]\+\(i = 1\)\%5\((\(\((1\/2)\)\^i\) 4\ Cos[\(2\^i\/2\) # - Mod[i, 2]*\[Pi]\/2])\) &;\)\ \), "\n", \(\(domain2\ = \ {0, 2 \[Pi]};\)\), "\[IndentingNewLine]", \(\(newFunc2[t_] := Evaluate[resizeFunc[myFunc2, domain2]];\)\)}], "Input"], Cell[BoxData[ \(\(PreDefAnimSpring[newFunc2, domain2[\([1]\)], domain2[\([2]\)], animFrames];\)\)], "Input"] }, Open ]], Cell[CellGroupData[{ Cell["Animation Image Export Functions", "Section"], Cell[TextData[{ "We can also define another set of similar functions that instead of \ displaying the parametric functions to the ", StyleBox["Mathematica", FontSlant->"Italic"], " front end, we will export each frame of the animation into the same \ directory of your ", StyleBox["Mathematica ", FontSlant->"Italic"], "executable. The set of frames can then be animated in a GIF animator such \ as Microsoft GIF Animator. " }], "Text", Background->GrayLevel[0.900008]], Cell[BoxData[{ RowBox[{ RowBox[{\(AnimateSpringExport[rwire_, rspring_, height_, turns_, rsphere_, functn_, tstart_, tend_, frames_, fileprefix_]\), ":=", RowBox[{"Do", "[", RowBox[{ RowBox[{\(ithfilename\ = \ ToString[fileprefix] <> ToString[Floor[time*1000] + 10000] <> "\<.gif\>"\), ";", RowBox[{"Export", "[", RowBox[{"ithfilename", ",", RowBox[{"Show", "[", RowBox[{\({spring[rwire, rspring, functn[time], turns], sphere[rsphere, functn[time] + zsphere], motionplot[functn[#1 + time] + zsphere &, 0]}\), ",", StyleBox[\(LightSources\ -> \ {{{0, \ 0, \ 1}, \ RGBColor[ .6, \ .1, \ .1]}, \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {{1, \ 0, \ 0.4}, \ RGBColor[ .1, \ .1, \ .6]}, \n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {{0, \ 1, \ 0.4}, \ RGBColor[ .1, \ .8, \ .1]}}\), "Input"], StyleBox[",", "Input"], StyleBox[\(Boxed -> False\), "Input"], StyleBox[",", "Input"], StyleBox[\(Axes -> False\), "Input"]}], StyleBox["]", "Input"]}], ",", \(ImageSize \[Rule] 72\ *\ 5\)}], "]"}]}], ",", \({time, tstart, tend - 1\/frames, \(tend - tstart\)\/frames}\)}], "]"}]}], ";"}], "\[IndentingNewLine]", \(PreDefAnimSpringExport[functn_, tstart_, tend_, frames_, fileprefix_] := AnimateSpringExport[ .14, 1.0, 12, 7, 1.3, functn, tstart, tend, frames, fileprefix]\)}], "Input"], Cell[TextData[{ "Now we animate and export the frames of the two equations we tested above. \ Note: these animations will take slightly longer to export than the \ animations above and will not be displayed to the ", StyleBox["Mathematica", FontSlant->"Italic"], " front end." }], "Text", Background->GrayLevel[0.900008]], Cell[BoxData[ \(PreDefAnimSpringExport[newFunc1, domain1[\([1]\)], domain1[\([2]\)], animFrames, "\"]\)], "Input"], Cell[BoxData[ \(PreDefAnimSpringExport[newFunc2, domain2[\([1]\)], domain2[\([2]\)], animFrames, "\"]\)], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["The Open Source MIT License", "Section"], Cell[TextData[{ StyleBox["Copyright \[Copyright] 2001 David Altherr\n", FontFamily->"Arial", FontWeight->"Bold", FontSlant->"Italic"], StyleBox["\nPermission is hereby granted, free of charge, to any person \ obtaining a copy of this software and associated documentation files (the \ \"Software\"), to deal in the Software without restriction, including without \ limitation the rights to use, copy, modify, merge, publish, distribute, \ sublicense, and/or sell copies of the Software, and to permit persons to whom \ the Software is furnished to do so, subject to the following conditions:\n\n\ The above copyright notice and this permission notice shall be included in \ all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS \ PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, \ INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A \ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR \ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, \ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR \ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE \ SOFTWARE.", FontFamily->"Arial", FontWeight->"Bold"], StyleBox["\n", FontFamily->"Arial"] }], "Text"] }, Closed]] }, Open ]] }, FrontEndVersion->"4.0 for Microsoft Windows", ScreenRectangle->{{0, 1024}, {0, 723}}, WindowSize->{1016, 696}, WindowMargins->{{0, Automatic}, {Automatic, 0}}, PrintingCopies->1, PrintingPageRange->{1, 1}, Magnification->1.25, StyleDefinitions -> "Default.nb" ] (*********************************************************************** Cached data follows. If you edit this Notebook file directly, not using Mathematica, you must remove the line containing CacheID at the top of the file. The cache data will then be recreated when you save this file from within Mathematica. ***********************************************************************) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[1739, 51, 665, 20, 226, "Title"], Cell[CellGroupData[{ Cell[2429, 75, 36, 0, 66, "Section"], Cell[2468, 77, 990, 15, 163, "Text"], Cell[3461, 94, 318, 6, 79, "Text"] }, Open ]], Cell[CellGroupData[{ Cell[3816, 105, 44, 0, 66, "Section"], Cell[3863, 107, 364, 9, 82, "Text"], Cell[4230, 118, 108, 2, 56, "Input"], Cell[4341, 122, 420, 8, 98, "Input"], Cell[4764, 132, 543, 9, 100, "Text"], Cell[5310, 143, 552, 10, 140, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[5899, 158, 45, 0, 40, "Section"], Cell[5947, 160, 327, 6, 79, "Text"], Cell[6277, 168, 214, 4, 98, "Input"], Cell[6494, 174, 150, 4, 58, "Text"], Cell[6647, 180, 421, 7, 113, "Input"], Cell[7071, 189, 407, 7, 100, "Text"], Cell[7481, 198, 123, 2, 35, "Input"], Cell[7607, 202, 232, 5, 79, "Text"], Cell[7842, 209, 1095, 19, 224, "Input"], Cell[8940, 230, 387, 7, 79, "Text"], Cell[9330, 239, 146, 2, 60, "Input"], Cell[9479, 243, 264, 5, 79, "Text"], Cell[9746, 250, 411, 7, 77, "Input"], Cell[10160, 259, 185, 4, 58, "Text"], Cell[10348, 265, 312, 6, 56, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[10697, 276, 39, 0, 40, "Section"], Cell[10739, 278, 163, 4, 58, "Text"], Cell[10905, 284, 516, 13, 56, "Input"], Cell[11424, 299, 224, 5, 58, "Text"], Cell[11651, 306, 914, 22, 140, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[12602, 333, 46, 0, 40, "Section"], Cell[12651, 335, 142, 4, 58, "Text"], Cell[12796, 341, 1406, 30, 180, "Input"], Cell[14205, 373, 284, 5, 79, "Text"], Cell[14492, 380, 169, 3, 56, "Input"], Cell[14664, 385, 213, 5, 58, "Text"], Cell[14880, 392, 666, 11, 197, "Input"] }, Open ]], Cell[CellGroupData[{ Cell[15583, 408, 44, 0, 66, "Section"], Cell[15630, 410, 195, 4, 58, "Text"], Cell[15828, 416, 59, 1, 35, "Input"], Cell[15890, 419, 99, 1, 58, "Text"], Cell[15992, 422, 53, 1, 35, "Input"], Cell[16048, 425, 272, 5, 79, "Text"], Cell[16323, 432, 224, 3, 77, "Input"], Cell[16550, 437, 121, 2, 35, "Input"], Cell[16674, 441, 378, 7, 79, "Text"], Cell[17055, 450, 340, 6, 121, "Input"], Cell[17398, 458, 121, 2, 35, "Input"] }, Open ]], Cell[CellGroupData[{ Cell[17556, 465, 51, 0, 66, "Section"], Cell[17610, 467, 490, 12, 100, "Text"], Cell[18103, 481, 1977, 41, 286, "Input"], Cell[20083, 524, 336, 8, 79, "Text"], Cell[20422, 534, 143, 2, 35, "Input"], Cell[20568, 538, 143, 2, 35, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[20748, 545, 46, 0, 40, "Section"], Cell[20797, 547, 1327, 24, 345, "Text"] }, Closed]] }, Open ]] } ] *) (*********************************************************************** End of Mathematica Notebook file. ***********************************************************************)