diff --git a/code/MATLAB/DistanceToSE3.m b/code/MATLAB/DistanceToSE3.m new file mode 100644 index 0000000..b378015 --- /dev/null +++ b/code/MATLAB/DistanceToSE3.m @@ -0,0 +1,30 @@ +%*** CHAPTER 3: RIGID-BODY MOTIONS *** + +function d = DistanceToSE3(T) +% Takes mat: A 4x4 matrix. +% Returns d, a quantity describing the distance of T from the SE(3) +% manifold. +% Compute the determinant of R, the top 3x3 submatrix of T. If +% det(R) <= 0, return a large number. If det(R) > 0, replace the top 3x3 +% submatrix of T with R' * R, and set the first three entries of the +% fourth column of T to zero. Then return norm(T - I). +% Example Inputs: +%{ + clear; clc; + T = [1.0, 0.0, 0.0, 1.2; + 0.0, 0.1, -0.95, 1.5; + 0.0, 1.0, 0.1, -0.9; + 0.0, 0.0, 0.1, 0.98]; + d = DistanceToSE3(T) +%} +% Output: +% d = +% 0.0884 + +[R, p] = TransToRp(T); +if det(R) > 0 + d = norm([R' * R, [0; 0; 0]; T(4, :)] - eye(4), 'fro'); +else + d = 1e+9; +end +end \ No newline at end of file diff --git a/code/MATLAB/DistanceToSO3.m b/code/MATLAB/DistanceToSO3.m new file mode 100644 index 0000000..bc8a2b9 --- /dev/null +++ b/code/MATLAB/DistanceToSO3.m @@ -0,0 +1,28 @@ +%*** CHAPTER 3: RIGID-BODY MOTIONS *** + +function d = DistanceToSO3(R) +% Takes mat: A 3x3 matrix. +% Returns d, a quantity describing the distance of R from the SO(3) +% manifold. +% Computes the distance from R to the SO(3) manifold using the following +% method: +% If det(R) <= 0, return a large number. +% If det(R) > 0, return norm(R' * R - I). +% Example Inputs: +%{ + clear; clc; + R = [1.0, 0.0, 0.0; + 0.0, 0.1, -0.95; + 0.0, 1.0, 0.1]; + d = DistanceToSO3(R) +%} +% Output: +% d = +% 0.0884 + +if det(R) > 0 + d = norm(R' * R - eye(3), 'fro'); +else + d = 1e+9; +end +end \ No newline at end of file diff --git a/code/MATLAB/TestIfSE3.m b/code/MATLAB/TestIfSE3.m new file mode 100644 index 0000000..c36abde --- /dev/null +++ b/code/MATLAB/TestIfSE3.m @@ -0,0 +1,20 @@ +%*** CHAPTER 3: RIGID-BODY MOTIONS *** + +function judge = TestIfSE3(T) +% Takes mat: A 4x4 matrix T. +% Check if T is close to or on the manifold SE(3). +% Example Inputs: +%{ + clear; clc; + T = [1.0, 0.0, 0.0, 1.2; + 0.0, 0.1, -0.95, 1.5; + 0.0, 1.0, 0.1, -0.9; + 0.0, 0.0, 0.1, 0.98]; + judge = TestIfSE3(T) +%} +% Output: +% dudge = +% 0 + +judge = NearZero(DistanceToSE3(T)); +end \ No newline at end of file diff --git a/code/MATLAB/TestIfSO3.m b/code/MATLAB/TestIfSO3.m new file mode 100644 index 0000000..d564df5 --- /dev/null +++ b/code/MATLAB/TestIfSO3.m @@ -0,0 +1,19 @@ +%*** CHAPTER 3: RIGID-BODY MOTIONS *** + +function judge = TestIfSO3(R) +% Takes mat: A 3x3 matrix R. +% Check if R is close to or on the manifold SO(3). +% Example Inputs: +%{ + clear; clc; + R = [1.0, 0.0, 0.0; + 0.0, 0.1, -0.95; + 0.0, 1.0, 0.1]; + judge = TestIfSO3(R) +%} +% Output: +% dudge = +% 0 + +judge = NearZero(DistanceToSO3(R)); +end \ No newline at end of file diff --git a/code/Mathematica/modern_robotics.nb b/code/Mathematica/modern_robotics.nb index 59c212c..d3802ed 100644 --- a/code/Mathematica/modern_robotics.nb +++ b/code/Mathematica/modern_robotics.nb @@ -10,10 +10,10 @@ NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 158, 7] -NotebookDataLength[ 583129, 11307] -NotebookOptionsPosition[ 577538, 11225] -NotebookOutlinePosition[ 577917, 11241] -CellTagsIndexPosition[ 577874, 11238] +NotebookDataLength[ 594458, 11567] +NotebookOptionsPosition[ 588870, 11485] +NotebookOutlinePosition[ 589247, 11501] +CellTagsIndexPosition[ 589204, 11498] WindowFrame->Normal*) (* Beginning of Notebook Content *) @@ -140,7 +140,8 @@ Cell[BoxData[ RowBox[{ RowBox[{"Abs", "[", "s", "]"}], "<", SuperscriptBox["10", - RowBox[{"-", "6"}]]}]}], "\[IndentingNewLine]", "\n"}]}]], "Input", + RowBox[{"-", "6"}]]}]}], "\[IndentingNewLine]", + "\[IndentingNewLine]"}]}]], "Input", CellChangeTimes->{{3.6755319110417843`*^9, 3.675531927048277*^9}, { 3.675531958735077*^9, 3.675532032779791*^9}, {3.6755321540719852`*^9, 3.675532155394449*^9}, 3.67559226134205*^9, {3.675596340559066*^9, @@ -168,8 +169,9 @@ Cell[BoxData[ 3.7391144917104807`*^9}, {3.739114551615704*^9, 3.7391145602236476`*^9}, { 3.739115013147765*^9, 3.7391151873754435`*^9}, 3.73911531566462*^9, { 3.7391154731340127`*^9, 3.739115545682316*^9}, {3.7391155895767775`*^9, - 3.7391156703697853`*^9}, {3.739115838530749*^9, - 3.739115863763939*^9}},ExpressionUUID->"384776d6-859b-4642-a67d-\ + 3.7391156703697853`*^9}, {3.739115838530749*^9, 3.739115863763939*^9}, { + 3.7395195552681*^9, + 3.739519584492524*^9}},ExpressionUUID->"384776d6-859b-4642-a67d-\ e130b5288bb1"] }, Closed]], @@ -1220,8 +1222,8 @@ Cell[BoxData[ 3.675596680132864*^9, 3.6755966912919407`*^9}, {3.678096115211194*^9, 3.6780961185043497`*^9}, {3.690393628363669*^9, 3.6903936548561845`*^9}, 3.6908550611099367`*^9, {3.6924695183676157`*^9, 3.6924695606541176`*^9}, { - 3.6931534607233896`*^9, - 3.6931534623769927`*^9}},ExpressionUUID->"231c024d-75c6-45bd-a348-\ + 3.6931534607233896`*^9, 3.6931534623769927`*^9}, {3.739516946823781*^9, + 3.7395169590948253`*^9}},ExpressionUUID->"231c024d-75c6-45bd-a348-\ b4411df7ad47"], Cell[BoxData[ @@ -3075,7 +3077,247 @@ Cell[BoxData[ RowBox[{ RowBox[{"1", ";;", "3"}], ",", "4"}], "]"}], "]"}], "}"}], "\[Transpose]"}]}], "]"}]}], "\[IndentingNewLine]", - "\[IndentingNewLine]"}]}]], "Input", + "\[IndentingNewLine]", "\[IndentingNewLine]", + RowBox[{"(*", + RowBox[{ + RowBox[{ + RowBox[{"DistanceToSO3", "[", "R_", "]"}], ":", "\[IndentingNewLine]", + " ", + RowBox[{"Takes", " ", "a", " ", "3", "x3", " ", + RowBox[{"matrix", ".", "\[IndentingNewLine]", "Returns"}], " ", "a", + " ", "quantity", " ", "describing", " ", "the", " ", "distance", " ", + "of", " ", "R", " ", "from", " ", "the", " ", "SO", + RowBox[{"(", "3", ")"}], " ", + RowBox[{"manifold", ".", "\[IndentingNewLine]", "Computes"}], " ", + "the", " ", "distance", " ", "from", " ", "R", " ", "to", " ", "the", + " ", "SO", + RowBox[{"(", "3", ")"}], " ", "manifold", " ", "using", " ", "the", + " ", "following", " ", "method"}], ":", " ", + RowBox[{ + RowBox[{"If", " ", "det", + RowBox[{"(", "R", ")"}]}], " ", "\[LessEqual]", " ", "0"}]}], ",", + " ", + RowBox[{ + RowBox[{"return", " ", "a", " ", "large", " ", + RowBox[{"number", ".", " ", "If"}], " ", "det", + RowBox[{"(", "R", ")"}]}], " ", ">", " ", "0"}], ",", + RowBox[{ + RowBox[{"return", " ", "norm", + RowBox[{ + RowBox[{"(", + RowBox[{ + RowBox[{ + RowBox[{"R", "'"}], ".", "R"}], " ", "-", " ", "I"}], ")"}], + "."}]}], "\[IndentingNewLine]", ";", "\[IndentingNewLine]", + RowBox[{ + RowBox[{ + "Example", ":", "\[IndentingNewLine]", "Input", ":", " ", "d"}], " ", + "=", " ", + RowBox[{ + RowBox[{"DistanceToSO3", "[", + RowBox[{"{", + RowBox[{ + RowBox[{"{", + RowBox[{"1.0", ",", "0.0", ",", "0.0"}], "}"}], ",", + RowBox[{"{", + RowBox[{"0.0", ",", "0.1", ",", + RowBox[{"-", "0.95"}]}], "}"}], ",", + RowBox[{"{", + RowBox[{"0.0", ",", "1.0", ",", "0.1"}], "}"}]}], "}"}], "]"}], + "\[IndentingNewLine]", + RowBox[{"Output", ":", " ", + TagBox[ + TagBox["0.08835298523536149", + Function[BoxForm`e$, + MatrixForm[BoxForm`e$]]], + Function[BoxForm`e$, + MatrixForm[BoxForm`e$]]]}]}]}]}]}], "\[IndentingNewLine]", "*)"}], + "\[IndentingNewLine]", "\[IndentingNewLine]", + RowBox[{ + RowBox[{"DistanceToSO3", "[", "R_", "]"}], ":=", + RowBox[{"If", "[", + RowBox[{ + RowBox[{ + RowBox[{"Det", "[", "R", "]"}], ">", "0"}], ",", + RowBox[{"Return", "[", + RowBox[{"Norm", "[", + RowBox[{ + RowBox[{ + RowBox[{ + RowBox[{"R", "\[Transpose]"}], ".", "R"}], "-", + RowBox[{"IdentityMatrix", "[", "3", "]"}]}], ",", + "\"\\""}], "]"}], "]"}], ",", + RowBox[{"Return", "[", + SuperscriptBox["10", "9"], "]"}]}], "]"}]}], "\[IndentingNewLine]", + "\[IndentingNewLine]", "\[IndentingNewLine]", + RowBox[{"(*", + RowBox[{ + RowBox[{ + RowBox[{"DistanceToSE3", "[", "T_", "]"}], ":", "\[IndentingNewLine]", + " ", + RowBox[{"Takes", " ", "a", " ", "4", "x4", " ", + RowBox[{"matrix", ".", "\[IndentingNewLine]", "Returns"}], " ", "a", + " ", "quantity", " ", "describing", " ", "the", " ", "distance", " ", + "of", " ", "T", " ", "from", " ", "the", " ", "SE", + RowBox[{"(", "3", ")"}], " ", + RowBox[{"manifold", ".", "\[IndentingNewLine]", "Compute"}], " ", + "the", " ", "determinant", " ", "of", " ", "R"}]}], ",", " ", + RowBox[{ + RowBox[{ + "the", " ", "top", " ", "3", "x3", " ", "submatrix", " ", "of", " ", + RowBox[{"T", ".", " ", "If"}], " ", "det", + RowBox[{"(", "R", ")"}]}], " ", "\[LessEqual]", " ", "0"}], ",", " ", + RowBox[{ + RowBox[{"return", " ", "a", " ", "large", " ", + RowBox[{"number", ".", " ", "If"}], " ", "det", + RowBox[{"(", "R", ")"}]}], " ", ">", " ", "0"}], ",", " ", + RowBox[{ + "replace", " ", "the", " ", "top", " ", "3", "x3", " ", "submatrix", " ", + "of", " ", "T", " ", "with", " ", + RowBox[{ + RowBox[{"R", "'"}], ".", "R"}]}], ",", " ", + RowBox[{ + RowBox[{ + "and", " ", "set", " ", "the", " ", "first", " ", "three", " ", + "entries", " ", "of", " ", "the", " ", "fourth", " ", "column", " ", + "of", " ", "T", " ", "to", " ", + RowBox[{"zero", ".", " ", "Then"}], " ", "return", " ", "norm", + RowBox[{ + RowBox[{"(", + RowBox[{"T", " ", "-", " ", "I"}], ")"}], "."}]}], + "\[IndentingNewLine]", ";", "\[IndentingNewLine]", + RowBox[{ + RowBox[{ + "Example", ":", "\[IndentingNewLine]", "Input", ":", " ", "d"}], " ", + "=", " ", + RowBox[{ + RowBox[{"DistanceToSE3", "[", + RowBox[{"{", + RowBox[{ + RowBox[{"{", + RowBox[{"1.0", ",", "0.0", ",", "0.0", ",", "1.2"}], "}"}], ",", + RowBox[{"{", + RowBox[{"0.0", ",", "0.1", ",", + RowBox[{"-", "0.95"}], ",", "1.5"}], "}"}], ",", + RowBox[{"{", + RowBox[{"0.0", ",", "1.0", ",", "0.1", ",", + RowBox[{"-", "0.9"}]}], "}"}], ",", + RowBox[{"{", + RowBox[{"0.0", ",", "0.0", ",", "0.1", ",", "0.98"}], "}"}]}], + "}"}], "]"}], "\[IndentingNewLine]", + RowBox[{"Output", ":", " ", "0.13493053768513638"}]}]}]}]}], + "\[IndentingNewLine]", "*)"}], "\[IndentingNewLine]", + "\[IndentingNewLine]", + RowBox[{ + RowBox[{"DistanceToSE3", "[", "T_", "]"}], ":=", + RowBox[{"Module", "[", + RowBox[{ + RowBox[{"{", + RowBox[{"R", ",", "p"}], "}"}], ",", + RowBox[{ + RowBox[{ + RowBox[{"{", + RowBox[{"R", ",", "p"}], "}"}], "=", + RowBox[{"TransToRp", "[", "T", "]"}]}], ";", + RowBox[{"If", "[", + RowBox[{ + RowBox[{ + RowBox[{"Det", "[", "R", "]"}], ">", "0"}], ",", + RowBox[{"Return", "[", + RowBox[{"Norm", "[", + RowBox[{ + RowBox[{ + RowBox[{"Join", "[", + RowBox[{ + RowBox[{"Join", "[", + RowBox[{ + RowBox[{ + RowBox[{"R", "\[Transpose]"}], ".", "R"}], ",", + RowBox[{ + RowBox[{"{", + RowBox[{"{", + RowBox[{"0", ",", "0", ",", "0"}], "}"}], "}"}], + "\[Transpose]"}], ",", "2"}], "]"}], ",", + RowBox[{"{", + RowBox[{"T", "[", + RowBox[{"[", + RowBox[{"4", ",", ";;"}], "]"}], "]"}], "}"}]}], "]"}], "-", + RowBox[{"IdentityMatrix", "[", "4", "]"}]}], ",", + "\"\\""}], "]"}], "]"}], ",", + RowBox[{"Return", "[", + SuperscriptBox["10", "9"], "]"}]}], "]"}]}]}], "]"}]}], + "\[IndentingNewLine]", "\[IndentingNewLine]", "\[IndentingNewLine]", + RowBox[{"(*", + RowBox[{ + RowBox[{ + RowBox[{"TestIfSO3", "[", "R_", "]"}], ":", "\[IndentingNewLine]", " ", + RowBox[{"Takes", " ", "a", " ", "3", "x3", " ", + RowBox[{"matrix", ".", "\[IndentingNewLine]", "Check"}], " ", "if", + " ", "R", " ", "is", " ", "close", " ", "to", " ", "or", " ", "on", + " ", "the", " ", "manifold", " ", "SO", + RowBox[{ + RowBox[{"(", "3", ")"}], "."}]}]}], "\[IndentingNewLine]", ";", + "\[IndentingNewLine]", + RowBox[{ + RowBox[{ + "Example", ":", "\[IndentingNewLine]", "Input", ":", " ", "judge"}], + " ", "=", " ", + RowBox[{ + RowBox[{"TestIfSO3", "[", + RowBox[{"{", + RowBox[{ + RowBox[{"{", + RowBox[{"1.0", ",", "0.0", ",", "0.0"}], "}"}], ",", + RowBox[{"{", + RowBox[{"0.0", ",", "0.1", ",", + RowBox[{"-", "0.95"}]}], "}"}], ",", + RowBox[{"{", + RowBox[{"0.0", ",", "1.0", ",", "0.1"}], "}"}]}], "}"}], "]"}], + "\[IndentingNewLine]", + RowBox[{"Output", ":", " ", "False"}]}]}]}], "\[IndentingNewLine]", + "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", + RowBox[{ + RowBox[{"TestIfSO3", "[", "R_", "]"}], ":=", + RowBox[{"NearZero", "[", + RowBox[{"DistanceToSO3", "[", "R", "]"}], "]"}]}], "\[IndentingNewLine]", + "\[IndentingNewLine]", "\[IndentingNewLine]", + RowBox[{"(*", + RowBox[{ + RowBox[{ + RowBox[{"TestIfSE3", "[", "T_", "]"}], ":", "\[IndentingNewLine]", " ", + RowBox[{"Takes", " ", "a", " ", "4", "X4", " ", + RowBox[{"matrix", ".", "\[IndentingNewLine]", "Check"}], " ", "if", + " ", "T", " ", "is", " ", "close", " ", "to", " ", "or", " ", "on", + " ", "the", " ", "manifold", " ", "SE", + RowBox[{ + RowBox[{"(", "3", ")"}], "."}]}]}], "\[IndentingNewLine]", ";", + "\[IndentingNewLine]", + RowBox[{ + RowBox[{ + "Example", ":", "\[IndentingNewLine]", "Input", ":", " ", "judge"}], + " ", "=", " ", + RowBox[{ + RowBox[{"TestIfSE3", "[", + RowBox[{"{", + RowBox[{ + RowBox[{"{", + RowBox[{"1.0", ",", "0.0", ",", "0.0", ",", "1.2"}], "}"}], ",", + RowBox[{"{", + RowBox[{"0.0", ",", "0.1", ",", + RowBox[{"-", "0.95"}], ",", "1.5"}], "}"}], ",", + RowBox[{"{", + RowBox[{"0.0", ",", "1.0", ",", "0.1", ",", + RowBox[{"-", "0.9"}]}], "}"}], ",", + RowBox[{"{", + RowBox[{"0.0", ",", "0.0", ",", "0.1", ",", "0.98"}], "}"}]}], + "}"}], "]"}], "\[IndentingNewLine]", + RowBox[{"Output", ":", " ", "False"}]}]}]}], "\[IndentingNewLine]", + "*)"}], "\[IndentingNewLine]", "\[IndentingNewLine]", + RowBox[{ + RowBox[{"TestIfSE3", "[", "T_", "]"}], ":=", + RowBox[{"NearZero", "[", + RowBox[{"DistanceToSE3", "[", "T", "]"}], "]"}]}], "\[IndentingNewLine]", + "\[IndentingNewLine]"}]}]], "Input", CellChangeTimes->{{3.654107438701495*^9, 3.6541075770931664`*^9}, { 3.6541076103152647`*^9, 3.654107726674172*^9}, {3.654107800327899*^9, 3.654107805926005*^9}, {3.654107842157054*^9, 3.654107956534466*^9}, { @@ -3219,10 +3461,28 @@ Cell[BoxData[ 3.739122564870072*^9, 3.7391225688833127`*^9}, {3.739123129003651*^9, 3.7391231526767683`*^9}, {3.739123758931058*^9, 3.7391237867909555`*^9}, { 3.7391239502498274`*^9, 3.7391240409630785`*^9}, {3.739124739958088*^9, - 3.7391247482039185`*^9}, {3.7391264152358837`*^9, - 3.739126432068795*^9}},ExpressionUUID->"30cfbd3e-57bb-4e33-99e1-\ + 3.7391247482039185`*^9}, {3.7391264152358837`*^9, 3.739126432068795*^9}, { + 3.7395146084854665`*^9, 3.739514699211993*^9}, 3.7395147442384024`*^9, { + 3.7395147760686655`*^9, 3.739514867035931*^9}, {3.739514901868358*^9, + 3.739514947185063*^9}, {3.739515012201562*^9, 3.7395151874695163`*^9}, { + 3.739515920019891*^9, 3.739516111097062*^9}, {3.7395161736187277`*^9, + 3.7395163487390146`*^9}, {3.7395164508221674`*^9, 3.7395165602717085`*^9}, + 3.7395165957193995`*^9, {3.7395166458480487`*^9, 3.739516670257716*^9}, { + 3.7395169216744976`*^9, 3.739516922105482*^9}, {3.7395170302279854`*^9, + 3.7395170305826592`*^9}, {3.7395171091216917`*^9, 3.739517113000117*^9}, { + 3.739517202741659*^9, 3.739517214371004*^9}, {3.7395174820271325`*^9, + 3.7395174847737727`*^9}, {3.7395175192625136`*^9, 3.739517573167054*^9}, { + 3.7395176093518763`*^9, 3.7395176442463894`*^9}, {3.7395177075281024`*^9, + 3.739517768961048*^9}, {3.739517815270845*^9, 3.7395178339003735`*^9}, { + 3.7395180608532534`*^9, 3.739518069774658*^9}, 3.739518110440982*^9, { + 3.7395181723659773`*^9, 3.7395182259215794`*^9}, {3.739518355020355*^9, + 3.7395183583134203`*^9}, 3.7395183909234786`*^9, {3.739518695106036*^9, + 3.7395188785015717`*^9}, {3.7395189108690205`*^9, + 3.7395189759945483`*^9}, {3.739519028200582*^9, 3.7395190632221794`*^9}, { + 3.7395194255986805`*^9, 3.7395195339550247`*^9}, {3.7395196265136285`*^9, + 3.7395197395141363`*^9}},ExpressionUUID->"30cfbd3e-57bb-4e33-99e1-\ c83444da6e3e"] -}, Open ]], +}, Closed]], Cell[CellGroupData[{ @@ -7106,9 +7366,9 @@ Cell[BoxData[ RowBox[{"The", " ", "resulting", " ", "joint", " ", RowBox[{"accelerations", ".", "\[IndentingNewLine]", "This"}], " ", "function", " ", "computes", " ", "ddthetalist", " ", "by", " ", - RowBox[{"solving", ":", "\[IndentingNewLine]", - RowBox[{"Mlist", - RowBox[{"(", "thetalist", ")"}], "ddthetalist"}]}]}]}]}], "=", + "solving"}], ":", "\[IndentingNewLine]", + RowBox[{"Mlist", + RowBox[{"(", "thetalist", ")"}], "ddthetalist"}]}]}], "=", RowBox[{"taulist", "-", RowBox[{"c", RowBox[{"(", @@ -8576,7 +8836,7 @@ Cell[BoxData[ 3.6931539707350855`*^9}, {3.7306524103938313`*^9, 3.7306524111785803`*^9}},ExpressionUUID->"c001454f-a821-4609-9c44-\ fc644598fd8e"] -}, Open ]], +}, Closed]], Cell[CellGroupData[{ @@ -11224,7 +11484,7 @@ Cell[BoxData[ }, Closed]] }, WindowSize->{1904, 997}, -WindowMargins->{{-94, Automatic}, {Automatic, 89}}, +WindowMargins->{{3, Automatic}, {Automatic, 44}}, Magnification:>1.1 Inherited, FrontEndVersion->"11.2 for Microsoft Windows (64-bit) (September 10, 2017)", StyleDefinitions->"Default.nb" @@ -11242,72 +11502,72 @@ CellTagsIndex->{} Notebook[{ Cell[CellGroupData[{ Cell[580, 22, 863, 20, 149, "Title",ExpressionUUID->"3096a67c-add9-43da-83af-32b7a7a080ef"], -Cell[1446, 44, 1977, 38, 940, "Title",ExpressionUUID->"b6567309-8434-4708-a2bb-37b3f2220626"], -Cell[3426, 84, 953, 14, 63, "Input",ExpressionUUID->"051fe601-9dc3-4e99-996b-456fe895c2ee"] +Cell[1446, 44, 1977, 38, 1137, "Title",ExpressionUUID->"b6567309-8434-4708-a2bb-37b3f2220626"], +Cell[3426, 84, 953, 14, 75, "Input",ExpressionUUID->"051fe601-9dc3-4e99-996b-456fe895c2ee"] }, Closed]], Cell[CellGroupData[{ Cell[4416, 103, 428, 8, 48, "Title",ExpressionUUID->"67b2b117-d9a7-4270-b942-f78127e03058"], -Cell[4847, 113, 3254, 59, 308, "Input",ExpressionUUID->"384776d6-859b-4642-a67d-e130b5288bb1"] +Cell[4847, 113, 3323, 61, 280, "Input",ExpressionUUID->"384776d6-859b-4642-a67d-e130b5288bb1"] }, Closed]], Cell[CellGroupData[{ -Cell[8138, 177, 408, 8, 48, "Title",ExpressionUUID->"634fe91f-27b4-4e3f-a2ab-11a4d248e7fd"], -Cell[8549, 187, 2290, 53, 275, "Input",ExpressionUUID->"f6c93c67-d27e-41b6-bdde-6f032fb810cd"], -Cell[10842, 242, 3262, 86, 275, "Input",ExpressionUUID->"a30bf937-6481-47ee-bb9e-be8b63cba8e1"], -Cell[14107, 330, 2717, 70, 275, "Input",ExpressionUUID->"c7a81d49-344f-4e62-a20b-5d1c78342f7c"], -Cell[16827, 402, 2903, 64, 297, "Input",ExpressionUUID->"a1df8796-c264-4486-93a4-7068200bf83e"], -Cell[19733, 468, 5841, 124, 382, "Input",ExpressionUUID->"9e5fc67d-eedb-4d6c-92ce-f7e1bae8e4b6"], -Cell[25577, 594, 10433, 233, 429, "Input",ExpressionUUID->"305f1770-a098-48b5-a75d-b4d53949ef1a"], -Cell[36013, 829, 11703, 195, 340, "Input",ExpressionUUID->"4ddea111-4d1b-4fab-bb2e-2bf18b5511c8"], -Cell[47719, 1026, 11790, 198, 319, "Input",ExpressionUUID->"231c024d-75c6-45bd-a348-b4411df7ad47"], -Cell[59512, 1226, 12296, 212, 384, "Input",ExpressionUUID->"6b00b4cf-8c90-4a79-8772-4318b9207225"], -Cell[71811, 1440, 11679, 199, 340, "Input",ExpressionUUID->"2d25915a-29df-4bc1-87fb-88bf40588e9c"], -Cell[83493, 1641, 11520, 193, 275, "Input",ExpressionUUID->"8a71ceb0-ae72-491a-a009-dd65a1a09814"], -Cell[95016, 1836, 11997, 204, 388, "Input",ExpressionUUID->"883d455b-d605-47ff-8abc-4fc42cf1f167"], -Cell[107016, 2042, 11644, 192, 319, "Input",ExpressionUUID->"a4b8d789-2193-4eb4-89e8-f131c17e84af"], -Cell[118663, 2236, 12248, 208, 319, "Input",ExpressionUUID->"ec6248e6-c8a6-47c2-b31f-5eddd1d42a35"], -Cell[130914, 2446, 16513, 297, 406, "Input",ExpressionUUID->"cb2b4b25-a328-4451-b1a7-53449ff8db62"], -Cell[147430, 2745, 23859, 478, 1128, "Input",ExpressionUUID->"30cfbd3e-57bb-4e33-99e1-c83444da6e3e"] -}, Open ]], -Cell[CellGroupData[{ -Cell[171326, 3228, 358, 7, 77, "Title",ExpressionUUID->"2c8ea6eb-fa7d-47e8-92f0-27b5858ae3f0"], -Cell[171687, 3237, 7193, 167, 567, "Input",ExpressionUUID->"42e3cd6c-7142-4593-924a-642228db11d2"], -Cell[178883, 3406, 6633, 157, 567, "Input",ExpressionUUID->"3e604bd8-121f-4823-845b-8af9015f2e0b"] +Cell[8207, 179, 408, 8, 48, "Title",ExpressionUUID->"634fe91f-27b4-4e3f-a2ab-11a4d248e7fd"], +Cell[8618, 189, 2290, 53, 275, "Input",ExpressionUUID->"f6c93c67-d27e-41b6-bdde-6f032fb810cd"], +Cell[10911, 244, 3262, 86, 275, "Input",ExpressionUUID->"a30bf937-6481-47ee-bb9e-be8b63cba8e1"], +Cell[14176, 332, 2717, 70, 275, "Input",ExpressionUUID->"c7a81d49-344f-4e62-a20b-5d1c78342f7c"], +Cell[16896, 404, 2903, 64, 297, "Input",ExpressionUUID->"a1df8796-c264-4486-93a4-7068200bf83e"], +Cell[19802, 470, 5841, 124, 382, "Input",ExpressionUUID->"9e5fc67d-eedb-4d6c-92ce-f7e1bae8e4b6"], +Cell[25646, 596, 10433, 233, 429, "Input",ExpressionUUID->"305f1770-a098-48b5-a75d-b4d53949ef1a"], +Cell[36082, 831, 11703, 195, 340, "Input",ExpressionUUID->"4ddea111-4d1b-4fab-bb2e-2bf18b5511c8"], +Cell[47788, 1028, 11838, 198, 319, "Input",ExpressionUUID->"231c024d-75c6-45bd-a348-b4411df7ad47"], +Cell[59629, 1228, 12296, 212, 384, "Input",ExpressionUUID->"6b00b4cf-8c90-4a79-8772-4318b9207225"], +Cell[71928, 1442, 11679, 199, 340, "Input",ExpressionUUID->"2d25915a-29df-4bc1-87fb-88bf40588e9c"], +Cell[83610, 1643, 11520, 193, 275, "Input",ExpressionUUID->"8a71ceb0-ae72-491a-a009-dd65a1a09814"], +Cell[95133, 1838, 11997, 204, 388, "Input",ExpressionUUID->"883d455b-d605-47ff-8abc-4fc42cf1f167"], +Cell[107133, 2044, 11644, 192, 319, "Input",ExpressionUUID->"a4b8d789-2193-4eb4-89e8-f131c17e84af"], +Cell[118780, 2238, 12248, 208, 319, "Input",ExpressionUUID->"ec6248e6-c8a6-47c2-b31f-5eddd1d42a35"], +Cell[131031, 2448, 16513, 297, 406, "Input",ExpressionUUID->"cb2b4b25-a328-4451-b1a7-53449ff8db62"], +Cell[147547, 2747, 35088, 736, 2258, "Input",ExpressionUUID->"30cfbd3e-57bb-4e33-99e1-c83444da6e3e"] }, Closed]], Cell[CellGroupData[{ -Cell[185553, 3568, 424, 8, 48, "Title",ExpressionUUID->"000ed3dd-e640-4394-bfdd-112e054fe39e"], -Cell[185980, 3578, 16119, 289, 547, "Input",ExpressionUUID->"240e2dfc-5e90-4b05-a228-e4214db5aa73"], -Cell[202102, 3869, 14782, 263, 572, "Input",ExpressionUUID->"537c0d96-762a-44d8-9b3b-ae7cd65b0ad8"] +Cell[182672, 3488, 358, 7, 48, "Title",ExpressionUUID->"2c8ea6eb-fa7d-47e8-92f0-27b5858ae3f0"], +Cell[183033, 3497, 7193, 167, 516, "Input",ExpressionUUID->"42e3cd6c-7142-4593-924a-642228db11d2"], +Cell[190229, 3666, 6633, 157, 516, "Input",ExpressionUUID->"3e604bd8-121f-4823-845b-8af9015f2e0b"] }, Closed]], Cell[CellGroupData[{ -Cell[216921, 4137, 462, 9, 48, "Title",ExpressionUUID->"9b65060d-851c-4e01-9b60-18f3c42fd7f6"], -Cell[217386, 4148, 23816, 427, 834, "Input",ExpressionUUID->"faf42c91-d222-47ba-a1cf-c70438e66ed9"], -Cell[241205, 4577, 24229, 435, 883, "Input",ExpressionUUID->"cd8261cd-edb7-439b-80ea-07f7f0f661f2"] +Cell[196899, 3828, 424, 8, 48, "Title",ExpressionUUID->"000ed3dd-e640-4394-bfdd-112e054fe39e"], +Cell[197326, 3838, 16119, 289, 498, "Input",ExpressionUUID->"240e2dfc-5e90-4b05-a228-e4214db5aa73"], +Cell[213448, 4129, 14782, 263, 520, "Input",ExpressionUUID->"537c0d96-762a-44d8-9b3b-ae7cd65b0ad8"] }, Closed]], Cell[CellGroupData[{ -Cell[265471, 5017, 510, 9, 48, "Title",ExpressionUUID->"81e5be89-ffaf-473a-8cbb-55c594f704e9"], -Cell[265984, 5028, 10924, 193, 476, "Input",ExpressionUUID->"eebfa9bb-9b2c-44e6-9326-456220a27d55"], -Cell[276911, 5223, 31869, 641, 1155, "Input",ExpressionUUID->"d13bd5d8-2632-4dc0-b0b1-630524e24a38"], -Cell[308783, 5866, 17547, 351, 807, "Input",ExpressionUUID->"92528685-883e-4c0c-bac2-bf106210e42b"], -Cell[326333, 6219, 15720, 310, 783, "Input",ExpressionUUID->"f3f61900-aa02-4fd1-9e7e-e8d496ab43f7"], -Cell[342056, 6531, 15016, 298, 738, "Input",ExpressionUUID->"a7efa093-4b6e-496e-9dcb-6d6052ee3445"], -Cell[357075, 6831, 8797, 216, 738, "Input",ExpressionUUID->"050d5074-a82f-46cd-af46-1b1b25e99315"], -Cell[365875, 7049, 16719, 337, 955, "Input",ExpressionUUID->"d6589c3c-8957-41cb-b657-352eb72af4ed"], -Cell[382597, 7388, 10341, 186, 520, "Input",ExpressionUUID->"6009f6be-153c-4a23-9e78-8febfb6f128a"], -Cell[392941, 7576, 22510, 468, 1294, "Input",ExpressionUUID->"8c71c553-e0e9-4531-9417-f427517894a6"], -Cell[415454, 8046, 25638, 531, 1439, "Input",ExpressionUUID->"c001454f-a821-4609-9c44-fc644598fd8e"] -}, Open ]], -Cell[CellGroupData[{ -Cell[441129, 8582, 513, 9, 84, "Title",ExpressionUUID->"75d6083f-b722-498a-b9fa-576327a19efc"], -Cell[441645, 8593, 15363, 235, 751, "Input",ExpressionUUID->"c0075b7e-c880-4998-8fed-6d7994aad149"], -Cell[457011, 8830, 2877, 69, 751, "Input",ExpressionUUID->"b650297d-45e5-44b0-83f7-ea7a549e74e8"], -Cell[459891, 8901, 17437, 315, 1716, "Input",ExpressionUUID->"01b172e6-150d-47a2-93d8-0c226f061852"], -Cell[477331, 9218, 19665, 378, 2270, "Input",ExpressionUUID->"8eab3c39-2044-482c-9bc9-f59721338bd9"], -Cell[496999, 9598, 21722, 421, 2362, "Input",ExpressionUUID->"e7f7c189-2377-47aa-8f37-8943a95caef1"] +Cell[228267, 4397, 462, 9, 48, "Title",ExpressionUUID->"9b65060d-851c-4e01-9b60-18f3c42fd7f6"], +Cell[228732, 4408, 23816, 427, 759, "Input",ExpressionUUID->"faf42c91-d222-47ba-a1cf-c70438e66ed9"], +Cell[252551, 4837, 24229, 435, 803, "Input",ExpressionUUID->"cd8261cd-edb7-439b-80ea-07f7f0f661f2"] }, Closed]], Cell[CellGroupData[{ -Cell[518758, 10024, 504, 9, 52, "Title",ExpressionUUID->"10d566a6-4644-4e65-8900-e5ebea810780"], -Cell[519265, 10035, 25323, 468, 1447, "Input",ExpressionUUID->"beb700cb-b16d-4bc9-a775-f33065f66984"], -Cell[544591, 10505, 32931, 717, 3138, "Input",ExpressionUUID->"78a6cb02-1e69-4815-87fd-0b13c84611e1"] +Cell[276817, 5277, 510, 9, 48, "Title",ExpressionUUID->"81e5be89-ffaf-473a-8cbb-55c594f704e9"], +Cell[277330, 5288, 10924, 193, 476, "Input",ExpressionUUID->"eebfa9bb-9b2c-44e6-9326-456220a27d55"], +Cell[288257, 5483, 31869, 641, 1155, "Input",ExpressionUUID->"d13bd5d8-2632-4dc0-b0b1-630524e24a38"], +Cell[320129, 6126, 17547, 351, 734, "Input",ExpressionUUID->"92528685-883e-4c0c-bac2-bf106210e42b"], +Cell[337679, 6479, 15720, 310, 712, "Input",ExpressionUUID->"f3f61900-aa02-4fd1-9e7e-e8d496ab43f7"], +Cell[353402, 6791, 15016, 298, 671, "Input",ExpressionUUID->"a7efa093-4b6e-496e-9dcb-6d6052ee3445"], +Cell[368421, 7091, 8797, 216, 671, "Input",ExpressionUUID->"050d5074-a82f-46cd-af46-1b1b25e99315"], +Cell[377221, 7309, 16705, 337, 869, "Input",ExpressionUUID->"d6589c3c-8957-41cb-b657-352eb72af4ed"], +Cell[393929, 7648, 10341, 186, 473, "Input",ExpressionUUID->"6009f6be-153c-4a23-9e78-8febfb6f128a"], +Cell[404273, 7836, 22510, 468, 1177, "Input",ExpressionUUID->"8c71c553-e0e9-4531-9417-f427517894a6"], +Cell[426786, 8306, 25638, 531, 1309, "Input",ExpressionUUID->"c001454f-a821-4609-9c44-fc644598fd8e"] +}, Closed]], +Cell[CellGroupData[{ +Cell[452461, 8842, 513, 9, 48, "Title",ExpressionUUID->"75d6083f-b722-498a-b9fa-576327a19efc"], +Cell[452977, 8853, 15363, 235, 385, "Input",ExpressionUUID->"c0075b7e-c880-4998-8fed-6d7994aad149"], +Cell[468343, 9090, 2877, 69, 385, "Input",ExpressionUUID->"b650297d-45e5-44b0-83f7-ea7a549e74e8"], +Cell[471223, 9161, 17437, 315, 762, "Input",ExpressionUUID->"01b172e6-150d-47a2-93d8-0c226f061852"], +Cell[488663, 9478, 19665, 378, 956, "Input",ExpressionUUID->"8eab3c39-2044-482c-9bc9-f59721338bd9"], +Cell[508331, 9858, 21722, 421, 1002, "Input",ExpressionUUID->"e7f7c189-2377-47aa-8f37-8943a95caef1"] +}, Closed]], +Cell[CellGroupData[{ +Cell[530090, 10284, 504, 9, 48, "Title",ExpressionUUID->"10d566a6-4644-4e65-8900-e5ebea810780"], +Cell[530597, 10295, 25323, 468, 1067, "Input",ExpressionUUID->"beb700cb-b16d-4bc9-a775-f33065f66984"], +Cell[555923, 10765, 32931, 717, 2101, "Input",ExpressionUUID->"78a6cb02-1e69-4815-87fd-0b13c84611e1"] }, Closed]] } ]