(*********************************************************************** 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[ 21506, 725]*) (*NotebookOutlinePosition[ 22147, 748]*) (* CellTagsIndexPosition[ 22103, 744]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{ Cell["\<\ Correlation \ \>", "Title"], Cell["\<\ Chapter 5 section 1, Leon and Colley\ \>", "Subtitle"], Cell["\<\ To what extent do a few hidden variables determine a set of data? \ \>", "Subsubtitle"], Cell["\<\ You have a list of student results. We take the table from p 188 Table 1. You \ hypothesize that two \"factors\" determine all the marks of all the students. \ But how to make concrete computational sense of this? If it is not exactly \ true, is it in some sense close? You refine the hypothesis: There exist two unit vectors p_1 and p_2, and \ constants sigma_1,sigma_2,sigma_3 and beta_1, etc. so that the scores the \ students got on assignments, exams and finals, (three column vectors) are \ given in a certain form. \ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(scores = {{198, 200, 196}, {160, 165, 165}, {158, 158, 133}, {150, 165, 91}, {175, 182, 151}, {134, 135, 101}, {152, 136, 80}}; MatrixForm[scores]\)], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"198", "200", "196"}, {"160", "165", "165"}, {"158", "158", "133"}, {"150", "165", "91"}, {"175", "182", "151"}, {"134", "135", "101"}, {"152", "136", "80"} }], "\[NoBreak]", ")"}], (MatrixForm[ #]&)]], "Output"] }, Open ]], Cell[BoxData[ \(avg[s_] := \((s /. List \[Rule] Plus)\)/Length[s]\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(xscores = Transpose[ Map[\((# - Table[avg[#], {Length[#]}])\) &, Transpose[scores]]]\)], "Input"], Cell[BoxData[ \({{37, 37, 65}, {\(-1\), 2, 34}, {\(-3\), \(-5\), 2}, {\(-11\), 2, \(-40\)}, {14, 19, 20}, {\(-27\), \(-28\), \(-30\)}, {\(-9\), \(-27\), \(-51\)}}\)], \ "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(MatrixForm[xscores]\)], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"37", "37", "65"}, {\(-1\), "2", "34"}, {\(-3\), \(-5\), "2"}, {\(-11\), "2", \(-40\)}, {"14", "19", "20"}, {\(-27\), \(-28\), \(-30\)}, {\(-9\), \(-27\), \(-51\)} }], "\[NoBreak]", ")"}], (MatrixForm[ #]&)]], "Output"] }, Open ]], Cell["\<\ So this subtracts the averages, and gets the sigmas out of the way. \ Now we want to represent this vector, which gives the variation of each \ student away from the class average in each of the three categories, in the \ form beta_11p_1+beta_12p_2, then beta_21 p_1+beta_22p_2, and finally beta_31 \ p_1+beta_32 p_2. Here, each p_j should be a column vector of length 1. To do this exactly is possible if and only if the RANK of the matrix above is \ two. Recall, row rank=column rank =Dimension[Span[The columns]]. Here, the \ dimension is three, so there will inevitably be some error. All we can do is \ to hope to minimize the error by a correct choice of p's and beta's. This \ raises the question, by what standard shall we compare errors? The \ conventional standard is to look at the sum of the squares of the lengths of \ the error vectors First Column of xscore -(beta_11p_1+beta_12p_2), and the \ same sort of errors for the second and third column. However p is chosen, the choice of the betas is automatic. We must take \ beta_j to be the PROJECTION of the jth column of xscores onto p. So this sets up a problem of constrained minimization, with partial \ derivatives with respect to the p's. What we are going to do is to first see \ how well we can do with one p-vector, and then take a second whack at what \ remains after that, using a second p. It turns out that the algebraic condition corresponding to Lagrange \ multipliers for this constrained minimization problem is satisifed if and \ only if p has the form p=xscores times q, where q is a 3-entry column vector \ with the property that a certain symmetric matrix Z (based on xscores), has Z \ dot q =lambda scalar times q. \ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(z = Transpose[xscores] . xscores\)], "Input"], Cell[BoxData[ \({{2506, 2625, 4354}, {2625, 3276, 4980}, {4354, 4980, 10886}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(\(?Eigenvectors\)\)], "Input"], Cell[BoxData[ \("Eigenvectors[m] gives a list of the eigenvectors of the square matrix \ m."\)], "Print"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(\(?Eigenvalues\)\)], "Input"], Cell[BoxData[ \("Eigenvalues[m] gives a list of the eigenvalues of the square matrix \ m."\)], "Print"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(\(?Eigensystem\)\)], "Input"], Cell[BoxData[ \("Eigensystem[m] gives a list {values, vectors} of the eigenvalues and \ eigenvectors of the square matrix m."\)], "Print"] }, Open ]], Cell[BoxData[ \(Eigensystem[z]\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(es = Eigensystem[z] // N\)], "Input"], Cell[BoxData[ \({{\(\(15348.849064088907`\)\(\[InvisibleSpace]\)\) - 5.684341886080802`*^-14\ \[ImaginaryI], \(\(1081.8566609772515`\)\(\ \[InvisibleSpace]\)\) + 2.7284841053187847`*^-12\ \[ImaginaryI], \ \(\(237.29427493384173`\)\(\[InvisibleSpace]\)\) - 9.094947017729282`*^-13\ \[ImaginaryI]}, \ {{\(\(0.4430214628085294`\)\(\[InvisibleSpace]\)\) - 6.326506527188367`*^-18\ \[ImaginaryI], \(\(0.5088220110483073`\)\ \(\[InvisibleSpace]\)\) - 5.883094265347362`*^-18\ \[ImaginaryI], 1.`}, {\(-0.9345033784776331`\) - 6.1478186410313126`*^-15\ \[ImaginaryI], \(-1.1516698050464125`\) \ + 5.92290892939139`*^-15\ \[ImaginaryI], 1.`}, {\(-47.82721791549761`\) + 1.1197252814209053`*^-12\ \[ImaginaryI], \ \(\(39.676907847190854`\)\(\[InvisibleSpace]\)\) - 9.791552951824088`*^-13\ \[ImaginaryI], 1.`}}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(es = Chop[es]\)], "Input"], Cell[BoxData[ \({{15348.849064088907`, 1081.8566609772515`, 237.29427493384173`}, {{0.4430214628085294`, 0.5088220110483073`, 1.`}, {\(-0.9345033784776331`\), \(-1.1516698050464125`\), 1.`}, {\(-47.82721791549761`\), 39.676907847190854`, 1.`}}}\)], "Output"] }, Open ]], Cell["For the moment, this calculation is rabbit-from hat. ", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(lam1 = es[\([1, 1]\)]\)], "Input"], Cell[BoxData[ \(15348.849064088907`\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(q1 = \(es[\([2]\)]\)[\([1]\)]\)], "Input"], Cell[BoxData[ \({0.4430214628085294`, 0.5088220110483073`, 1.`}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \({z . q1, lam1\ \ q1}\)], "Input"], Cell[BoxData[ \({{6799.869564799981`, 7809.832248066644`, 15348.849064088907`}, {6799.869564799995`, 7809.832248066647`, 15348.849064088907`}}\)], "Output"] }, Open ]], Cell["\<\ And behold, we have hit upon a choice of vector and scalar so that \ z times vector =scalar times vector. Any one of the three given vectors would \ have worked, but we want the one that has the largest scalar so we can \ capture as much of X as possible. \ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(q2 = \(es[\([2]\)]\)[\([2]\)]\)], "Input"], Cell[BoxData[ \({\(-0.9345033784776331`\), \(-1.1516698050464125`\), 1.`}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(lam2 = es[\([1, 2]\)]\)], "Input"], Cell[BoxData[ \(1081.8566609772515`\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \({z . q2, lam2\ q2}\)], "Input"], Cell[BoxData[ \({{\(-1010.9987047117811`\), \(-1245.9416498358341`\), 1081.8566609772515`}, {\(-1010.9987047117729`\), \ \(-1245.941649835834`\), 1081.8566609772515`}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(q1 . q2\)], "Input"], Cell[BoxData[ \(\(-1.3322676295501878`*^-15\)\)], "Output"] }, Open ]], Cell["\<\ OK, as claimed in lecture, q1 and q2 are perpendicular. What is \ going on here is that q1 and q2 point to the different \"faces\" of an \ ellipsoid which is a rotated version of x^2/a^2+y^2/b^2+z^2/c^2=1 and since \ that one has orthogonal vectors (1,0,0), (0,1,0) and (0,0,1) pointing to the \ places on the ellipsoid where the tangent plane is orthogonal to the line \ from the origin through the point of tangency, so will the rotated version. \ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(xscores // MatrixForm\)], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"37", "37", "65"}, {\(-1\), "2", "34"}, {\(-3\), \(-5\), "2"}, {\(-11\), "2", \(-40\)}, {"14", "19", "20"}, {\(-27\), \(-28\), \(-30\)}, {\(-9\), \(-27\), \(-51\)} }], "\[NoBreak]", ")"}], (MatrixForm[ #]&)]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(xscores . q1\)], "Input"], Cell[BoxData[ \({100.21820853270296`, 34.57462255928809`, \(-1.873174443667125`\), \(-43.85559206879721`\), 35.86991868923725`, \(-56.208595805182895`\), \ \(-68.72538746358106`\)}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(p1 = %/Sqrt[% . %]\)], "Input"], Cell[BoxData[ \({0.6705824468565135`, 0.23134653207637512`, \(-0.012533829133589988`\), \ \(-0.2934475747312778`\), 0.24001364817176654`, \(-0.37610428545136665`\), \ \(-0.45985693778842057`\)}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(p2 = \((xscores . q2)\); p2 = p2/Sqrt[p2 . p2]\)], "Input"], Cell[BoxData[ \({\(-0.20716269977799695`\), 0.5546220720057171`, 0.17951674213948882`, \(-0.5442989343755994`\), \(-0.25435175395606063`\ \), 0.467041174779516`, \(-0.19536660081506485`\)}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(\(?Projection\)\)], "Input"], Cell[BoxData[ \(Information::"notfound" \(\(:\)\(\ \)\) "Symbol \!\(\"Projection\"\) not found."\)], "Message"] }, Open ]], Cell[BoxData[ \(scalarprojn[u_, p_] := \((u . p)\)/Sqrt[\((p . p)\)]\)], "Input"], Cell[CellGroupData[{ Cell[BoxData[ \(xassignments = \(Transpose[xscores]\)[\([1]\)]\)], "Input"], Cell[BoxData[ \({37, \(-1\), \(-3\), \(-11\), 14, \(-27\), \(-9\)}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(xexams = \(Transpose[xscores]\)[\([2]\)]\)], "Input"], Cell[BoxData[ \({37, 2, \(-5\), 2, 19, \(-28\), \(-27\)}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(xfinal = \(Transpose[xscores]\)[\([3]\)]\)], "Input"], Cell[BoxData[ \({65, 34, 2, \(-40\), 20, \(-30\), \(-51\)}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(beta1 = scalarprojn[xassignments, p1]\)], "Input"], Cell[BoxData[ \(45.499448032746876`\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(beta2 = scalarprojn[xexams, p1]\)], "Input"], Cell[BoxData[ \(52.25733422223834`\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(beta3 = scalarprojn[xfinal, p1]\)], "Input"], Cell[BoxData[ \(102.70258182143986`\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(error1 = xscores - Transpose[{beta1\ p1, beta2\ p1, beta3\ p1}]\)], "Input"], Cell[BoxData[ \({{6.48886880757982`, 1.957148951052794`, \(-3.870548616302429`\)}, {\(-11.526139513765239`\ \), \(-10.089553047870918`\), 10.24011386031972`}, {\(-2.4297176926848936`\), \ \(-4.34501550188156`\), 3.2872566121284725`}, {2.3517026768213807`, 17.334787989437647`, \(-9.862176445857852`\)}, {3.0795114878587153`, 6.457526569589271`, \(-4.650021339623134`\)}, \ {\(-9.887462609212147`\), \(-8.3457926527518`\), 8.626881149963161`}, {11.923236843402353`, \(-2.96910230757544`\), \ \(-3.771505220627958`\)}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(MatrixForm[error1]\)], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"6.48886880757982`", "1.957148951052794`", \(-3.870548616302429`\)}, {\(-11.526139513765239`\), \(-10.089553047870918`\), "10.24011386031972`"}, {\(-2.4297176926848936`\), \(-4.34501550188156`\), "3.2872566121284725`"}, {"2.3517026768213807`", "17.334787989437647`", \(-9.862176445857852`\)}, {"3.0795114878587153`", "6.457526569589271`", \(-4.650021339623134`\)}, {\(-9.887462609212147`\), \(-8.3457926527518`\), "8.626881149963161`"}, { "11.923236843402353`", \(-2.96910230757544`\), \ \(-3.771505220627958`\)} }], "\[NoBreak]", ")"}], (MatrixForm[ #]&)]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(MatrixForm[Transpose[{p1, p2}]]\)], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"0.6705824468565135`", \(-0.20716269977799695`\)}, {"0.23134653207637512`", "0.5546220720057171`"}, {\(-0.012533829133589988`\), "0.17951674213948882`"}, {\(-0.2934475747312778`\), \(-0.5442989343755994`\)}, {"0.24001364817176654`", \(-0.25435175395606063`\)}, {\(-0.37610428545136665`\), "0.467041174779516`"}, {\(-0.45985693778842057`\), \(-0.19536660081506485`\)} }], "\[NoBreak]", ")"}], (MatrixForm[ #]&)]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(p1 . p2\)], "Input"], Cell[BoxData[ \(\(-6.38378239159465`*^-16\)\)], "Output"] }, Open ]], Cell["\<\ Now that's interesting. Apart from numerical error, it seems that \ not only are q1 and q2 orthogonal, but the resulting p1 and p2 are \ orthogonal. There's a very simple explanation of this. Suppose q1 and q2 are \ orthogonal. Let X=xscores. Recall that Z=Z^TX, and p1=X times q1, p2=X times \ q2. Thus p1 dot p2=p1^T times p2=(X q1)^T(X q2)= = (q1^TX^T)(X q2) = q1^T (X^T X) q2 = q1^T Z q2 =(q1^T (lam2 q2) =(pull out the scalar)=lam2*(q1^T q2) =lam2*(q1 dot q2)=lam2* zero because q1 dot q2 was given equal to zero. \ \ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(gamma1 = scalarprojn[xassignments, p2]\)], "Input"], Cell[BoxData[ \(\(-17.183640779174677`\)\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(gamma2 = scalarprojn[xexams, p2]\)], "Input"], Cell[BoxData[ \(\(-21.176895324207948`\)\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(gamma3 = scalarprojn[xfinal, p2]\)], "Input"], Cell[BoxData[ \(18.38799214098915`\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \({{beta1, beta2, beta3}, {gamma1, gamma2, gamma3}}\)], "Input"], Cell[BoxData[ \({{45.499448032746876`, 52.25733422223834`, 102.70258182143986`}, {\(-17.183640779174677`\), \ \(-21.176895324207948`\), 18.38799214098915`}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(error2 = error1 - Transpose[{gamma1\ p2, gamma2\ p2, gamma3\ p2}]\)], "Input"], Cell[BoxData[ \({{2.9290593917507106`, \(-2.4299138572261647`\), \ \(-0.06124252087852611`\)}, {\(-1.9957130602174438`\), 1.6556205154894759`, 0.04172755905947412`}, {0.6550335180878117`, \(-0.543408244650776`\), \ \(-0.013695831508423684`\)}, {\(-7.00133468797649`\), 5.808226431087647`, 0.14638808178943918`}, {\(-1.2911776836752527`\), 1.0711461005330802`, 0.02699671316771557`}, {\(-1.8619948327172082`\), 1.5446894176491188`, 0.03893169859908063`}, {8.566127354747865`, \(-7.106360362882388`\), \ \(-0.17910570022878058`\)}}\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(MatrixForm[error1]\)], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"6.48886880757982`", "1.957148951052794`", \(-3.870548616302429`\)}, {\(-11.526139513765239`\), \(-10.089553047870918`\), "10.24011386031972`"}, {\(-2.4297176926848936`\), \(-4.34501550188156`\), "3.2872566121284725`"}, {"2.3517026768213807`", "17.334787989437647`", \(-9.862176445857852`\)}, {"3.0795114878587153`", "6.457526569589271`", \(-4.650021339623134`\)}, {\(-9.887462609212147`\), \(-8.3457926527518`\), "8.626881149963161`"}, { "11.923236843402353`", \(-2.96910230757544`\), \ \(-3.771505220627958`\)} }], "\[NoBreak]", ")"}], (MatrixForm[ #]&)]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(MatrixForm[error2]\)], "Input"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ { "2.9290593917507106`", \(-2.4299138572261647`\), \ \(-0.06124252087852611`\)}, {\(-1.9957130602174438`\), "1.6556205154894759`", "0.04172755905947412`"}, { "0.6550335180878117`", \(-0.543408244650776`\), \ \(-0.013695831508423684`\)}, {\(-7.00133468797649`\), "5.808226431087647`", "0.14638808178943918`"}, {\(-1.2911776836752527`\), "1.0711461005330802`", "0.02699671316771557`"}, {\(-1.8619948327172082`\), "1.5446894176491188`", "0.03893169859908063`"}, { "8.566127354747865`", \(-7.106360362882388`\), \ \(-0.17910570022878058`\)} }], "\[NoBreak]", ")"}], (MatrixForm[ #]&)]], "Output"] }, Open ]], Cell["\<\ We can calculate the sum of the squares of the lengths of these \ error vectors conveniently in this computer algebra system by evaluating the \ trace (sum of the diagonal entries) of the product X^TX for xscores, then \ error1, and then error2. \ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Tr[Transpose[xscores] . xscores]\)], "Input"], Cell[BoxData[ \(16668\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Tr[Transpose[error1] . error1]\)], "Input"], Cell[BoxData[ \(1319.150935911098`\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Tr[Transpose[error2] . error2]\)], "Input"], Cell[BoxData[ \(237.29427493384378`\)], "Output"] }, Open ]], Cell["\<\ The simplest explanation of the scores would be that the difficulty \ of the task determines the scores, and that all the students are the same. \ This is the hypothesis that X is identically zero. It is wrong of course, and \ the aggregate square error of this hypothesis is 16668. The next simplest account is that for each student there is a single hidden \ variable that interacts with the exam difficulty to produce a score, so that \ deviations from the average are just scalar multiples of this hidden variable \ vector [a column vector with one entry for each student.] Making the best \ choice of p and beta's gives an aggregate square error of 1319 for this \ hypothesis. If we invoke a second hidden variable, we would get a more accurate \ approximation. But keep in mind that the more variables you call on, the \ closer the approximation in any case. An explanation that posits 3 hidden \ variables would give a zero error but it would also have zero explanatory \ power in this situation. The noteworthy thing is that the first \"hidden \ variable\" has captured about 90% of the error as compared to the \"all \ students are the same\" hypothesis. \ \>", "Text"] }, Open ]] }, FrontEndVersion->"4.0 for X", ScreenRectangle->{{0, 1280}, {0, 1024}}, WindowSize->{520, 600}, WindowMargins->{{150, Automatic}, {Automatic, 52}} ] (*********************************************************************** 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, 37, 3, 174, "Title"], Cell[1779, 56, 65, 3, 93, "Subtitle"], Cell[1847, 61, 98, 3, 71, "Subsubtitle"], Cell[1948, 66, 551, 11, 158, "Text"], Cell[CellGroupData[{ Cell[2524, 81, 195, 3, 75, "Input"], Cell[2722, 86, 384, 11, 148, "Output"] }, Open ]], Cell[3121, 100, 82, 1, 27, "Input"], Cell[CellGroupData[{ Cell[3228, 105, 143, 4, 59, "Input"], Cell[3374, 111, 200, 4, 43, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[3611, 120, 52, 1, 27, "Input"], Cell[3666, 123, 391, 11, 148, "Output"] }, Open ]], Cell[4072, 137, 1735, 32, 518, "Text"], Cell[CellGroupData[{ Cell[5832, 173, 65, 1, 27, "Input"], Cell[5900, 176, 104, 2, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[6041, 183, 50, 1, 27, "Input"], Cell[6094, 186, 109, 2, 39, "Print"] }, Open ]], Cell[CellGroupData[{ Cell[6240, 193, 49, 1, 27, "Input"], Cell[6292, 196, 107, 2, 39, "Print"] }, Open ]], Cell[CellGroupData[{ Cell[6436, 203, 49, 1, 27, "Input"], Cell[6488, 206, 142, 2, 39, "Print"] }, Open ]], Cell[6645, 211, 47, 1, 27, "Input"], Cell[CellGroupData[{ Cell[6717, 216, 57, 1, 27, "Input"], Cell[6777, 219, 926, 16, 137, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[7740, 240, 46, 1, 27, "Input"], Cell[7789, 243, 304, 5, 43, "Output"] }, Open ]], Cell[8108, 251, 69, 0, 32, "Text"], Cell[CellGroupData[{ Cell[8202, 255, 54, 1, 27, "Input"], Cell[8259, 258, 53, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[8349, 264, 62, 1, 27, "Input"], Cell[8414, 267, 81, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[8532, 273, 53, 1, 27, "Input"], Cell[8588, 276, 178, 3, 27, "Output"] }, Open ]], Cell[8781, 282, 281, 6, 86, "Text"], Cell[CellGroupData[{ Cell[9087, 292, 62, 1, 27, "Input"], Cell[9152, 295, 91, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[9280, 301, 54, 1, 27, "Input"], Cell[9337, 304, 53, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[9427, 310, 51, 1, 27, "Input"], Cell[9481, 313, 194, 3, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[9712, 321, 40, 1, 27, "Input"], Cell[9755, 324, 63, 1, 29, "Output"] }, Open ]], Cell[9833, 328, 473, 8, 122, "Text"], Cell[CellGroupData[{ Cell[10331, 340, 54, 1, 27, "Input"], Cell[10388, 343, 391, 11, 148, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[10816, 359, 45, 1, 27, "Input"], Cell[10864, 362, 212, 4, 43, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[11113, 371, 51, 1, 27, "Input"], Cell[11167, 374, 225, 5, 43, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[11429, 384, 79, 1, 27, "Input"], Cell[11511, 387, 213, 3, 43, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[11761, 395, 48, 1, 27, "Input"], Cell[11812, 398, 122, 2, 23, "Message"] }, Open ]], Cell[11949, 403, 85, 1, 27, "Input"], Cell[CellGroupData[{ Cell[12059, 408, 79, 1, 27, "Input"], Cell[12141, 411, 84, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[12262, 417, 73, 1, 27, "Input"], Cell[12338, 420, 74, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[12449, 426, 73, 1, 27, "Input"], Cell[12525, 429, 76, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[12638, 435, 70, 1, 27, "Input"], Cell[12711, 438, 53, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[12801, 444, 64, 1, 27, "Input"], Cell[12868, 447, 52, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[12957, 453, 64, 1, 27, "Input"], Cell[13024, 456, 53, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[13114, 462, 103, 2, 27, "Input"], Cell[13220, 466, 579, 10, 107, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[13836, 481, 51, 1, 27, "Input"], Cell[13890, 484, 844, 19, 148, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[14771, 508, 64, 1, 27, "Input"], Cell[14838, 511, 594, 11, 148, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[15469, 527, 40, 1, 27, "Input"], Cell[15512, 530, 61, 1, 29, "Output"] }, Open ]], Cell[15588, 534, 547, 18, 284, "Text"], Cell[CellGroupData[{ Cell[16160, 556, 71, 1, 27, "Input"], Cell[16234, 559, 58, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[16329, 565, 65, 1, 27, "Input"], Cell[16397, 568, 58, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[16492, 574, 65, 1, 27, "Input"], Cell[16560, 577, 52, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[16649, 583, 82, 1, 27, "Input"], Cell[16734, 586, 183, 3, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[16954, 594, 105, 2, 27, "Input"], Cell[17062, 598, 601, 10, 123, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[17700, 613, 51, 1, 27, "Input"], Cell[17754, 616, 844, 19, 148, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[18635, 640, 51, 1, 27, "Input"], Cell[18689, 643, 865, 21, 148, "Output"] }, Open ]], Cell[19569, 667, 270, 5, 68, "Text"], Cell[CellGroupData[{ Cell[19864, 676, 65, 1, 27, "Input"], Cell[19932, 679, 39, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[20008, 685, 63, 1, 27, "Input"], Cell[20074, 688, 52, 1, 27, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[20163, 694, 63, 1, 27, "Input"], Cell[20229, 697, 53, 1, 27, "Output"] }, Open ]], Cell[20297, 701, 1193, 21, 338, "Text"] }, Open ]] } ] *) (*********************************************************************** End of Mathematica Notebook file. ***********************************************************************)