(* 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[ 58521, 1655] NotebookOptionsPosition[ 48207, 1395] NotebookOutlinePosition[ 53060, 1506] CellTagsIndexPosition[ 52077, 1484] WindowTitle->Lecture 22 MIT 3.016 (Fall 2010) \251 W. Craig Carter \ 2003--2010 WindowFrame->Normal*) (* Beginning of Notebook Content *) Notebook[{ Cell["\<\ Differential Operators Harmonic Oscillators Variational Calculus\ \>", "Title", CellChangeTimes->{{3.4046583060406637`*^9, 3.40465832014436*^9}}], Cell[CellGroupData[{ Cell["Operator Calculus: Linear Operator Rules", "Subtitle", CellChangeTimes->{{3.404659065522732*^9, 3.404659096936606*^9}}], Cell[TextData[{ "Does ", StyleBox["Mathematica", FontSlant->"Italic"], " apply the Fourier Transform/Derivative Rule Automagically?" }], "Text", CellTags->"mmtag:22:implementing_rules_for_linear_operators"], Cell[BoxData[ RowBox[{"FourierTransform", "[", RowBox[{ RowBox[{"D", "[", RowBox[{ RowBox[{"f", "[", "x", "]"}], ",", RowBox[{"{", RowBox[{"x", ",", "1"}], "}"}]}], "]"}], ",", "x", ",", "k"}], "]"}]], "Input", CellTags->"mmtag:22:FourierTransform[]__of_derivatives"], Cell["It does as of version 5.0! .", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"Table", "[", RowBox[{ RowBox[{"FourierTransform", "[", RowBox[{ RowBox[{"D", "[", RowBox[{ RowBox[{"f", "[", "x", "]"}], ",", RowBox[{"{", RowBox[{"x", ",", "i"}], "}"}]}], "]"}], ",", "x", ",", "k"}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "24"}], "}"}]}], "]"}], "//", "MatrixForm"}]], "Input"], Cell[TextData[{ "Does ", StyleBox["Mathematica", FontSlant->"Italic"], " apply the rules according to the Fourier Transform being a linear operator?" }], "Text", CellTags->{ "mmtag:22:FourierTransform[]__implementing_rules_as_linear_operator", "mmtag:22:implementing_rules_for_linear_operators__FourierTransform[]"}], Cell[BoxData[ RowBox[{"FourierTransform", "[", RowBox[{ RowBox[{ RowBox[{"a", " ", RowBox[{"f", "[", "x", "]"}]}], " ", "+", " ", RowBox[{"b", " ", RowBox[{"g", "[", "x", "]"}]}]}], ",", "x", ",", "k"}], "]"}]], "Input"], Cell["\<\ Apparently not--so we make some rules that can be applied. It may be \ instructive to see how to do this.\ \>", "Text"], Cell["\<\ Two rules are defined so as to factor out non-dependent variables and apply \ the distribution rules for linear operators\ \>", "Section", CellChangeTimes->{{3.404658659616494*^9, 3.40465872571216*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"ConstantRule", " ", "=", " ", RowBox[{ RowBox[{"FourierTransform", "[", RowBox[{ RowBox[{ RowBox[{"(", "NoX_.", " ", ")"}], " ", "*", RowBox[{"(", " ", "fun_", " ", ")"}]}], ",", " ", "x_", " ", ",", " ", "k_"}], "]"}], " ", ":>", " ", RowBox[{ RowBox[{"NoX", " ", RowBox[{"FourierTransform", "[", RowBox[{"fun", ",", "x", ",", "k"}], "]"}]}], "/;", RowBox[{"(", RowBox[{ RowBox[{"FreeQ", "[", RowBox[{"NoX", ",", "x"}], "]"}], " ", "&&", " ", RowBox[{"MemberQ", "[", RowBox[{"fun", ",", "x", ",", "Infinity"}], "]"}]}], ")"}]}]}]}], "\[IndentingNewLine]"}], "\[IndentingNewLine]", RowBox[{"DistributeRule", "=", " ", "\[IndentingNewLine]", RowBox[{ RowBox[{"FourierTransform", "[", RowBox[{ RowBox[{"Plus", "[", "expr_", "]"}], ",", "x_", ",", " ", "k_"}], "]"}], " ", ":>", RowBox[{"Distribute", "[", RowBox[{ RowBox[{"FourierTransform", "[", RowBox[{"expr", ",", "x", ",", "k"}], "]"}], ",", "Plus"}], "]"}]}]}]}], "Input"], Cell["Try them out:", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"FourierTransform", "[", RowBox[{ RowBox[{"a", " ", RowBox[{"g", "[", "x", "]"}], " ", RowBox[{"f", "[", "x", "]"}]}], " ", ",", "x", ",", " ", "k"}], "]"}], "//.", "ConstantRule"}]], "Input"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"FourierTransform", "[", RowBox[{ RowBox[{ RowBox[{"a", " ", "x", " ", RowBox[{"f", "[", "x", "]"}]}], " ", "+", " ", RowBox[{"b", " ", RowBox[{"v", "[", "x", "]"}], " ", RowBox[{"g", "[", "x", "]"}]}], " ", "+", " ", RowBox[{"d", " ", RowBox[{"p", "[", "x", "]"}]}]}], ",", "x", ",", "k"}], "]"}], "//.", "DistributeRule"}], "//.", "ConstantRule"}]], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ Fourier Transforming the Damped and Forced Harmonic Oscillator\ \>", "Subtitle", CellChangeTimes->{{3.404663061035943*^9, 3.404663102704649*^9}}], Cell["\<\ Here is the second-order ODE for a damped harmonic oscillator\ \>", "Text", CellChangeTimes->{{3.404659412754525*^9, 3.4046594294080687`*^9}}, CellTags->{ "mmtag:22:FourierTransform[]__to_solve_damped_forced_harmonic_oscillator", "mmtag:22:damped_forced_harmonic_operator__solution_using_FourierTransform[\ ]"}], Cell[BoxData[ RowBox[{"ODE2nd", " ", "=", " ", RowBox[{ RowBox[{"Mass", " ", RowBox[{"D", "[", RowBox[{ RowBox[{"y", "[", "t", "]"}], ",", RowBox[{"{", RowBox[{"t", ",", "2"}], "}"}]}], "]"}]}], " ", "+", " ", RowBox[{"Viscosity", " ", RowBox[{"D", "[", RowBox[{ RowBox[{"y", "[", "t", "]"}], ",", "t"}], "]"}]}], " ", "+", " ", RowBox[{"SpringK", " ", RowBox[{"y", " ", "[", "t", "]"}]}]}]}]], "Input"], Cell["\<\ Let's Fourier Transform the left-hand side of a second-order ODE:\ \>", "Text", CellChangeTimes->{{3.404659437153269*^9, 3.404659437576456*^9}}, CellTags->{ "mmtag:22:FourierTransform[]__to_solve_damped_forced_harmonic_oscillator", "mmtag:22:damped_forced_harmonic_operator__solution_using_FourierTransform[\ ]"}], Cell[BoxData[ RowBox[{"FrrODE2nd", " ", "=", RowBox[{"Factor", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"FourierTransform", "[", RowBox[{"ODE2nd", ",", "t", ",", "\[Omega]"}], "]"}], "//.", "DistributeRule"}], "//.", "ConstantRule"}], "\[IndentingNewLine]", "]"}]}]], "Input"], Cell["\<\ And now Fourier Transform the right-hand side for a prototype \"forced\" \ oscillator with an arbitary frequency \[Omega]0. (i.e., K y'' + \[Eta] y' + \ m y = cos(\[Omega]0 t)\ \>", "Text", CellChangeTimes->{{3.40465947522635*^9, 3.40465961672017*^9}}], Cell[BoxData[ RowBox[{"rhs", " ", "=", " ", RowBox[{"FourierTransform", "[", RowBox[{ RowBox[{"Cos", "[", " ", RowBox[{"\[Omega]0", " ", "t"}], "]"}], " ", ",", "t", ",", "\[Omega]"}], "]"}]}]], "Input", CellTags->"mmtag:22:DiracDelta[]__as_FourierTransform[]_of_Cos[]"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ Using the Fourier Transform to Solve the Harmonic Oscillator and \ Back-Transforming\ \>", "Subtitle", CellChangeTimes->{{3.404663061035943*^9, 3.404663102704649*^9}, { 3.404825146857862*^9, 3.4048251758946238`*^9}}], Cell["\<\ All the derivatives have been removed, and we can solve for the Fourier \ transformed as a function of the transformation variable (in this case, \ \[Omega]).\ \>", "Text", CellChangeTimes->{{3.404659627145623*^9, 3.404659693680379*^9}}], Cell[BoxData[ RowBox[{"ftsol", " ", "=", " ", RowBox[{"Solve", "[", RowBox[{ RowBox[{"FrrODE2nd", " ", "\[Equal]", "rhs"}], ",", RowBox[{"FourierTransform", "[", RowBox[{ RowBox[{"y", "[", "t", "]"}], ",", "t", ",", "\[Omega]"}], "]"}]}], "]"}]}]], "Input"], Cell["\<\ Build in some physical assumptions for mass-spring-dashpot systems.\ \>", "Text", CellChangeTimes->{{3.404659627145623*^9, 3.4046597371441107`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"DampedHOAssumptions", "=", " ", RowBox[{ RowBox[{"\[Omega]0", " ", ">", " ", "0"}], " ", "&&", " ", RowBox[{"Mass", " ", ">", " ", "0"}], " ", "&&", " ", RowBox[{"Viscosity", " ", ">", " ", "0"}], " ", "&&", " ", RowBox[{"SpringK", " ", ">", " ", "0"}]}]}], ";"}]], "Input", CellChangeTimes->{{3.404464308044146*^9, 3.404464361784033*^9}, 3.404464395767366*^9, {3.40446445288768*^9, 3.404464458541174*^9}, { 3.404464495909594*^9, 3.404464497962357*^9}}], Cell["Back-transform to find the solution.", "Text", CellChangeTimes->{{3.404659627145623*^9, 3.4046597618322277`*^9}}], Cell[BoxData[ RowBox[{"FullSimplify", "[", RowBox[{ RowBox[{"InverseFourierTransform", "[", RowBox[{ RowBox[{ RowBox[{"FourierTransform", "[", RowBox[{ RowBox[{"y", "[", "t", "]"}], ",", "t", ",", "\[Omega]"}], "]"}], "/.", RowBox[{"Flatten", "[", "ftsol", "]"}]}], ",", "\[Omega]", ",", "t"}], "]"}], ",", RowBox[{"Assumptions", " ", "\[Rule]", " ", "DampedHMAssumptions"}]}], "]"}]], "Input", CellChangeTimes->{{3.40446426498857*^9, 3.404464284958558*^9}, { 3.404464404753519*^9, 3.404464421697019*^9}}, CellTags-> "mmtag:22:InverseFourierTransform[]__in_solution_to_harmonic_oscillator"], Cell["\<\ Otherwise, the complete solution (i.e., the inhomogeneous plus the \ homogeneous parts) can be calculated by the DSolve function\ \>", "Text"], Cell[BoxData[ RowBox[{"GenSol", " ", "=", " ", RowBox[{"DSolve", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"Mass", " ", RowBox[{"D", "[", RowBox[{ RowBox[{"y", "[", "t", "]"}], ",", RowBox[{"{", RowBox[{"t", ",", "2"}], "}"}]}], "]"}]}], " ", "+", " ", RowBox[{"Viscosity", " ", RowBox[{"D", "[", RowBox[{ RowBox[{"y", "[", "t", "]"}], ",", "t"}], "]"}]}], " ", "+", " ", RowBox[{"SpringK", " ", RowBox[{"y", "[", "t", "]"}]}]}], " ", "\[Equal]", " ", RowBox[{"Cos", "[", RowBox[{ SubscriptBox["\[Omega]", "o"], " ", "t"}], "]"}]}], ",", RowBox[{"y", "[", "t", "]"}], ",", "t"}], "]"}]}]], "Input", CellChangeTimes->{{3.404464204238999*^9, 3.4044642072606583`*^9}}], Cell[BoxData[ RowBox[{"FullSimplify", "[", RowBox[{ RowBox[{ RowBox[{"y", "[", "t", "]"}], "/.", RowBox[{"Flatten", "[", "GenSol", "]"}]}], ",", RowBox[{"Assumptions", "\[Rule]", "DampedHOAssumptions"}]}], "]"}]], "Input", CellChangeTimes->{{3.4044644789917917`*^9, 3.4044644882290907`*^9}}, CellTags->"mmtag:22:damped_forced_harmonic_operator__general_solution"] }, Closed]], Cell[CellGroupData[{ Cell["\<\ Functionals: An Introduction to Variational Calculus by way of Variation of \ Parameters: Approximating the Geodesic\ \>", "Subtitle", CellChangeTimes->{{3.404661908729175*^9, 3.4046619159763813`*^9}}], Cell[TextData[{ "The introductory form of calculus of variations involves finding an unknown \ function, ", StyleBox["y", FontSlant->"Italic"], " = ", StyleBox["y", FontSlant->"Italic"], "(", StyleBox["x", FontSlant->"Italic"], "), which maximizes or minimizes a specified definite integral of y(x). " }], "Text", CellChangeTimes->{{3.404659818242803*^9, 3.404659998304338*^9}}, CellTags->{ "mmtag:22:functionals", "mmtag:22:calculus_of_variations__introduction"}], Cell[TextData[{ "As an introductory problem, we might as a question such as, \"of all paths \ that traverse a rolling landscape, which one is the shortest?\" The y(x) \ that minimizes the total length is called the geodesic.\n\nThe total length \ of a path over a fixed surface can be written as an integral of the unknown ", StyleBox["y", FontSlant->"Italic"], "(", StyleBox["x", FontSlant->"Italic"], ") (this is worked out in the accompanying lecture notes)\n", StyleBox["L", FontSlant->"Italic"], "[", StyleBox["y", FontSlant->"Italic"], "(", StyleBox["x", FontSlant->"Italic"], ")] = ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Integral]", "path"], "ds"}], TraditionalForm]]], "= ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["\[Integral]", RowBox[{"x", "=", "0"}], RowBox[{"x", "=", "1"}]], RowBox[{ SqrtBox[ RowBox[{"1", " ", "+", " ", SuperscriptBox[ RowBox[{"(", FractionBox[ StyleBox["dy", FontSlant->"Italic"], StyleBox["dx", FontSlant->"Italic"]], ")"}], "2"], " ", "+", SuperscriptBox[ RowBox[{ RowBox[{"(", FractionBox[ StyleBox["dh", FontSlant->"Italic"], StyleBox["dx", FontSlant->"Italic"]], ")"}], " "}], "2"]}]], " ", "dx"}]}], TraditionalForm]]], "\nSuppose that the \"hill\" has the shape ", StyleBox["h", FontSlant->"Italic"], "(", StyleBox["x", FontSlant->"Italic"], ") = ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "2"], TraditionalForm]]], ".\n\nHere, the \"real\" problem of finding the geodesic from the infinite \ set of all paths connecting ", StyleBox["y", FontSlant->"Italic"], "(", StyleBox["x", FontSlant->"Italic"], "=0) = 0 to ", StyleBox["y", FontSlant->"Italic"], "(", StyleBox["x", FontSlant->"Italic"], "=1) = 1 will be replaced by looking at all second-order polynomials: ", StyleBox["y", FontSlant->"Italic"], "(", StyleBox["x", FontSlant->"Italic"], ") = ", StyleBox["a", FontSlant->"Italic"], " + ", StyleBox["bx", FontSlant->"Italic"], " + ", StyleBox["c", FontSlant->"Italic"], Cell[BoxData[ FormBox[ SuperscriptBox["x", "2"], TraditionalForm]]], " and then minimizing over the (constrained) parameters. This will be \ compared with the exact calculation which we will work out below via calculus \ of variations." }], "Text", CellChangeTimes->{ 3.4045009327680693`*^9, 3.404595842143723*^9, {3.404640841751622*^9, 3.4046410675816717`*^9}, {3.404641928781603*^9, 3.404642006470593*^9}, { 3.40466000768867*^9, 3.404660139608336*^9}}, CellTags->"mmtag:22:optimal_path__example"], Cell["\<\ We specify a landscape and an arbitrary cubic path (a function of three \ parameters)\ \>", "Text", CellChangeTimes->{{3.404660156659608*^9, 3.4046602202987947`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"h", " ", "=", RowBox[{"x", "^", "2"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"$Assumptions", "=", " ", RowBox[{"b", " ", "\[Element]", " ", "Reals"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"YGen", " ", "=", " ", RowBox[{"a", " ", "+", " ", RowBox[{"b", " ", "x"}], " ", "+", " ", RowBox[{"c", " ", SuperscriptBox["x", "2"]}]}]}], ";"}]}], "Input", CellChangeTimes->{{3.404501646373365*^9, 3.404501646706842*^9}, { 3.4045022253969917`*^9, 3.404502232314618*^9}, 3.4045023168648453`*^9, 3.4046417223845673`*^9, 3.404641762424666*^9, {3.404642632496673*^9, 3.4046426394360447`*^9}, {3.404647826457548*^9, 3.4046478429038754`*^9}, { 3.404647987937312*^9, 3.40464799229593*^9}, {3.4046502525859137`*^9, 3.404650285616188*^9}, {3.404650358560813*^9, 3.404650365196518*^9}, 3.40465042432979*^9, {3.404650560065462*^9, 3.4046505617921877`*^9}, 3.404657567538101*^9, {3.404657749041814*^9, 3.40465774947331*^9}, { 3.404660673492948*^9, 3.404660700737488*^9}, 3.404662304339198*^9}], Cell[CellGroupData[{ Cell["\<\ Illustrate this surface and identify the starting and ending points.\ \>", "Section", CellChangeTimes->{{3.4046414956682568`*^9, 3.404641511413851*^9}, { 3.404661007147703*^9, 3.404661032320853*^9}}], Cell[BoxData[ RowBox[{"TheSurface", "=", RowBox[{"Show", "[", RowBox[{ RowBox[{"Plot3D", "[", RowBox[{"h", ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"y", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"PlotStyle", "\[Rule]", " ", RowBox[{"Opacity", "[", "0.5", "]"}]}]}], "]"}], ",", RowBox[{"Graphics3D", "[", RowBox[{"{", RowBox[{ RowBox[{"PointSize", "[", "0.05", "]"}], ",", RowBox[{"Darker", "[", "Green", "]"}], ",", RowBox[{"Point", "[", RowBox[{"{", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0"}], "}"}], "}"}], "]"}], ",", "Red", ",", RowBox[{"Point", "[", RowBox[{"{", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1"}], "}"}], "}"}], "]"}]}], "}"}], "]"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.404467135863947*^9, 3.40446722240604*^9}, { 3.404467277915476*^9, 3.4044672832200727`*^9}, {3.40446741421506*^9, 3.404467503517077*^9}, {3.404467544559461*^9, 3.4044676481900177`*^9}, { 3.404479108366922*^9, 3.40447912237018*^9}, {3.404501452174367*^9, 3.4045016155412083`*^9}, {3.404502327440783*^9, 3.404502362489421*^9}, { 3.404502845383687*^9, 3.404502886683926*^9}, {3.404502928468108*^9, 3.40450294535327*^9}, {3.404502985566725*^9, 3.404503009542479*^9}, { 3.4045757058299417`*^9, 3.4045757163083963`*^9}, {3.404641459458563*^9, 3.404641471705673*^9}, 3.404641588459548*^9, 3.4046417532579517`*^9, { 3.404642265450161*^9, 3.404642266913445*^9}, {3.404642650530941*^9, 3.404642652664554*^9}}] }, Open ]], Cell["The general path must satisfy the boundary conditions:", "Text"], Cell[BoxData[ RowBox[{"YBCs", " ", "=", RowBox[{"YGen", "/.", RowBox[{"(", RowBox[{ RowBox[{"Solve", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"YGen", "/.", RowBox[{"x", "\[Rule]", "0"}]}], ")"}], "\[Equal]", "0"}], ",", RowBox[{ RowBox[{"(", RowBox[{"YGen", "/.", RowBox[{"x", "\[Rule]", "1"}]}], ")"}], "\[Equal]", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"a", ",", "c"}], "}"}]}], "]"}], "//", "Flatten"}], ")"}]}]}]], "Input", CellChangeTimes->{{3.404501635110755*^9, 3.404501638443473*^9}, { 3.404502243499992*^9, 3.404502247747615*^9}, {3.40450229084171*^9, 3.404502298863676*^9}, {3.404503043048015*^9, 3.404503045686878*^9}, { 3.404575447332589*^9, 3.4045754685309362`*^9}, {3.404662300805003*^9, 3.4046623031718063`*^9}, 3.404662357923869*^9, 3.404662411068328*^9}], Cell["\<\ There is one remaining free variable, it can be determined by minimizing the \ integral\ \>", "Text"], Cell[BoxData[ RowBox[{"TotalDistanceCubic", " ", "=", " ", RowBox[{"FullSimplify", "[", RowBox[{"Integrate", "[", RowBox[{ RowBox[{"Sqrt", "[", RowBox[{"1", " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"D", "[", RowBox[{"YBCs", ",", "x"}], "]"}], ")"}], "^", "2"}], " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"D", "[", RowBox[{"h", ",", "x"}], "]"}], ")"}], "^", "2"}]}], "]"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}]}], "]"}], "]"}]}]], "Input", CellChangeTimes->{{3.404464658966947*^9, 3.404464662111412*^9}, { 3.404464714537931*^9, 3.4044647413887987`*^9}, {3.404464954334671*^9, 3.404464985042429*^9}, {3.404575419341125*^9, 3.4045754250672894`*^9}, { 3.4045837619696836`*^9, 3.40458376549263*^9}, {3.404585276078374*^9, 3.404585281909356*^9}, {3.404662146813477*^9, 3.4046621556508636`*^9}, 3.4046623588123007`*^9}], Cell["\<\ To get an idea of how the path' s distance compares with its shape, we can \ manipulate the path and display that path' s length\ \>", "Text", CellChangeTimes->{{3.404642030094247*^9, 3.404642075183105*^9}}], Cell[CellGroupData[{ Cell["Interactive Path Modification and Length Calculation", "Section", CellChangeTimes->{{3.4046414956682568`*^9, 3.404641511413851*^9}, { 3.404661007147703*^9, 3.404661032320853*^9}, {3.404661753538384*^9, 3.404661773912449*^9}}], Cell[BoxData[ RowBox[{"Manipulate", "[", RowBox[{ RowBox[{ RowBox[{"thedistance", "=", " ", RowBox[{"TotalDistanceCubic", "/.", RowBox[{"b", "\[Rule]", "B"}]}]}], ";", RowBox[{"Show", "[", RowBox[{"TheSurface", ",", RowBox[{"ParametricPlot3D", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", RowBox[{"YBCs", "/.", RowBox[{"b", "\[Rule]", "B"}]}], ",", "h"}], "}"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"PlotStyle", "\[Rule]", "Thick"}]}], "]"}], ",", RowBox[{"Graphics3D", "[", RowBox[{"{", RowBox[{"Text", "[", RowBox[{ RowBox[{"\"\\"", " ", "<>", " ", RowBox[{"ToString", "[", "thedistance", "]"}]}], ",", RowBox[{"{", RowBox[{ RowBox[{"1", "/", "2"}], ",", RowBox[{"1", "/", "2"}], ",", "1"}], "}"}]}], "]"}], "}"}], "]"}], ",", RowBox[{"BaseStyle", "\[Rule]", "Large"}]}], "]"}]}], ",", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"B", ",", ".5"}], "}"}], ",", RowBox[{"-", "2"}], ",", "8", ",", ".01"}], "}"}]}], "]"}]], "Input", CellChangeTimes->{{3.404466590818965*^9, 3.4044666220308037`*^9}, { 3.404467682944749*^9, 3.404467809083967*^9}, {3.404478368673821*^9, 3.404478379238304*^9}, {3.4044784152077293`*^9, 3.404478444282144*^9}, { 3.4044784760639544`*^9, 3.40447848114368*^9}, {3.404478524290354*^9, 3.404478700297669*^9}, {3.404478742628209*^9, 3.404478783030039*^9}, { 3.404478959153172*^9, 3.404478965031146*^9}, {3.404478995146985*^9, 3.40447906999319*^9}, 3.404479162040927*^9, {3.4044792262345657`*^9, 3.404479287049225*^9}, 3.404479335769865*^9, {3.404479396052589*^9, 3.404479422923171*^9}, {3.404479485964995*^9, 3.4044795221565943`*^9}, { 3.404479778836067*^9, 3.404479816748214*^9}, {3.404479849045295*^9, 3.404479856027051*^9}, {3.4044799013519163`*^9, 3.404479924124943*^9}, { 3.404479986111321*^9, 3.404480004332809*^9}, {3.404480035150588*^9, 3.404480038947961*^9}, {3.404480070070609*^9, 3.4044801088217773`*^9}, { 3.404480172145293*^9, 3.404480396206499*^9}, {3.404480448266753*^9, 3.404480450806542*^9}, 3.4045017499303637`*^9, {3.40450184955348*^9, 3.4045019194134407`*^9}, {3.404502406417272*^9, 3.404502413895767*^9}, { 3.4045024756765738`*^9, 3.404502497612432*^9}, 3.404502598543771*^9, 3.40450266256544*^9, {3.404503065798686*^9, 3.404503090607386*^9}, { 3.404575654038558*^9, 3.404575686025613*^9}, {3.404583385585848*^9, 3.404583407481595*^9}, 3.404583777657144*^9, {3.404585289278407*^9, 3.4045852910705233`*^9}, {3.404595909364073*^9, 3.4045959267724867`*^9}, { 3.4046416555631943`*^9, 3.404641657985498*^9}, 3.404647664204444*^9, 3.404662359872033*^9}] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Minimizing Parameters for the Geodesic's Cubic Approximation", \ "Subtitle", CellChangeTimes->{{3.404661908729175*^9, 3.4046619159763813`*^9}, { 3.4048240703498917`*^9, 3.404824128983827*^9}}], Cell["\<\ Does the total length of the cubic approximation have a minimum with respect \ to its remaining parameter?\ \>", "Text", CellChangeTimes->{{3.40464210192738*^9, 3.404642144286478*^9}}], Cell[BoxData[ RowBox[{"Plot", "[", RowBox[{"TotalDistanceCubic", ",", RowBox[{"{", RowBox[{"b", ",", RowBox[{"-", "2"}], ",", "6"}], "}"}]}], "]"}]], "Input", CellChangeTimes->{ 3.404502651722679*^9, 3.4045765107976294`*^9, 3.404583794494135*^9, { 3.404585479325739*^9, 3.4045854802435017`*^9}}], Cell[TextData[{ "OK, the total distance is a minimum somewhere on the interval 0 < ", StyleBox["b ", FontSlant->"Italic"], "< 1. Solving for the value of ", StyleBox["b", FontSlant->"Italic"], " at the minimum:" }], "Text", CellChangeTimes->{{3.4046418980245247`*^9, 3.4046419006864033`*^9}}], Cell[BoxData[ RowBox[{"BminsolGeodesicCubic", "=", " ", RowBox[{"FindMinimum", "[", RowBox[{"TotalDistanceCubic", ",", RowBox[{"{", RowBox[{"b", ",", "0", ",", "1"}], "}"}]}], "]"}]}]], "Input", CellChangeTimes->{ 3.404576522615288*^9, 3.404583804685885*^9, {3.404585484579966*^9, 3.404585485507769*^9}, {3.404585940909354*^9, 3.404585993363975*^9}}, CellTags->"mmtag:22:FindMinimum[]"], Cell["\<\ Now we can use the minimizing b to find the best cubic approximation to the \ geodesic. \ \>", "Text", CellChangeTimes->{{3.4046421583183537`*^9, 3.404642194334806*^9}}], Cell[BoxData[ RowBox[{"GeodesicCubicSolution", " ", "=", " ", RowBox[{"YBCs", "/.", RowBox[{"BminsolGeodesicCubic", "[", RowBox[{"[", "2", "]"}], "]"}]}]}]], "Input", CellChangeTimes->{{3.4045838181412287`*^9, 3.404583825899551*^9}, { 3.4045859499419947`*^9, 3.404585952134047*^9}, {3.404594487346092*^9, 3.404594500241028*^9}, 3.4046623619956017`*^9}], Cell["\<\ This is the shape of the path, it doesn't differ very much from a straight \ line.\ \>", "Text", CellChangeTimes->{{3.4046421583183537`*^9, 3.404642234589995*^9}}], Cell[BoxData[ RowBox[{"GeodesicCubicPlot", " ", "=", " ", RowBox[{"Plot", "[", RowBox[{"GeodesicCubicSolution", ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"PlotStyle", "\[Rule]", " ", "Thick"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.40446507577921*^9, 3.404465081856881*^9}, 3.404502180426023*^9, {3.404583832470017*^9, 3.404583839763442*^9}, { 3.4045945396256733`*^9, 3.40459454255134*^9}, 3.404594819168639*^9}] }, Closed]], Cell[CellGroupData[{ Cell["Comparing the Approximation to the Exact Solution", "Subtitle", CellChangeTimes->{{3.404661908729175*^9, 3.4046619159763813`*^9}, { 3.4048240703498917`*^9, 3.404824128983827*^9}, {3.404824973377852*^9, 3.40482499080731*^9}}], Cell["\<\ The exact minimizing path can be found by using Calculus of Variations \ (demonstrated below). The solution is obtained from a boundary-value problem \ which we do not take up at this point, but it is interesting to see the exact \ solution and compare it with the approximate one we obtained above. The \ closed-form expression for the function that minimizes the climbing time is:\ \>", "Text", CellChangeTimes->{{3.404656743744937*^9, 3.404656750608287*^9}}], Cell[BoxData[ RowBox[{"GeodesicExact", "=", FractionBox[ RowBox[{ RowBox[{"2", " ", "x", " ", SqrtBox[ RowBox[{"1", "+", RowBox[{"4", " ", SuperscriptBox["x", "2"]}]}]]}], "+", RowBox[{"ArcSinh", "[", RowBox[{"2", " ", "x"}], "]"}]}], RowBox[{ RowBox[{"2", " ", SqrtBox["5"]}], "+", RowBox[{"ArcSinh", "[", "2", "]"}]}]]}]], "Input", CellChangeTimes->{{3.404502105542267*^9, 3.404502106757147*^9}, 3.404503268874053*^9, {3.404576813462816*^9, 3.404576821747821*^9}, { 3.40458384917439*^9, 3.404583857812213*^9}}], Cell[CellGroupData[{ Cell["Graphical Comparisons", "Section", CellChangeTimes->{{3.404584196978397*^9, 3.404584234602539*^9}, { 3.404585242915689*^9, 3.404585246106659*^9}, {3.40482550837958*^9, 3.404825522351069*^9}}], Cell["\<\ Plot the exact solution and compare it to our calculated approximation...\ \>", "Text", CellChangeTimes->{3.404652984240835*^9}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"GeodesicExactPlot", "=", " ", RowBox[{"Plot", "[", RowBox[{"GeodesicExact", ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"PlotStyle", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"Thickness", "[", "0.005", "]"}], ",", RowBox[{"Hue", "[", "1", "]"}]}], "}"}]}]}], "]"}]}], ";"}]], "Input",\ CellChangeTimes->{ 3.404502145717334*^9, 3.404503532020626*^9, 3.404503602724719*^9, { 3.4045768660605707`*^9, 3.404576873213757*^9}, {3.4045838671094847`*^9, 3.4045838758677673`*^9}, 3.404583954116931*^9, {3.404583992716748*^9, 3.4045839944518948`*^9}, 3.404656761842121*^9}], Cell[BoxData[ RowBox[{"GraphicsRow", "[", RowBox[{"{", RowBox[{ RowBox[{"Show", "[", RowBox[{"GeodesicCubicPlot", ",", "GeodesicExactPlot"}], "]"}], " ", ",", " ", RowBox[{"Show", "[", " ", RowBox[{"Plot", "[", RowBox[{ RowBox[{"GeodesicExact", "-", "GeodesicCubicSolution"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"PlotStyle", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"Thickness", "[", "0.005", "]"}], ",", RowBox[{"Hue", "[", "1", "]"}]}], "}"}]}]}], "]"}], "]"}]}], "}"}], "]"}]], "Input", CellChangeTimes->{{3.404576908195958*^9, 3.404576908818203*^9}, { 3.404583892262766*^9, 3.404583975223784*^9}, {3.40458400641957*^9, 3.404584047105723*^9}, {3.4045945557948513`*^9, 3.404594563144477*^9}}] }, Open ]], Cell["\<\ These two curves are very close, comparinfg three distances: the cubic \ approximation, the exact solution, and a straight line.\ \>", "Text", CellChangeTimes->{{3.404653019090494*^9, 3.404653062375351*^9}}] }, Open ]], Cell[BoxData[ RowBox[{ RowBox[{"Distance", "[", "f_", "]"}], " ", ":=", " ", RowBox[{"Integrate", "[", RowBox[{ RowBox[{"Sqrt", "[", RowBox[{"1", " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"D", "[", RowBox[{"f", ",", "x"}], "]"}], ")"}], "^", "2"}], " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"D", "[", RowBox[{"h", ",", "x"}], "]"}], ")"}], "^", "2"}]}], "]"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.40482597358812*^9, 3.404826000331833*^9}, { 3.404826076682631*^9, 3.4048260781436462`*^9}, 3.404826209089726*^9}], Cell[BoxData[ RowBox[{"Distance", "[", "GeodesicExact", "]"}]], "Input", CellChangeTimes->{{3.404826036121025*^9, 3.4048260472404327`*^9}, 3.4048261616301403`*^9, {3.404826224345272*^9, 3.40482624952335*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"Distance", "[", "GeodesicExact", "]"}], "<", RowBox[{"Distance", "[", "GeodesicCubicSolution", "]"}], " ", "<", " ", RowBox[{"Distance", "[", "x", "]"}]}]], "Input", CellChangeTimes->{{3.4048257440219717`*^9, 3.404825798880436*^9}, { 3.404826103552713*^9, 3.404826151684452*^9}, 3.4048262010180387`*^9}] }, Closed]], Cell[CellGroupData[{ Cell["Approximating the Brachiostone", "Subtitle", CellChangeTimes->{{3.404584196978397*^9, 3.404584234602539*^9}, { 3.404585242915689*^9, 3.404585246106659*^9}}], Cell[TextData[{ "The \"quickest\" path of running up-hill can be estimated with a model of \ how fast one runs up hill. Given a starting point ", StyleBox["y", FontSlant->"Italic"], "(", StyleBox["x", FontSlant->"Italic"], "=0) = 0 and an ending point ", StyleBox["y", FontSlant->"Italic"], "(", StyleBox["x", FontSlant->"Italic"], "=1) = 1, the question is to find, among all possible choices of path ", StyleBox["y", FontSlant->"Italic"], "(", StyleBox["x", FontSlant->"Italic"], ") that connects the end and starting point, which is the one that takes the \ least time if there is a hill ", StyleBox["h", FontSlant->"Italic"], "(", StyleBox["x", FontSlant->"Italic"], ") that has to be \"run-up.\"\nA reasonable model is that running speed is \ proportional to Cos(climbing-angle)--that is the velocity is 1 for running on \ a flat surface and goes to zero as the climbing-angle goes to ", Cell[BoxData[ FormBox[ RowBox[{ FractionBox["\[Pi]", "2"], " ", "."}], TraditionalForm]]], "\n\nAssuming that v(s) = Cos \[Alpha](s) where \[Alpha] is the angle of \ incline (i.e., cos \[Alpha]= ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["dx", "2"], "+", " ", SuperscriptBox["dy", "2"]}], ")"}], RowBox[{"1", "/", "2"}]], TraditionalForm]]], "/", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["dx", "2"], " ", "+", " ", SuperscriptBox["dy", "2"], " ", "+", " ", SuperscriptBox["dh", "2"]}], ")"}], " "}], RowBox[{"1", "/", "2"}]], TraditionalForm]]], " then the time increment is\nderived from ds/dt= v(s): dt = ds/v(s), then\n \ time= ", Cell[BoxData[ FormBox[ RowBox[{"\[Integral]", FractionBox["ds", RowBox[{"v", "(", "s", ")"}]]}], TraditionalForm]]], "= ", Cell[BoxData[ FormBox[ RowBox[{"\[Integral]", " "}], TraditionalForm]]], Cell[BoxData[ FormBox[ FractionBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["dx", "2"], " ", "+", " ", SuperscriptBox["dy", "2"], " ", "+", " ", SuperscriptBox["dh", "2"]}], ")"}], " "}], RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["dx", "2"], "+", " ", SuperscriptBox["dy", "2"]}], ")"}], RowBox[{"1", "/", "2"}]], " "}]], TraditionalForm]]], "= ", Cell[BoxData[ FormBox[ RowBox[{"\[Integral]", " "}], TraditionalForm]]], Cell[BoxData[ FormBox[ FractionBox[ RowBox[{ RowBox[{"(", RowBox[{"1", " ", "+", " ", SuperscriptBox[ RowBox[{"(", FractionBox["dy", "dx"], ")"}], "2"], " ", "+", " ", SuperscriptBox[ RowBox[{"(", FractionBox["dh", "dx"], ")"}], "2"]}], ")"}], " "}], RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"1", "+", " ", SuperscriptBox[ RowBox[{"(", FractionBox["dy", "dx"], ")"}], "2"]}], ")"}], RowBox[{"1", "/", "2"}]], " "}]], TraditionalForm]]], "dx" }], "Text", CellChangeTimes->{{3.404584399112872*^9, 3.4045851570264874`*^9}, { 3.404595890131413*^9, 3.40459589586908*^9}}], Cell[BoxData[ RowBox[{"TotalTimeCubic", " ", "=", " ", RowBox[{"FullSimplify", "[", RowBox[{ RowBox[{"Integrate", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"1", " ", "+", " ", RowBox[{ RowBox[{"D", "[", RowBox[{"YBCs", ",", "x"}], "]"}], "^", "2"}], " ", "+", " ", RowBox[{ RowBox[{"D", "[", RowBox[{"h", ",", "x"}], "]"}], "^", "2"}]}], ")"}], "/", RowBox[{"Sqrt", "[", RowBox[{"1", " ", "+", " ", RowBox[{ RowBox[{"D", "[", RowBox[{"YBCs", ",", "x"}], "]"}], "^", "2"}]}], "]"}]}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}]}], "]"}], ",", RowBox[{"Assumptions", "\[Rule]", " ", RowBox[{"b", "\[NotEqual]", "1"}]}]}], "]"}]}]], "Input", CellChangeTimes->{{3.404585700791129*^9, 3.4045857742218037`*^9}, { 3.404585834735808*^9, 3.404585853205525*^9}, {3.4046623644162703`*^9, 3.4046623653041687`*^9}, {3.404850693805703*^9, 3.404850705878379*^9}}], Cell[CellGroupData[{ Cell["Visualizing the Approximation to the Brachiostone", "Section", CellChangeTimes->{{3.404850837987259*^9, 3.404850870997789*^9}}], Cell[BoxData[ RowBox[{"TheSurfaceWithGeodisic", "=", " ", RowBox[{"Show", "[", RowBox[{"TheSurface", ",", RowBox[{"ParametricPlot3D", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "GeodesicExact", ",", RowBox[{"x", "^", "2"}]}], "}"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"PlotStyle", "\[Rule]", RowBox[{"{", RowBox[{"Thick", ",", "Dashed"}], "}"}]}]}], "]"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.40458747097503*^9, 3.404587513871113*^9}, { 3.404587632878661*^9, 3.404587659999007*^9}}], Cell["\<\ As with the geodesic, illustrate the dependence of the approximating path for \ the brachistone and the total time.\ \>", "Text", CellChangeTimes->{{3.40465740924193*^9, 3.4046574589370747`*^9}}], Cell[BoxData[ RowBox[{"Manipulate", "[", RowBox[{ RowBox[{ RowBox[{"thetime", " ", "=", " ", RowBox[{"TotalTimeCubic", "/.", RowBox[{"b", "\[Rule]", "B"}]}]}], ";", RowBox[{"Show", "[", RowBox[{"TheSurfaceWithGeodisic", ",", RowBox[{"ParametricPlot3D", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", RowBox[{"YBCs", "/.", RowBox[{"b", "\[Rule]", "B"}]}], ",", RowBox[{"x", "^", "2"}]}], "}"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"PlotStyle", "\[Rule]", RowBox[{"{", RowBox[{"Thick", ",", "Red"}], "}"}]}]}], "]"}], ",", RowBox[{"Graphics3D", "[", RowBox[{"{", RowBox[{"Text", "[", RowBox[{ RowBox[{"\"\\"", " ", "<>", " ", RowBox[{"ToString", "[", "thetime", "]"}]}], ",", RowBox[{"{", RowBox[{ RowBox[{"1", "/", "2"}], ",", RowBox[{"1", "/", "2"}], ",", "1"}], "}"}]}], "]"}], "}"}], "]"}], ",", RowBox[{"BaseStyle", "\[Rule]", "Large"}]}], "]"}]}], ",", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"B", ",", ".5"}], "}"}], ",", RowBox[{"-", "2"}], ",", "8", ",", ".01"}], "}"}]}], "]"}]], "Input", CellChangeTimes->{{3.404587408010137*^9, 3.40458741643084*^9}, { 3.4045876827376823`*^9, 3.4045877033111477`*^9}, {3.404587736513063*^9, 3.4045877408706207`*^9}, 3.40466236647163*^9}] }, Open ]], Cell[BoxData[ RowBox[{"Plot", "[", RowBox[{"TotalTimeCubic", ",", RowBox[{"{", RowBox[{"b", ",", RowBox[{"-", "2"}], ",", "2"}], "}"}]}], "]"}]], "Input", CellChangeTimes->{{3.4045858710378847`*^9, 3.404585893900238*^9}}], Cell[BoxData[ RowBox[{"BminsolBrachioCubic", "=", " ", RowBox[{"FindMinimum", "[", RowBox[{"TotalTimeCubic", ",", RowBox[{"{", RowBox[{"b", ",", "0", ",", "1"}], "}"}]}], "]"}]}]], "Input", CellChangeTimes->{ 3.404576522615288*^9, 3.404583804685885*^9, {3.404585484579966*^9, 3.404585485507769*^9}, {3.404585940909354*^9, 3.404585993363975*^9}, { 3.404594733809546*^9, 3.4045947435266333`*^9}}, CellTags->"mmtag:22:FindMinimum[]"], Cell["\<\ The minimizer for b can be used to produce the cubic approximation to the \ brachiostone and then plotted.\ \>", "Text", CellChangeTimes->{{3.404656916145817*^9, 3.404656950656066*^9}, { 3.404657884513774*^9, 3.404657888263873*^9}}], Cell[BoxData[ RowBox[{"BrachioCubicSolution", " ", "=", " ", RowBox[{"YBCs", "/.", RowBox[{"BminsolBrachioCubic", "[", RowBox[{"[", "2", "]"}], "]"}]}]}]], "Input", CellChangeTimes->{{3.4045838181412287`*^9, 3.404583825899551*^9}, { 3.4045859499419947`*^9, 3.404585952134047*^9}, {3.404594487346092*^9, 3.404594500241028*^9}, {3.404594759801454*^9, 3.404594777297016*^9}, 3.404662367570932*^9}], Cell[BoxData[ RowBox[{"BrachioCubicPlot", " ", "=", " ", RowBox[{"Plot", "[", RowBox[{"BrachioCubicSolution", ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"PlotStyle", "\[Rule]", " ", "Thick"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.40446507577921*^9, 3.404465081856881*^9}, 3.404502180426023*^9, {3.404583832470017*^9, 3.404583839763442*^9}, { 3.4045945396256733`*^9, 3.40459454255134*^9}, {3.404594793722311*^9, 3.404594797031559*^9}, {3.4045950260799007`*^9, 3.404595027951461*^9}}] }, Closed]], Cell[CellGroupData[{ Cell["Calculus of Variations: Euler Equation for the Geodesic", "Subtitle", CellChangeTimes->{{3.404465202450095*^9, 3.404465248340637*^9}, { 3.4048522326755047`*^9, 3.404852241495803*^9}}], Cell["\<\ As derived in the notes, the condition for a curve to minimize an integral is \ given by the variational derivative, setting the variational derivative equal \ to zero produces the Euler equation\ \>", "Text", CellChangeTimes->{{3.4046578995251913`*^9, 3.404657995416915*^9}}], Cell[BoxData[ RowBox[{"Needs", "[", "\"\\"", "]"}]], "Input"], Cell[BoxData[ RowBox[{"DistanceIntegrand", " ", "=", RowBox[{"Sqrt", "[", RowBox[{"(", RowBox[{"1", " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"D", "[", RowBox[{ RowBox[{"y", "[", "x", "]"}], ",", "x"}], "]"}], ")"}], "^", "2"}], " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"D", "[", RowBox[{"h", ",", "x"}], "]"}], ")"}], "^", "2"}]}], ")"}], "]"}]}]], "Input", CellChangeTimes->{{3.404570892780171*^9, 3.404570909786401*^9}, { 3.404571025387114*^9, 3.4045710335144253`*^9}, {3.404576565907401*^9, 3.404576590795033*^9}, {3.404587922029807*^9, 3.404587925908866*^9}}], Cell["Calling VariationalD from the package \"VariationalMethods\"", "Text", CellChangeTimes->{{3.4046580277536907`*^9, 3.4046580552401733`*^9}}], Cell[BoxData[ RowBox[{"VariationalD", "[", RowBox[{"DistanceIntegrand", ",", RowBox[{"y", "[", "x", "]"}], ",", "x"}], "]"}]], "Input", CellChangeTimes->{{3.404465368244874*^9, 3.404465395279389*^9}, { 3.404576604956111*^9, 3.404576607866349*^9}, {3.404594155301873*^9, 3.404594158582996*^9}}], Cell["\<\ Setting the variational derivative to zero is the Euler equation\ \>", "Text", CellChangeTimes->{{3.404658079021843*^9, 3.404658109036455*^9}}], Cell[BoxData[ RowBox[{"DistanceExtremalCondition", " ", "=", RowBox[{"EulerEquations", "[", RowBox[{"DistanceIntegrand", ",", RowBox[{"y", "[", "x", "]"}], ",", "x"}], "]"}]}]], "Input", CellChangeTimes->{{3.404465439044466*^9, 3.4044654769036913`*^9}, { 3.404576616395693*^9, 3.4045766246744328`*^9}, {3.404594163160924*^9, 3.404594167854957*^9}}], Cell["\<\ The Euler equation is an ODE; this one has a closed-form solution.\ \>", "Text", CellChangeTimes->{{3.404658079021843*^9, 3.4046581508079453`*^9}}], Cell[BoxData[ RowBox[{"DistanceMinimizingFunction", " ", "=", RowBox[{"DSolve", "[", RowBox[{ RowBox[{"{", RowBox[{"DistanceExtremalCondition", ",", " ", RowBox[{ RowBox[{"y", "[", "0", "]"}], "\[Equal]", "0"}], ",", RowBox[{ RowBox[{"y", "[", "1", "]"}], "\[Equal]", "1"}]}], "}"}], ",", RowBox[{"y", "[", "x", "]"}], ",", "x"}], "]"}]}]], "Input", CellChangeTimes->{{3.4044654801953087`*^9, 3.404465558983993*^9}, { 3.404466500402858*^9, 3.4044665078329906`*^9}, {3.404502031142251*^9, 3.4045020335873623`*^9}, 3.4045034348931723`*^9, 3.404503580172916*^9, 3.404570409052073*^9, 3.404570929859654*^9, 3.404575187348281*^9, { 3.40457663194103*^9, 3.404576650107141*^9}}], Cell[BoxData[ RowBox[{"DistanceYExactSolution", "=", RowBox[{ RowBox[{"y", "[", "x", "]"}], "/.", RowBox[{"DistanceMinimizingFunction", "[", RowBox[{"[", "1", "]"}], "]"}]}]}]], "Input", CellChangeTimes->{{3.404466513224669*^9, 3.404466527095933*^9}, { 3.40450338890844*^9, 3.404503400346043*^9}, {3.404576661275882*^9, 3.404576669914608*^9}, {3.404576797868313*^9, 3.404576799202804*^9}, { 3.404594187153079*^9, 3.4045941885440063`*^9}}] }, Closed]], Cell[CellGroupData[{ Cell["\<\ Calculus of Variations: Numerical Solution of th Euler Equation for the \ Brachiostone\ \>", "Subtitle", CellChangeTimes->{{3.404465202450095*^9, 3.404465248340637*^9}, { 3.4048522326755047`*^9, 3.404852241495803*^9}, {3.404852699940497*^9, 3.40485271860783*^9}}], Cell["\<\ This is the form of the total time's integrand as derived above for v(s) = \ cos(\[Alpha])\ \>", "Text", CellChangeTimes->{{3.404658175470476*^9, 3.404658204432126*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"TimeIntegrand", " ", "=", RowBox[{ RowBox[{"(", RowBox[{"1", " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"D", "[", RowBox[{ RowBox[{"y", "[", "x", "]"}], ",", "x"}], "]"}], ")"}], "^", "2"}], " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"D", "[", RowBox[{"h", ",", "x"}], "]"}], ")"}], "^", "2"}]}], ")"}], "/", RowBox[{"Sqrt", "[", RowBox[{"1", " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"D", "[", RowBox[{ RowBox[{"y", "[", "x", "]"}], ",", "x"}], "]"}], ")"}], "^", "2"}]}], "]"}]}]}], "\n"}]], "Input", CellChangeTimes->{{3.404656805484112*^9, 3.404656845884041*^9}}], Cell[BoxData[ RowBox[{"TimeExtremalCondition", " ", "=", RowBox[{"EulerEquations", "[", RowBox[{"TimeIntegrand", ",", RowBox[{"y", "[", "x", "]"}], ",", "x"}], "]"}]}]], "Input", CellChangeTimes->{{3.404465439044466*^9, 3.4044654769036913`*^9}, { 3.404576616395693*^9, 3.4045766246744328`*^9}, {3.404588270614361*^9, 3.404588283401102*^9}}], Cell["\<\ This ODE doesn't have a closed-form solution; so we find a numerical \ approximation to the solution to the Euler equation, extract it and then plot \ it.\ \>", "Text", CellChangeTimes->{{3.404658175470476*^9, 3.4046582778240633`*^9}}], Cell[BoxData[ RowBox[{"BrachioMinimizerNumerical", "=", " ", RowBox[{"NDSolve", "[", RowBox[{ RowBox[{"{", RowBox[{"TimeExtremalCondition", ",", RowBox[{ RowBox[{"y", "[", "0", "]"}], "\[Equal]", "0"}], ",", RowBox[{ RowBox[{"y", "[", "1", "]"}], "\[Equal]", "1"}]}], "}"}], ",", RowBox[{"y", "[", "x", "]"}], ",", "x"}], "]"}]}]], "Input", CellChangeTimes->{{3.404588310394854*^9, 3.404588387892606*^9}, { 3.404588460054324*^9, 3.404588463348867*^9}}], Cell[BoxData[ RowBox[{"BrachioNumerical", "=", " ", RowBox[{ RowBox[{"y", "[", "x", "]"}], "/.", RowBox[{"BrachioMinimizerNumerical", "[", RowBox[{"[", "1", "]"}], "]"}]}]}]], "Input", CellChangeTimes->{{3.404588483300625*^9, 3.404588531956049*^9}}] }, Closed]], Cell[CellGroupData[{ Cell["Comparing the Brachiostone to its Approximations", "Subtitle", CellChangeTimes->{{3.404465202450095*^9, 3.404465248340637*^9}, { 3.4048522326755047`*^9, 3.404852241495803*^9}, {3.404852699940497*^9, 3.40485271860783*^9}, {3.4048542626696777`*^9, 3.404854277881074*^9}}], Cell[BoxData[ RowBox[{"BrachioExactPlot", "=", RowBox[{"Plot", "[", RowBox[{"BrachioNumerical", ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"PlotStyle", "\[Rule]", " ", RowBox[{"{", RowBox[{"Thick", ",", RowBox[{"Darker", "[", "Green", "]"}]}], "}"}]}]}], "]"}]}]], "Input", CellChangeTimes->{{3.4045885408426237`*^9, 3.404588582641776*^9}, { 3.40459498213723*^9, 3.404594997255087*^9}, {3.404595464927403*^9, 3.404595483665533*^9}}], Cell[BoxData[ RowBox[{"GraphicsRow", "[", RowBox[{"{", RowBox[{ RowBox[{"Show", "[", RowBox[{"BrachioCubicPlot", ",", "BrachioExactPlot"}], "]"}], " ", ",", " ", RowBox[{"Show", "[", " ", RowBox[{"Plot", "[", RowBox[{ RowBox[{"BrachioNumerical", "-", "BrachioCubicSolution"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"PlotStyle", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"Thickness", "[", "0.005", "]"}], ",", RowBox[{"Hue", "[", "1", "]"}]}], "}"}]}]}], "]"}], "]"}]}], "}"}], "]"}]], "Input", CellChangeTimes->{{3.404576908195958*^9, 3.404576908818203*^9}, { 3.404583892262766*^9, 3.404583975223784*^9}, {3.40458400641957*^9, 3.404584047105723*^9}, {3.4045945557948513`*^9, 3.404594563144477*^9}, { 3.404595007042675*^9, 3.404595009728553*^9}, {3.404595047258881*^9, 3.404595101936152*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"Time", "[", "f_", "]"}], ":=", RowBox[{"Integrate", "[", RowBox[{ RowBox[{"TimeIntegrand", "/.", RowBox[{ RowBox[{ RowBox[{"y", "'"}], "[", "x", "]"}], "\[Rule]", " ", RowBox[{"D", "[", RowBox[{"f", ",", "x"}], "]"}]}]}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1.0"}], "}"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.40485537319519*^9, 3.404855378325986*^9}, { 3.4048554177581663`*^9, 3.4048554344218082`*^9}, {3.4048556725538*^9, 3.4048556743364573`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"N", "[", RowBox[{"Time", "[", "BrachioNumerical", "]"}], "]"}], "<", RowBox[{"Chop", "[", RowBox[{"Time", "[", "BrachioCubicSolution", "]"}], "]"}], "<", RowBox[{"Time", "[", "x", "]"}], " "}]], "Input", CellChangeTimes->{{3.404855603058495*^9, 3.4048557446972027`*^9}}] }, Closed]] }, PrintingStyleEnvironment->"ColorPrintout", CellGrouping->Manual, WindowSize->{844, 683}, WindowMargins->{{Automatic, -967}, {Automatic, 77}}, WindowTitle->"Lecture 22 MIT 3.016 (Fall 2010) \[Copyright] W. Craig Carter \ 2003--2010", PrintingCopies->1, PrintingPageRange->{1, Automatic}, PrintingOptions->{"PaperOrientation"->"Portrait"}, ShowCellLabel->False, CellLabelAutoDelete->True, Magnification->1.5, FrontEndVersion->"7.0 for Mac OS X x86 (32-bit) (November 11, 2008)", StyleDefinitions->FrontEnd`FileName[{"Creative"}, "NaturalColor.nb", CharacterEncoding -> "UTF-8"] ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{ "mmtag:22:implementing_rules_for_linear_operators"->{ Cell[941, 33, 213, 6, 157, "Text", CellTags->"mmtag:22:implementing_rules_for_linear_operators"]}, "mmtag:22:FourierTransform[]__of_derivatives"->{ Cell[1157, 41, 301, 9, 157, "Input", CellTags->"mmtag:22:FourierTransform[]__of_derivatives"]}, "mmtag:22:FourierTransform[]__implementing_rules_as_linear_operator"->{ Cell[1917, 69, 329, 8, 157, "Text", CellTags->{ "mmtag:22:FourierTransform[]__implementing_rules_as_linear_operator", "mmtag:22:implementing_rules_for_linear_operators__FourierTransform[]"}]}, "mmtag:22:implementing_rules_for_linear_operators__FourierTransform[]"->{ Cell[1917, 69, 329, 8, 157, "Text", CellTags->{ "mmtag:22:FourierTransform[]__implementing_rules_as_linear_operator", "mmtag:22:implementing_rules_for_linear_operators__FourierTransform[]"}]}, "mmtag:22:FourierTransform[]__to_solve_damped_forced_harmonic_oscillator"->{ Cell[4934, 166, 329, 7, 157, "Text", CellTags->{ "mmtag:22:FourierTransform[]__to_solve_damped_forced_harmonic_oscillator", "mmtag:22:damped_forced_harmonic_operator__solution_using_\ FourierTransform[]"}], Cell[5741, 191, 333, 7, 157, "Text", CellTags->{ "mmtag:22:FourierTransform[]__to_solve_damped_forced_harmonic_oscillator", "mmtag:22:damped_forced_harmonic_operator__solution_using_\ FourierTransform[]"}]}, "mmtag:22:damped_forced_harmonic_operator__solution_using_FourierTransform[]\ "->{ Cell[4934, 166, 329, 7, 157, "Text", CellTags->{ "mmtag:22:FourierTransform[]__to_solve_damped_forced_harmonic_oscillator", "mmtag:22:damped_forced_harmonic_operator__solution_using_\ FourierTransform[]"}], Cell[5741, 191, 333, 7, 157, "Text", CellTags->{ "mmtag:22:FourierTransform[]__to_solve_damped_forced_harmonic_oscillator", "mmtag:22:damped_forced_harmonic_operator__solution_using_\ FourierTransform[]"}]}, "mmtag:22:DiracDelta[]__as_FourierTransform[]_of_Cos[]"->{ Cell[6670, 217, 295, 7, 157, "Input", CellTags->"mmtag:22:DiracDelta[]__as_FourierTransform[]_of_Cos[]"]}, "mmtag:22:InverseFourierTransform[]__in_solution_to_harmonic_oscillator"->{ Cell[8587, 273, 654, 16, 157, "Input", CellTags-> "mmtag:22:InverseFourierTransform[]__in_solution_to_harmonic_oscillator"]}, "mmtag:22:damped_forced_harmonic_operator__general_solution"->{ Cell[10209, 320, 388, 9, 157, "Input", CellTags->"mmtag:22:damped_forced_harmonic_operator__general_solution"]}, "mmtag:22:functionals"->{ Cell[10849, 340, 482, 15, 157, "Text", CellTags->{ "mmtag:22:functionals", "mmtag:22:calculus_of_variations__introduction"}]}, "mmtag:22:calculus_of_variations__introduction"->{ Cell[10849, 340, 482, 15, 157, "Text", CellTags->{ "mmtag:22:functionals", "mmtag:22:calculus_of_variations__introduction"}]}, "mmtag:22:optimal_path__example"->{ Cell[11334, 357, 2735, 99, 157, "Text", CellTags->"mmtag:22:optimal_path__example"]}, "mmtag:22:FindMinimum[]"->{ Cell[23858, 702, 413, 9, 157, "Input", CellTags->"mmtag:22:FindMinimum[]"], Cell[37540, 1104, 460, 10, 157, "Input", CellTags->"mmtag:22:FindMinimum[]"]} } *) (*CellTagsIndex CellTagsIndex->{ {"mmtag:22:implementing_rules_for_linear_operators", 48943, 1416}, {"mmtag:22:FourierTransform[]__of_derivatives", 49097, 1419}, {"mmtag:22:FourierTransform[]__implementing_rules_as_linear_operator", \ 49271, 1422}, {"mmtag:22:implementing_rules_for_linear_operators__FourierTransform[]", \ 49554, 1427}, {"mmtag:22:FourierTransform[]__to_solve_damped_forced_harmonic_oscillator", \ 49840, 1432}, {"mmtag:22:damped_forced_harmonic_operator__solution_using_FourierTransform[]\ ", 50369, 1444}, {"mmtag:22:DiracDelta[]__as_FourierTransform[]_of_Cos[]", 50874, 1455}, {"mmtag:22:InverseFourierTransform[]__in_solution_to_harmonic_oscillator", \ 51063, 1458}, {"mmtag:22:damped_forced_harmonic_operator__general_solution", 51263, 1462}, {"mmtag:22:functionals", 51408, 1465}, {"mmtag:22:calculus_of_variations__introduction", 51596, 1469}, {"mmtag:22:optimal_path__example", 51769, 1473}, {"mmtag:22:FindMinimum[]", 51889, 1476} } *) (*NotebookFileOutline Notebook[{ Cell[628, 22, 157, 4, 240, "Title"], Cell[CellGroupData[{ Cell[810, 30, 128, 1, 46, "Subtitle"], Cell[941, 33, 213, 6, 157, "Text", CellTags->"mmtag:22:implementing_rules_for_linear_operators"], Cell[1157, 41, 301, 9, 157, "Input", CellTags->"mmtag:22:FourierTransform[]__of_derivatives"], Cell[1461, 52, 44, 0, 157, "Text"], Cell[1508, 54, 406, 13, 157, "Input"], Cell[1917, 69, 329, 8, 157, "Text", CellTags->{ "mmtag:22:FourierTransform[]__implementing_rules_as_linear_operator", "mmtag:22:implementing_rules_for_linear_operators__FourierTransform[]"}], Cell[2249, 79, 248, 7, 157, "Input"], Cell[2500, 88, 129, 3, 157, "Text"], Cell[2632, 93, 213, 4, 157, "Section"], Cell[2848, 99, 1129, 31, 157, "Input"], Cell[3980, 132, 29, 0, 157, "Text"], Cell[4012, 134, 250, 7, 157, "Input"], Cell[4265, 143, 473, 13, 157, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[4775, 161, 156, 3, 84, "Subtitle"], Cell[4934, 166, 329, 7, 157, "Text", CellTags->{ "mmtag:22:FourierTransform[]__to_solve_damped_forced_harmonic_oscillator", "mmtag:22:damped_forced_harmonic_operator__solution_using_FourierTransform[\ ]"}], Cell[5266, 175, 472, 14, 157, "Input"], Cell[5741, 191, 333, 7, 157, "Text", CellTags->{ "mmtag:22:FourierTransform[]__to_solve_damped_forced_harmonic_oscillator", "mmtag:22:damped_forced_harmonic_operator__solution_using_FourierTransform[\ ]"}], Cell[6077, 200, 323, 8, 157, "Input"], Cell[6403, 210, 264, 5, 157, "Text"], Cell[6670, 217, 295, 7, 157, "Input", CellTags->"mmtag:22:DiracDelta[]__as_FourierTransform[]_of_Cos[]"] }, Closed]], Cell[CellGroupData[{ Cell[7002, 229, 229, 5, 84, "Subtitle"], Cell[7234, 236, 248, 5, 157, "Text"], Cell[7485, 243, 290, 8, 157, "Input"], Cell[7778, 253, 159, 3, 157, "Text"], Cell[7940, 258, 521, 10, 157, "Input"], Cell[8464, 270, 120, 1, 157, "Text"], Cell[8587, 273, 654, 16, 157, "Input", CellTags-> "mmtag:22:InverseFourierTransform[]__in_solution_to_harmonic_oscillator"], Cell[9244, 291, 152, 3, 157, "Text"], Cell[9399, 296, 807, 22, 157, "Input"], Cell[10209, 320, 388, 9, 157, "Input", CellTags->"mmtag:22:damped_forced_harmonic_operator__general_solution"] }, Closed]], Cell[CellGroupData[{ Cell[10634, 334, 212, 4, 121, "Subtitle"], Cell[10849, 340, 482, 15, 157, "Text", CellTags->{ "mmtag:22:functionals", "mmtag:22:calculus_of_variations__introduction"}], Cell[11334, 357, 2735, 99, 157, "Text", CellTags->"mmtag:22:optimal_path__example"], Cell[14072, 458, 177, 4, 157, "Text"], Cell[14252, 464, 1099, 22, 157, "Input"], Cell[CellGroupData[{ Cell[15376, 490, 212, 4, 157, "Section"], Cell[15591, 496, 1665, 37, 157, "Input"] }, Open ]], Cell[17271, 536, 70, 0, 157, "Text"], Cell[17344, 538, 975, 25, 157, "Input"], Cell[18322, 565, 111, 3, 157, "Text"], Cell[18436, 570, 973, 22, 157, "Input"], Cell[19412, 594, 218, 4, 157, "Text"], Cell[CellGroupData[{ Cell[19655, 602, 237, 3, 157, "Section"], Cell[19895, 607, 2883, 57, 157, "Input"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[22827, 670, 201, 3, 84, "Subtitle"], Cell[23031, 675, 195, 4, 157, "Text"], Cell[23229, 681, 320, 8, 157, "Input"], Cell[23552, 691, 303, 9, 157, "Text"], Cell[23858, 702, 413, 9, 157, "Input", CellTags->"mmtag:22:FindMinimum[]"], Cell[24274, 713, 180, 4, 157, "Text"], Cell[24457, 719, 373, 7, 157, "Input"], Cell[24833, 728, 174, 4, 157, "Text"], Cell[25010, 734, 479, 9, 157, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[25526, 748, 236, 3, 84, "Subtitle"], Cell[25765, 753, 473, 7, 157, "Text"], Cell[26241, 762, 590, 17, 157, "Input"], Cell[CellGroupData[{ Cell[26856, 783, 203, 3, 157, "Section"], Cell[27062, 788, 139, 3, 157, "Text"], Cell[CellGroupData[{ Cell[27226, 795, 700, 17, 157, "Input"], Cell[27929, 814, 854, 21, 157, "Input"] }, Open ]], Cell[28798, 838, 218, 4, 157, "Text"] }, Open ]], Cell[29031, 845, 683, 18, 157, "Input"], Cell[29717, 865, 214, 3, 157, "Input"], Cell[29934, 870, 348, 6, 157, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[30319, 881, 165, 2, 46, "Subtitle"], Cell[30487, 885, 3220, 109, 157, "Text"], Cell[33710, 996, 1051, 26, 157, "Input"], Cell[CellGroupData[{ Cell[34786, 1026, 134, 1, 157, "Section"], Cell[34923, 1029, 616, 16, 157, "Input"], Cell[35542, 1047, 206, 4, 157, "Text"], Cell[35751, 1053, 1530, 40, 157, "Input"] }, Open ]], Cell[37296, 1096, 241, 6, 157, "Input"], Cell[37540, 1104, 460, 10, 157, "Input", CellTags->"mmtag:22:FindMinimum[]"], Cell[38003, 1116, 245, 5, 157, "Text"], Cell[38251, 1123, 419, 8, 157, "Input"], Cell[38673, 1133, 553, 10, 157, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[39263, 1148, 192, 2, 84, "Subtitle"], Cell[39458, 1152, 287, 5, 157, "Text"], Cell[39748, 1159, 84, 1, 157, "Input"], Cell[39835, 1162, 667, 18, 157, "Input"], Cell[40505, 1182, 146, 1, 157, "Text"], Cell[40654, 1185, 307, 6, 157, "Input"], Cell[40964, 1193, 154, 3, 157, "Text"], Cell[41121, 1198, 367, 7, 157, "Input"], Cell[41491, 1207, 158, 3, 157, "Text"], Cell[41652, 1212, 737, 15, 157, "Input"], Cell[42392, 1229, 462, 9, 157, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[42891, 1243, 279, 6, 111, "Subtitle"], Cell[43173, 1251, 180, 4, 157, "Text"], Cell[43356, 1257, 769, 24, 157, "Input"], Cell[44128, 1283, 359, 7, 157, "Input"], Cell[44490, 1292, 246, 5, 157, "Text"], Cell[44739, 1299, 506, 12, 157, "Input"], Cell[45248, 1313, 266, 6, 157, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[45551, 1324, 281, 3, 69, "Subtitle"], Cell[45835, 1329, 513, 12, 157, "Input"], Cell[46351, 1343, 952, 23, 157, "Input"], Cell[47306, 1368, 562, 15, 157, "Input"], Cell[47871, 1385, 320, 7, 157, "Input"] }, Closed]] } ] *) (* End of internal cache information *)