(*********************************************************************** Mathematica-Compatible Notebook This notebook can be used on any computer system with Mathematica 3.0, MathReader 3.0, or any compatible application. The data for the notebook starts with the line of 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[ 65434, 2309]*) (*NotebookOutlinePosition[ 66488, 2345]*) (* CellTagsIndexPosition[ 66444, 2341]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{Cell[TextData[StyleBox[ "The Solution of Linear Equations with Integer Coefficients Using Modular \ Arithmetic and Cramer's Rule", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Times", FontSize->24]], "Title", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Times", FontSize->14], Cell[TextData[StyleBox[ "by\nKenneth M. Levasseur\nDepartment of Mathematical Sciences\nUniversity of \ Massachusetts, Lowell\nLowell, MA 01854\nlevasseuk@woods.uml.edu", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Times", FontSize->18, FontWeight->"Plain"]], "Subtitle", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Times", FontSize->12], Cell[TextData[ "Published in\nMathematica in Education and Research\nVol.4 No.1\nCopyright \ 1995 TELOS/Springer-Verlag"], "Subsubtitle", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["Introduction"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ StyleBox[ "The solution to a system of n linear equation in n unknowns with integer \ coefficients is generally rational and not necessarily integer. For this \ reason, it would not appear that the solutions to corresponding modular \ systems would be related. However, by a clever application of Cramer's Rule, \ the numerators and denominators of the solution to these systems can be \ obtained. The method also can make use of the Chinese Remainder Theorem for \ large systems. This method was published in Lipson [Lipson, 1981], and with \ ", Evaluatable->False, AspectRatioFixed->True], StyleBox["Mathematica", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[", it becomes feasible. With ", Evaluatable->False, AspectRatioFixed->True], StyleBox["Mathematica", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[ "'s capabilities, this method is not really efficient for ordinary systems, \ but it's a nice way to combine topics from linear algebra and number theory. \ For a truly huge system being solved on a computer with parallel processing \ capabilities the method outlined here might speed up the solution. This \ would be done by replacing a large modulus with many relatively small moduli \ and then combining the results using the Chinese Remainder Theorem. ", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "The Evaluation of Integer Expressions Using Modular Arithmetic"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ StyleBox[ "Let U be an \"arithmetic expression,\" by which is meant a finite number \ of integer calculations (additions, subtractions, multiplications and \ divisions) on a set of integers that yields a result upon evaluation that is \ one or more integer values e(U) = u. We use e here to denote the evaluation \ function. For example U could be the expression for the binomial coefficient \ \"four choose two,\" $", Evaluatable->False, AspectRatioFixed->True], StyleBox["{{4\\,3}\\over {2\\,1}}$ ", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier"], StyleBox["and u = e(U) = 6.", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "If m is a positive integer such that no divisor of U shares a common factor \ with m, we let U mod m = R be the corresponding modulo m expression. with \ result e(R) = r, the mod m result."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "The homomorphism properties of the mod function assure us that u and r \ differ by a multiple of m; that is, $u = r + ms$ for some integer s. When \ u and r represent more than one value, each of the corresponding values are \ related in this way."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "If u is nonnegative and m is sufficiently large, $m > u$, then u is equal \ to r. If the nonnegativity restriction on u is lifted and m is doubled, $m \ > 2|u|$, then u can still be determined from r. \tIf $r < {m\\over 2}$ \ then u = r, and if $r \[DoubleDagger] {m\\over 2}$ then $u = r - m$ (see \ Figure 1).\t\t\n"], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .8 MathPictureStart %% Graphics /Courier findfont 10 scalefont setfont % Scaling calculations 0.371429 0.0142857 0.711111 0.0444444 [ [ 0 0 0 0 ] [ 1 .8 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash 0 g p P 0 0 m 1 0 L 1 .8 L 0 .8 L closepath clip newpath p .004 w .02857 .71111 m 0 0 rlineto 1 .71111 m .02857 .71111 L s s .08571 .72 m .08571 .71111 L s .37143 .72 m .37143 .71111 L s .65714 .72 m .65714 .71111 L s .94286 .72 m .94286 .71111 L s [(-m/2)] .08571 .74667 0 0 Mshowa [(0)] .37143 .74667 0 0 Mshowa [(m/2)] .65714 .74667 0 0 Mshowa [(m)] .94286 .74667 0 0 Mshowa p p .37143 .64 m .11366 .64 L s .11366 .62152 m .08571 .64 L .11366 .65848 L F P p P P p p .37143 .64 m .6292 .64 L s .6292 .65848 m .65714 .64 L .6292 .62152 L F P p P P [(u)] .37143 .61333 0 0 Mshowa p p .65714 .56889 m .39938 .56889 L s .39938 .55041 m .37143 .56889 L .39938 .58737 L F P p P P p p .65714 .56889 m .91491 .56889 L s .91491 .58737 m .94286 .56889 L .91491 .55041 L F P p P P [(r)] .65714 .54222 0 0 Mshowa [(u = r + ms)] .37143 .44444 0 0 Mshowa [(r < m/2 => u = r)] .60286 .35556 0 0 Mshowa [( )] .65714 .35556 0 0 Mshowa [(r \\263 m/2 => u = r - m)] .65714 .25778 0 0 Mshowa p /Times findfont 14 scalefont setfont [(Figure 1)] .51429 .13333 0 0 Mshowa P P % End of Graphics MathPictureEnd\ \>"], "Graphics", Evaluatable->False, AspectRatioFixed->True, ImageSize->{247, 197}, ImageMargins->{{34, Inherited}, {Inherited, Inherited}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHggYjN[Vi^OShn03ooeGooj[ooonICXf=SLcII03=Voc=Vc3=V VC=VIS=V@001?l00?ll0005o`3o0?l00P000ol000030003o`0003`000Go0?l0o`0=00002P04o`8000Go0?l0 o`020003o`0000@000?o0000>0001?l00?ll0005o`3o0?l00P000ol000040003o`0003/000Go0?l0 o`0=00003`03o`030?l000<000?o000010000ol0000g0004o`00oc/00ol00`3o00030003o`0000@0 00?o0000>@03o`030?l000d0000H0005o`000?l00P000ol0000g0004o`00od@000Go0000o`020003 o`0004`0000I0004o`0000;o>`02odH000Co00000_m?0000m`000?L0003g0000m`000?L0003g0000 m`000?L0003g0000\ \>"], ImageRangeCache->{{{0, 246}, {196, 0}} -> {-26.1433, -16.0001, 0.285717, 0.0918377}}], Cell[TextData[{ StyleBox["Mathematica", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox["'s ", Evaluatable->False, AspectRatioFixed->True], StyleBox["Solve", Evaluatable->False, AspectRatioFixed->True, FontWeight->"Bold"], StyleBox[" function automatically makes this adjustment when ", Evaluatable->False, AspectRatioFixed->True], StyleBox["Modulus==m", Evaluatable->False, AspectRatioFixed->True, FontWeight->"Bold"], StyleBox[" is included. Outside of ", Evaluatable->False, AspectRatioFixed->True], StyleBox["Solve", Evaluatable->False, AspectRatioFixed->True, FontWeight->"Bold"], StyleBox[" a fuction such as is ", Evaluatable->False, AspectRatioFixed->True], StyleBox["SignMod", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[" (defined below) can be used. ", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData["SignMod[k_,m_]:=k//Mod[#,m]&//If[2#>m,#-m,#]&;"], "Input", Editable->False, InitializationCell->True, AspectRatioFixed->True], Cell[TextData[ "If u represents more than one value, then the conditions on m would be m > \ max{u} and m > 2max{u}, respectively. "], "Text", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["A Warm-up Example"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "The binomial coefficient \"four choose two\" can be computed modulo seven. \ All of the numbers involved in the calculation are reduced to their mod seven \ remainders and all calculations are done modulo seven. Division by two \ becomes multiplication by the mod seven inverse of two, which is four."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "Print[\"Numerator = \",modnum=Mod[4 3,7]];\nPrint[\"Denominator = \ \",modden=Mod[2 1,7]];\nPrint[\"Result = \",modresult=Mod[modnum \ PowerMod[modden,-1,7],7]];"], "Input", AspectRatioFixed->True, FontFamily->"Courier", FontSize->10], Cell[TextData["Numerator = 5\nDenominator = 2\nResult = 6"], "Print", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "Any modulus less than seven is too small. If five is selected as the \ modulus, the result is one, which is congurent to six modulo five."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "Print[\"Numerator = \",modnum=Mod[4 3,5]];\nPrint[\"Denominator = \ \",modden=Mod[2 1,5]];\nPrint[\"Result = \",modresult=Mod[modnum \ PowerMod[modden,-1,5],5]];"], "Input", AspectRatioFixed->True, FontFamily->"Courier", FontSize->10], Cell[TextData["Numerator = 2\nDenominator = 2\nResult = 1"], "Print", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "It isn't really necessary that the modulus be prime, as long as the it \ doesn't share any common factor with the divisors in the calculation. In \ this example, the modulus can't be even since the only denominator is two."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "Print[\"Numerator = \",modnum=Mod[4 3,27]];\nPrint[\"Denominator = \ \",modden=Mod[2 1,27]];\nPrint[\"Result = \",modresult=Mod[modnum \ PowerMod[modden,-1,27],27]];"], "Input", AspectRatioFixed->True, FontFamily->"Courier", FontSize->10], Cell[TextData["Numerator = 12\nDenominator = 2\nResult = 6"], "Print", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "Smaller moduli, even if they alone do not give correct results, provide \ important information that can be combined using the Chinese Remainder \ Theorem. We will consider this idea later. \t"], "Text", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Cramer's Rule"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "Cramer's Rule is named after Gabriel Cramer (1704-1752) but this result is \ thought to have been first derived by Colin Maclaurin (1698-1746). It states \ that if Ax = b is a system of n equations in n unknowns over a field where \n\ \n\t\t\t\td= Det[A],\t\tC[i] = A with column i replaced with b, and\t\t\tc[i] \ = Det[C[i]] \n\t\t\t\t\n\t\t\tthen $x[i]={{c[i]}\\over d}$ or \ equivalently c[i] = d x[i]\n\t"], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "Cramer's Rule applies to any field, including the field of integers modulo p \ (p a prime)."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "How will we use Cramer's Rule? Our plan will be to compute the values of d \ and the c[i]'s, which are integer values, using modular arithmetic. Only at \ the end will we formally write the solution as a quotient as prescribed. We \ accomplish this here using Mathematica's Solve function by adding the \ equation Modulus==m. We compute the determinant separately using the Det \ function with the option Modulus->m. The determinant could be obtained as a \ byproduct of Gaussian elimination."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["Example 1."], "Subsection", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ StyleBox["Solve: 134 x", Evaluatable->False, AspectRatioFixed->True], StyleBox["1", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[" + 53 x", Evaluatable->False, AspectRatioFixed->True], StyleBox["2", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[" = -90\n -67 x", Evaluatable->False, AspectRatioFixed->True], StyleBox["1", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[" + 88 x", Evaluatable->False, AspectRatioFixed->True], StyleBox["2", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[" = 78", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "A1 ={{134,53},{-67, 88}};\nb1 = {-90,78};\nx1 = {x[1],x[2]};\nsystem1 = \ A1.x1==b1;\nThread[system1]//MatrixForm"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ MatrixForm[{134*x[1] + 53*x[2] == -90, -67*x[1] + 88*x[2] == 78}]\ \>", "\<\ 134 x[1] + 53 x[2] == -90 -67 x[1] + 88 x[2] == 78\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[{ StyleBox["Notice the use of ", Evaluatable->False, AspectRatioFixed->True], StyleBox["Thread", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[ " in this situation to display a system of equations. The equation ", Evaluatable->False, AspectRatioFixed->True], StyleBox["system1", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[" is a single vector equation and so its ", Evaluatable->False, AspectRatioFixed->True], StyleBox["MatrixForm", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[" is itself. ", Evaluatable->False, AspectRatioFixed->True], StyleBox["Thread", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[ " will distribute its head of its argument over lists in the argument. \ This allows us to equate coordinates in the vector equation and the resulting \ ", Evaluatable->False, AspectRatioFixed->True], StyleBox["MatrixForm", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[" is more readable. This illustrated by the following example", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["FullForm[{s,t}=={u,v}]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ FullForm[{s, t} == {u, v}]\ \>", "\<\ Equal[List[s, t], List[u, v]]\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Thread[{s,t}=={u,v}]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {s == u, t == v}\ \>", "\<\ {s == u, t == v}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "Returning to the system above, let's look at the solution."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["sol1=x1/.Solve[system1,x1][[1]]\n"], "Input", LineSpacing->{1, 5}, AspectRatioFixed->True], Cell[OutputFormData["\<\ {-12054/15343, 66/229}\ \>", "\<\ 12054 66 {-(-----), ---} 15343 229\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "As we see here the solution is not a pair of integers, but we can view the \ process of solving this system as computing four numbers, two numerators and \ two denominators.\n "], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "A modular solution:\tUsing hindsight, we can pick a large enough prime so \ that one modular solution will give us the solution. We need a prime that is \ twice as large as the largest integer in the rational solution, which appears \ to be 15343.\t "], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["m1=Prime[4000]"], "Input", Editable->False, AspectRatioFixed->True], Cell[OutputFormData["\<\ 37813\ \>", "\<\ 37813\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData["37813 is large enough"], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["modsol1=x1/.First[Solve[{system1,Modulus==m1},x1]]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {778, 2312}\ \>", "\<\ {778, 2312}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["mdet=Det[A1,Modulus->m1]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ 15343\ \>", "\<\ 15343\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData["By Cramer's Rule:"], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["c[1] = SignMod[mdet modsol1[[1]], m1] "], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ -12054\ \>", "\<\ -12054\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["c[2] = SignMod[mdet modsol1[[2]], m1] "], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ 4422\ \>", "\<\ 4422\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["{c[1],c[2]}/mdet"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {-12054/15343, 66/229}\ \>", "\<\ 12054 66 {-(-----), ---} 15343 229\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "Therefore, the modular solution produces the correct rational solution in \ this case."], "Text", Evaluatable->False, AspectRatioFixed->True]}, Open]]}, Open]], Cell[CellGroupData[{Cell[TextData[ "Solution of linear equations with rational coefficients using several \ moduli"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "\tA modular solution to a system of linear equations with integer \ coefficients with large modulus can be obtained using the Chinese Remainder \ Theorem and several relatively small primes instead of using one large prime. \ \n"], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData["Needs[\"NumberTheory`NumberTheoryFunctions`\"]"], "Input", InitializationCell->True, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["?ChineseRemainderTheorem"], "Input", AspectRatioFixed->True], Cell[TextData[ "ChineseRemainderTheorem[list1, list2] gives the minimal\n non-negative \ integer solution of Mod[r, list2] ==\n list1."], "Info", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "The ring of integers modulo a product of primes is not a field, but all \ field operations will have been done by the time the small modular solutions \ are consolidated."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["Example 2."], "Subsection", Evaluatable->False, AspectRatioFixed->True], Cell[TextData["We consider the system "], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "$$ 3\\,x_1 + 4\\,x_2 - x_3 = 8 $$\n\n $$ x_1 + 5\\,x_2 + 2\\,x_3 = 3 \ $$\n\n $$ 2\\,x_1 + 4\\,x_2 + 8\\,x_3 = 11 $$\n\n\\end"], "Special2", Editable->False, Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "Without knowing the solution to this system, we assume that the absolute \ values of all integers involved in the solution are less than 500. If this \ is true, we need only select a product of primes that exceeds 1000. We \ select 7, 11 and 13, whose product is 1001."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "A={{3, 4, -1},{1, 5, 2}, {2, 4, 8}};\nb={8,3,11};\nx2=Array[x,{3}];\n\ mods={7,11,13};\nbigm=Apply[Times,mods];"], "Input", AspectRatioFixed->True], Cell[TextData[{ StyleBox["The function ", Evaluatable->False, AspectRatioFixed->True], StyleBox["ModSol", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[ " computes a list consisting of the mod j determinant of the matrix of \ coefficients followed by the the mod j solution to the system.", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "ModSol[j_]:={Det[A,Modulus->j],\n x2/.Solve[{A.x2==b, \ Modulus==j},x2]}//Flatten"], "Input", InitializationCell->True, AspectRatioFixed->True], Cell[TextData[ "Several modular solutions are put together and the transpose of the list is \ taken so that the different modular values of the determinant are put \ together as are the different modular values for each coordinate of the \ solution."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["data=ModSol/@mods//Transpose"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ {{2, -2, -5}, {2, 3, -1}, {2, -1, 1}, {-1, -3, 6}}\ \>", "\<\ {{2, -2, -5}, {2, 3, -1}, {2, -1, 1}, {-1, -3, 6}}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[{ StyleBox[ "The computation above is where parallel computing capabilies could be made \ use of. The modular systems can all be solved concurrently and so the time \ it takes to generate the value of ", Evaluatable->False, AspectRatioFixed->True], StyleBox["data", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[" would be essentially constant as the length of the list ", Evaluatable->False, AspectRatioFixed->True], StyleBox["mods", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[ " is increased.\n\nWe now know from the first entry of the output above \ that\n det[A] = 2 (mod 7)\n det[A] = -2 (mod 11)\n \ and det[A] = -5 (mod 13).\n\nThe second entry gives information on the value \ of x[1] mod 1001. \n x[1] = 2 (mod 7)\n x[1] = 3 (mod 11)\ \n and x[1] = -1 (mod 13).\nThe two remaining entries of the list give \ similar information for x[2] and x[3]\n\nThe ", Evaluatable->False, AspectRatioFixed->True], StyleBox["ChineseRemainderTheorem", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[ " function can can be applied to obtain the values of det[A], x[1] , x[2] \ and x[3] mod 1001.", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["bigdata=Map[ChineseRemainderTheorem[#,mods]&,data]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {86, 597, 989, 734}\ \>", "\<\ {86, 597, 989, 734}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData["Now we proceed as with a single modulus."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "sol2=Map[SignMod[First[bigdata]#,bigm]&,\n \ Rest[bigdata]]/First[bigdata]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {291/86, -31/86, 61/86}\ \>", "\<\ 291 31 61 {---, -(--), --} 86 86 86\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "We compare our solution against the solution computed over the rationals and \ find that they are equal."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["x2/.Solve[A.x==b,x2]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {291/86, -31/86, 61/86}\ \>", "\<\ 291 31 61 {---, -(--), --} 86 86 86\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]]}, Open]]}, Open]], Cell[CellGroupData[{Cell[TextData["A single function to solve systems"], "Section", Evaluatable->False, AspectRatioFixed->False], Cell[TextData[ "The following function summarizes the steps outlined above."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "ModularLinearSolve::usage = \n \"ModularLinearSolve[A,B,littlemods] \ computes the mod m\n solution of A.x==b for x, where m is the product of\n \ integers in littlemods.\"\nModularLinearSolve[A_,B_,littlemods_]:=Block[\n \ {bigm,data,bigdata,k,ModSol,x=Array[s,{Length[B]}]},\n \ ModSol[j_]:={Det[A,Modulus->j],x/.Solve[{A.x==B,\n \ Modulus==j},x]}//Flatten;\n data=Map[ModSol, littlemods]//Transpose;\n \ bigm=Apply[Times,littlemods];\n \ bigdata=Map[ChineseRemainderTheorem[#,littlemods]&,data];\n \ Map[SignMod[First[bigdata]#,bigm]&,\n Rest[bigdata]]/First[bigdata]]"], "Input", InitializationCell->True, AspectRatioFixed->True], Cell[OutputFormData[ "\<\ \"ModularLinearSolve[A,B,littlemods] computes the mod m\\ solution of A.x==b for x, where m is the product of\\ integers in littlemods.\"\ \>", "\<\ ModularLinearSolve[A,B,littlemods] computes the mod m \\ solution of A.x==b for x, where m is the product of \\ integers in littlemods.\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "ModularLinearSolve[{{2,-1,0},{-1,2,-1},{0,-1,2}},\n {-2, \ 5, 3},\n {13,17,19}]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {SignMod[12604, 4199]/4, SignMod[8420, 4199]/4, SignMod[4216, 4199]/4}\ \>", "\<\ SignMod[12604, 4199] SignMod[8420, 4199] {--------------------, -------------------, 4 4 SignMod[4216, 4199] -------------------} 4\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "One problem occurs is when a modulus is selected that shares a common \ factor greater than one with the determinant of the system in question. When \ this occurs it is possible to salvage some information from the modular \ calculations, but this has not been built into the function above. In the \ example below, the determinant of the system happens to be 47."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["ModularLinearSolve[{{7,-2},{-1,7}},{8,4},{47}]"], "Input", AspectRatioFixed->True], Cell[TextData[ " 1\nPower::infy: Infinite expression - \ encountered.\n 0"], "Message", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "Infinity::indet: \n Indeterminate expression 0 ComplexInfinity \ encountered."], "Message", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "Infinity::indet: \n Indeterminate expression 0 ComplexInfinity \ encountered."], "Message", Evaluatable->False, AspectRatioFixed->True], Cell[OutputFormData["\<\ {Indeterminate, Indeterminate}\ \>", "\<\ {Indeterminate, Indeterminate}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[{ StyleBox[ "A simpler way to overcome this problem is to expand the function so that \ for each value in ", Evaluatable->False, AspectRatioFixed->True], StyleBox["littlemods", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[ " for which the modular determinant is zero, the data is ignored. For a \ reasonably large set of primes, it is highly unlikely that many of the \ determinants would be zero.", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "Least squares approximation by powers of x on the interval [0,1]."], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ StyleBox[ "The least squares approximation of a function on the interval [0,1] with \ the basis {1, x, . . ., x", Evaluatable->False, AspectRatioFixed->True], StyleBox["n-1", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Superscript"}], StyleBox[ "} is notoriously unstable due to the fact that the successive powers of x \ are so close to one another. In general, the best least squares \ approximation to a function f(x) on [a, b] by linear combinations of \ functions g", Evaluatable->False, AspectRatioFixed->True], StyleBox["1", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[", g", Evaluatable->False, AspectRatioFixed->True], StyleBox["2", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[", ..., g", Evaluatable->False, AspectRatioFixed->True], StyleBox["n", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[" is c", Evaluatable->False, AspectRatioFixed->True], StyleBox["1", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox["g", Evaluatable->False, AspectRatioFixed->True], StyleBox["1", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[" + c", Evaluatable->False, AspectRatioFixed->True], StyleBox["2", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox["g", Evaluatable->False, AspectRatioFixed->True], StyleBox["2", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[" + . . . c", Evaluatable->False, AspectRatioFixed->True], StyleBox["n", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox["g", Evaluatable->False, AspectRatioFixed->True], StyleBox["n", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[" where the \"normal equations\"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "$$\\sum_{j = 1}^{n}\\,\\left( \\int_{a}^{b} \\,g_j(t)\\,g_k(t) dt \ \\right)c_j \n =\\int_{a}^{b}\\,f(t)\\,g_k(t) dt $$\n for $1\\le k \ \\le n.$\n\\end"], "Special2", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ StyleBox[ "are satisfied. The matrix of coefficients for this system when on [0, 1] \ with powers of x is the Hilbert matrix.\nFor example, to approximate a \ function with powers of x up to x", Evaluatable->False, AspectRatioFixed->True], StyleBox["9", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Superscript"}], StyleBox[" the matrix is the ten by ten Hilbert matrix, H", Evaluatable->False, AspectRatioFixed->True], StyleBox["10", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[". Since H", Evaluatable->False, AspectRatioFixed->True], StyleBox["10", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Subscript"}], StyleBox[" has such a miniscule determinant (approx 2 x 10", Evaluatable->False, AspectRatioFixed->True], StyleBox["-53", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Superscript"}], StyleBox[ ") that it is impossible to solve the normal equations using floating point \ calculations. We can solve the normal equations over a prime modulus without \ much difficulty.\n We will approximate f(x) = x", Evaluatable->False, AspectRatioFixed->True], StyleBox["10", Evaluatable->False, AspectRatioFixed->True, FontVariations->{"CompatibilityType"->"Superscript"}], StyleBox[" with lesser powers of x using the least-squares criterion.", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData["Needs[\"LinearAlgebra`MatrixManipulation`\"]"], "Input", InitializationCell->True, AspectRatioFixed->True], Cell[TextData[ "H=HilbertMatrix[10,10];\nB=Last[HilbertMatrix[11,10]];"], "Input", AspectRatioFixed->True], Cell[TextData[ "Next we determine the denominators of numbers in each of the normal \ equations to produce a system of integer equations. "], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["d=Map[(LCM@@Range[#,#+10])&,Range[1,10]]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {27720, 27720, 360360, 360360, 360360, 720720, 12252240, 12252240, 232792560, 232792560}\ \>", "\<\ {27720, 27720, 360360, 360360, 360360, 720720, 12252240, 12252240, 232792560, 232792560}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[{ StyleBox[ "A formula for the determinant of the Hilbert matrix is well-know (see for \ example Davis, page 288). It is \n\n$$", Evaluatable->False, AspectRatioFixed->True], StyleBox[ "({{{{\\left( 1!\\,2!\\,...\\left( n - 1 \\right) ! \\right) }^4}}\\over \ {1!\\,2!\\,3!\\,...\\left( 2\\,n - 1 \\right) !}})$$\n\n", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier"], StyleBox["When n = 10, the determinant is", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["(Product[k!,{k,1,9}])^4/(Product[k!,{k,1,19}])"], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ 1/46206893947914691316295628839036278726983680000000000\ \>", "\<\ 1 ----------------------------------------------------- 46206893947914691316295628839036278726983680000000000\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[{ StyleBox["Since we will be multiplying the system though by ", Evaluatable->False, AspectRatioFixed->True], StyleBox["d", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[", the determinant of the system will be ", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["% Apply[Times,d]//N"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ 4.562734176000001*10^9\ \>", "\<\ 9 4.56273 10\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[{ StyleBox[ "By experimenting with products of consecutive primes we find that the \ product of the primes 12 through 18 should be sufficient to solve ", Evaluatable->False, AspectRatioFixed->True], StyleBox["(d*H).x == d*B", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Courier", FontWeight->"Bold"], StyleBox[". ", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["Times@@Map[Prime,Range[12,18]]//N"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ 5.84803025179*10^11\ \>", "\<\ 11 5.84803 10\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "c = ModularLinearSolve[d*H,d*B, Map[Prime,Range[12,18]]]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {-1/184756, 5/8398, -135/8398, 60/323, -735/646, 1323/323, -2940/323, 240/19, -405/38, 5}\ \>", "\<\ 1 5 135 60 735 1323 2940 {-(------), ----, -(----), ---, -(---), ----, -(----), 184756 8398 8398 323 646 323 323 240 405 ---, -(---), 5} 19 38\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "These are the coefficients of the polynomial of best approximation."], "Text",\ Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["y=c.Table[x^k,{k,0,9}];\nShort[y]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Short[-1/184756 + (5*x)/8398 - (135*x^2)/8398 + (60*x^3)/323 - (735*x^4)/646 + (1323*x^5)/323 - (2940*x^6)/323 + (240*x^7)/19 - (405*x^8)/38 + 5*x^9]\ \>", "\<\ 1 9 -(------) + <<8>> + 5 x 184756\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData["Naturally, the error is quite small. "], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["Plot[y - x^10, {x,0,1}]"], "Input", AspectRatioFixed->True], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart %% Graphics /Helvetica findfont 6 scalefont setfont % Scaling calculations 0.02381 0.952381 0.433015 77283.354755 [ [(0.2)] .21429 .43301 0 2 Msboxa [(0.4)] .40476 .43301 0 2 Msboxa [(0.6)] .59524 .43301 0 2 Msboxa [(0.8)] .78571 .43301 0 2 Msboxa [(1)] .97619 .43301 0 2 Msboxa [( -6)(-5. 10)] .01131 .0466 1 0 Msboxa [( -6)(-4. 10)] .01131 .12388 1 0 Msboxa [( -6)(-3. 10)] .01131 .20116 1 0 Msboxa [( -6)(-2. 10)] .01131 .27845 1 0 Msboxa [( -6)(-1. 10)] .01131 .35573 1 0 Msboxa [( -6)(1. 10)] .01131 .5103 1 0 Msboxa [( -6)(2. 10)] .01131 .58758 1 0 Msboxa [ -0.001 -0.001 0 0 ] [ 1.001 .61903 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath [ ] 0 setdash 0 g p p .002 w .21429 .43301 m .21429 .43926 L s P [(0.2)] .21429 .43301 0 2 Mshowa p .002 w .40476 .43301 m .40476 .43926 L s P [(0.4)] .40476 .43301 0 2 Mshowa p .002 w .59524 .43301 m .59524 .43926 L s P [(0.6)] .59524 .43301 0 2 Mshowa p .002 w .78571 .43301 m .78571 .43926 L s P [(0.8)] .78571 .43301 0 2 Mshowa p .002 w .97619 .43301 m .97619 .43926 L s P [(1)] .97619 .43301 0 2 Mshowa p .001 w .0619 .43301 m .0619 .43676 L s P p .001 w .1 .43301 m .1 .43676 L s P p .001 w .1381 .43301 m .1381 .43676 L s P p .001 w .17619 .43301 m .17619 .43676 L s P p .001 w .25238 .43301 m .25238 .43676 L s P p .001 w .29048 .43301 m .29048 .43676 L s P p .001 w .32857 .43301 m .32857 .43676 L s P p .001 w .36667 .43301 m .36667 .43676 L s P p .001 w .44286 .43301 m .44286 .43676 L s P p .001 w .48095 .43301 m .48095 .43676 L s P p .001 w .51905 .43301 m .51905 .43676 L s P p .001 w .55714 .43301 m .55714 .43676 L s P p .001 w .63333 .43301 m .63333 .43676 L s P p .001 w .67143 .43301 m .67143 .43676 L s P p .001 w .70952 .43301 m .70952 .43676 L s P p .001 w .74762 .43301 m .74762 .43676 L s P p .001 w .82381 .43301 m .82381 .43676 L s P p .001 w .8619 .43301 m .8619 .43676 L s P p .001 w .9 .43301 m .9 .43676 L s P p .001 w .9381 .43301 m .9381 .43676 L s P p .002 w 0 .43301 m 1 .43301 L s P p .002 w .02381 .0466 m .03006 .0466 L s P [( -6)(-5. 10)] .01131 .0466 1 0 Mshowa p .002 w .02381 .12388 m .03006 .12388 L s P [( -6)(-4. 10)] .01131 .12388 1 0 Mshowa p .002 w .02381 .20116 m .03006 .20116 L s P [( -6)(-3. 10)] .01131 .20116 1 0 Mshowa p .002 w .02381 .27845 m .03006 .27845 L s P [( -6)(-2. 10)] .01131 .27845 1 0 Mshowa p .002 w .02381 .35573 m .03006 .35573 L s P [( -6)(-1. 10)] .01131 .35573 1 0 Mshowa p .002 w .02381 .5103 m .03006 .5103 L s P [( -6)(1. 10)] .01131 .5103 1 0 Mshowa p .002 w .02381 .58758 m .03006 .58758 L s P [( -6)(2. 10)] .01131 .58758 1 0 Mshowa p .001 w .02381 .06205 m .02756 .06205 L s P p .001 w .02381 .07751 m .02756 .07751 L s P p .001 w .02381 .09297 m .02756 .09297 L s P p .001 w .02381 .10842 m .02756 .10842 L s P p .001 w .02381 .13934 m .02756 .13934 L s P p .001 w .02381 .15479 m .02756 .15479 L s P p .001 w .02381 .17025 m .02756 .17025 L s P p .001 w .02381 .18571 m .02756 .18571 L s P p .001 w .02381 .21662 m .02756 .21662 L s P p .001 w .02381 .23208 m .02756 .23208 L s P p .001 w .02381 .24753 m .02756 .24753 L s P p .001 w .02381 .26299 m .02756 .26299 L s P p .001 w .02381 .2939 m .02756 .2939 L s P p .001 w .02381 .30936 m .02756 .30936 L s P p .001 w .02381 .32482 m .02756 .32482 L s P p .001 w .02381 .34027 m .02756 .34027 L s P p .001 w .02381 .37119 m .02756 .37119 L s P p .001 w .02381 .38664 m .02756 .38664 L s P p .001 w .02381 .4021 m .02756 .4021 L s P p .001 w .02381 .41756 m .02756 .41756 L s P p .001 w .02381 .44847 m .02756 .44847 L s P p .001 w .02381 .46393 m .02756 .46393 L s P p .001 w .02381 .47938 m .02756 .47938 L s P p .001 w .02381 .49484 m .02756 .49484 L s P p .001 w .02381 .52575 m .02756 .52575 L s P p .001 w .02381 .54121 m .02756 .54121 L s P p .001 w .02381 .55667 m .02756 .55667 L s P p .001 w .02381 .57212 m .02756 .57212 L s P p .001 w .02381 .03114 m .02756 .03114 L s P p .001 w .02381 .01568 m .02756 .01568 L s P p .001 w .02381 .00023 m .02756 .00023 L s P p .001 w .02381 .60304 m .02756 .60304 L s P p .002 w .02381 0 m .02381 .61803 L s P P 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath p p .004 w .02381 .01472 m .02877 .22263 L .03373 .37444 L .03621 .43249 L .03869 .48017 L .04117 .51852 L .04365 .54854 L .04613 .57112 L .04861 .58712 L .04985 .5929 L .05109 .59732 L .05233 .60048 L .05357 .60245 L .05481 .60332 L .05605 .60317 L .05729 .60207 L .05853 .6001 L .05977 .59732 L .06101 .5938 L .06349 .5848 L .06845 .56054 L .07341 .53063 L .08333 .46418 L .09325 .40122 L .09821 .37417 L .10317 .35107 L .10813 .33235 L .11062 .32469 L .1131 .3182 L .11558 .31286 L .11806 .30867 L .1193 .30699 L .12054 .30559 L .12178 .30447 L .12302 .30362 L .12426 .30304 L .1255 .30271 L .12674 .30265 L .12798 .30283 L .12922 .30327 L .13046 .30394 L .1317 .30484 L .13294 .30598 L .1379 .31266 L .14038 .31718 L .14286 .32243 L .15278 .34933 L .1627 .38277 L .18254 .4545 L .19246 .48654 L Mistroke .20238 .51288 L .20734 .52343 L .2123 .53205 L .21478 .53561 L .21726 .53866 L .21974 .5412 L .22222 .54322 L .22346 .54404 L .2247 .54473 L .22594 .54529 L .22718 .54572 L .22842 .54603 L .22966 .54621 L .2309 .54626 L .23214 .5462 L .23338 .54601 L .23462 .54569 L .2371 .54471 L .23834 .54404 L .23958 .54325 L .24206 .54134 L .24702 .53622 L .25198 .52947 L .2619 .51175 L .30159 .41217 L .31151 .38784 L .32143 .36651 L .33135 .3492 L .33631 .34231 L .34127 .33669 L .34623 .33241 L .34871 .33078 L .35119 .3295 L .35367 .32856 L .35491 .32822 L .35615 .32796 L .35739 .3278 L .35863 .32772 L .35987 .32772 L .36111 .32781 L .36235 .32799 L .36359 .32825 L .36483 .3286 L .36607 .32903 L .36855 .33015 L .37103 .33159 L .37599 .33543 L .38095 .34049 L .39087 .35396 L .40079 .37124 L Mistroke .42063 .4135 L .44048 .45892 L .4504 .48011 L .46032 .49896 L .47024 .51458 L .48016 .52627 L .48512 .53047 L .4876 .53214 L .49008 .53351 L .49256 .53458 L .4938 .535 L .49504 .53534 L .49628 .53561 L .49752 .5358 L .49876 .53592 L .5 .53596 L .50124 .53592 L .50248 .5358 L .50372 .53561 L .50496 .53534 L .5062 .535 L .50744 .53458 L .50992 .53351 L .51488 .53047 L .51984 .52627 L .52976 .51458 L .53968 .49896 L .57937 .4135 L .59921 .37124 L .60913 .35396 L .61409 .34669 L .61905 .34049 L .62401 .33543 L .62649 .33335 L .62897 .33159 L .63145 .33015 L .63269 .32955 L .63393 .32903 L .63517 .3286 L .63641 .32825 L .63765 .32799 L .63889 .32781 L .64013 .32772 L .64137 .32772 L .64261 .3278 L .64385 .32796 L .64509 .32822 L .64633 .32856 L .64757 .32898 L .64881 .3295 L Mistroke .65377 .33241 L .65625 .33438 L .65873 .33669 L .66865 .3492 L .67857 .36651 L .69841 .41217 L .71825 .46454 L .72817 .48959 L .7381 .51175 L .74306 .52126 L .74802 .52947 L .75298 .53622 L .75794 .54134 L .76042 .54325 L .76166 .54404 L .7629 .54471 L .76414 .54526 L .76538 .54569 L .76662 .54601 L .76786 .5462 L .7691 .54626 L .77034 .54621 L .77158 .54603 L .77282 .54572 L .77406 .54529 L .7753 .54473 L .77778 .54322 L .78026 .5412 L .78274 .53866 L .7877 .53205 L .79266 .52343 L .79762 .51288 L .81746 .4545 L .8373 .38277 L .84722 .34933 L .85218 .33481 L .85714 .32243 L .8621 .31266 L .86458 .3089 L .86582 .30733 L .86706 .30598 L .8683 .30484 L .86954 .30394 L .87078 .30327 L .87202 .30283 L .87326 .30265 L .8745 .30271 L .87574 .30304 L .87698 .30362 L .87822 .30447 L Mistroke .87946 .30559 L .88194 .30867 L .88442 .31286 L .8869 .3182 L .89187 .33235 L .89683 .35107 L .90675 .40122 L .91667 .46418 L .92659 .53063 L .93155 .56054 L .93651 .5848 L .93775 .58961 L .93899 .5938 L .94023 .59732 L .94147 .6001 L .94271 .60207 L .94395 .60317 L .94519 .60332 L .94643 .60245 L .94767 .60048 L .94891 .59732 L .95139 .58712 L .95263 .57989 L .95387 .57112 L .95635 .54854 L .95883 .51852 L .96131 .48017 L .96627 .37444 L .96875 .30489 L .97123 .22263 L .97619 .01472 L Mfstroke P P % End of Graphics MathPictureEnd\ \>"], "Graphics", Evaluatable->False, AspectRatioFixed->True, ImageSize->{240, 148}, ImageMargins->{{86, Inherited}, {Inherited, Inherited}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHggYjN[Vi^OShn03ooeGooj[ooonICXf=SLcII03=Voc=Vc3=V VC=VIS=V@03o`800_l/0003o`0000H0 00?o00003P000ol0000600000`000ol0o`040004o`00o`@000?o0?l040000ol000060003o`0002P0 00?o00001@000ol0000e0003o`0000D000?o0000:@000ol000060003o`0000h000?o00001P000004 o`00o`H000Go0?l0o`030003o`3o010000?o00001P000ol0000X0003o`0000H000?o0000<`000ol0 00060003o`0002T000?o00001P000ol0000>0003o`0000H000030003o`0000@000Go0?l0o`030003 o`3o00l000?o000020000ol0000V0003o`0000P000?o00000003o`0001d000?o000050000ol0000U0003o`0001D000?o00007@000ol0000=0003 o`0000/000?o00001P00018000?o0?l030000ol0000>0003o`0000D000Co0?l00ol@0003o`000140 00?o0?l00P000ol0000S00?o0P000ol0000A0003o`0000l000?o0?l00P000ol000060003o`0000d0 00?o00002`02o`L0000B0003o`3o00`000?o00003P000ol000040003o`3o008000?o000040000ol0 000@0003o`3o00800olS00?o0P000ol0o`0B0003o`0000h000?o0?l00P000ol0o`070003o`0000d0 00?o00002`02o`L0000B0003o`3o00`000?o00003`000ol000030003o`3o01@000?o00004@000ol0 o`0200;o9003o`800_lD0003o`0000d000?o0?l00`000ol000050003o`0000h000?o00002`02o`L0 000B0003o`3o00`000?o00003`000ol000030003o`3o008000?o0?l03`000ol0000A0003o`3o00<0 0_lS0003o`3o008000?o00004`000ol0000=0003o`3o008000?o0?l01P000ol0000>0003o`0000/0 0_l700004P000ol0o`0;0003o`00010000?o000010000ol000020003o`0000d000?o00004`000ol0 000200;o8`02o`@000?o00004`000ol0000=0003o`00008000?o00001@000ol0000?0003o`0000X0 0_l700004P000ol0o`0;0003o`00014000?o000060000ol0000J0003o`0001l000?o00006P000ol0 000I0003o`00010000?o00002P000ol0000600004P000ol0o`0;0003o`00014000?o000060000ol0 000J0003o`0001l000?o00006P000ol0000I0003o`00010000?o00002P000ol000060000303So`40 000B0003o`3o00D000?o00000`001?l00?l70003o`0000H00_l70003o`0000D000?o00001P000ol0 00060003o`0000D000?o00001P000ol000020004o`00o`P000?o00001P000ol000050004o`00o`D0 00?o00001@000ol000060003o`0000D00_l70003o`0000H000?o00001@000ol000060003o`0000H0 00?o0?l01@000ol000030004o`00o`H0000B0003o`3o00/000?o00004P000ol0000E0003o`0001h0 00?o00006`000ol0000N0003o`0001H000?o00004@000ol000090003o`0000L0000B0003o`3o00/0 00?o00004P000ol0000E0003o`0001h000?o00006`000ol0000N0003o`0001H000?o00004@000ol0 00090003o`0000L0000B0003o`3o00X000?o000050000ol0000D0003o`0001l000?o00006@000ol0 000P0003o`0001@000?o00004`000ol000080003o`0000L0000B0003o`3o00X000?o000050000ol0 000C0003o`00020000?o00006@000ol0000P0003o`0001@000?o00004`000ol000080003o`0000L0 000B0004o`00o`T000?o000050000ol0000C0003o`00024000?o00005`000ol0000Q0003o`0001@0 00?o00004`000ol000080003o`0000L0000B0004o`00o`T000?o000050000ol0000B0003o`000280 00?o00005`000ol0000R0003o`0001<000?o00004`000ol000080003o`0000L0000B0004o`00o`T0 00?o00005@000ol0000A0003o`0002<000?o00005P000ol0000R0003o`00018000?o000050000ol0 00080003o`0000L0000B0004o`00o`T000?o00005@000ol0000A0003o`0002<000?o00005@000ol0 000T0003o`00014000?o000050000ol000080003o`0000L0000B0004o`00o`T000?o00005@000ol0 000@0003o`0002@000?o00005@000ol0000T0003o`00014000?o00005@000ol000070003o`0000L0 000B0004o`00o`T000?o00005P000ol0000?0003o`0002D000?o00004`000ol0000U0003o`000100 00?o00005P000ol000070003o`0000L0000B0004o`00o`P000?o00005`000ol0000?0003o`0002D0 00?o00004`000ol0000V0003o`0000l000?o00005P000ol000070003o`0000L000020003o`3o00@0 00Co003o1@001?l00?l80003o`0001L000?o00003P000ol0000W0003o`00014000?o00009`000ol0 000?0003o`0001H000?o00001`000ol0000700000P000ol000040005o`3o0?l010001?l00?l80003 o`0001P000?o00003@000ol0000W0003o`00014000?o00009`000ol0000>0003o`0001L000?o0000 1`000ol0000700000P000ol000040005o`3o0?l010001?l00?l80003o`0001P000?o000030000ol0 000Y0003o`0000l000?o0000:@000ol0000=0003o`0001P000?o00001P000ol0000700000P000ol0 00040005o`3o0?l010001Ol0003o00L000?o000060000ol0000<0003o`0002X000?o00003P000ol0 000Y0003o`0000d000?o000060000ol000050003o`0000P000020003o`0000@000Co003o1@02o`80 00?o00001@000ol0000I0003o`0000/000?o0000:`000ol0000<0003o`0002X000?o000030000ol0 000I0003o`0000D000?o00002000018000Go0000o`070003o`0001T000?o00002P000ol0000]0003 o`0000X000?o0000;0000ol0000;0003o`0001T000?o00001@000ol0000800004P001Ol0003o00H0 00?o00006P000ol0000:0003o`0002d000?o00002P000ol0000/0003o`0000X000?o00006P000ol0 00050003o`0000P0000<0003o`0000<000Go0000o`060003o`0001/000?o000020000ol0000_0003 o`0000P000?o0000;P000ol000080003o`0001`000?o000010000ol0000800002@001Ol0o`3o00@0 00Go0000o`060003o`0001/000?o000020000ol0000`0003o`0000H000?o0000;`000ol000080003 o`0001`000?o000010000ol0000800002`02o`D000Go0000o`060003o`0001`000?o00001P000ol0 000b0003o`0000@000?o0000<@000ol000060003o`0001d000?o000010000ol0000800002`000ol0 00040005o`000?l01P000ol0000M0003o`0000@000?o0000=006ocD000?o00001@000ol0000M0003 o`0000<000?o00002@0000`000?o00000`001Ol0003o00H000?o00007@02o`D000?o0000L0000ol0 00030003o`0001h000?o00000`000ol0000900004P001Ol0003o00H000?o00007P06og@00_l00`3o o`0Q0003o`0000<000?o00002@00018000Go0000o`050003o`0002400_mh00;o8`000ol000020003 o`0000T0000B0005o`000?l01@000ol000300003o`00008000?o00002@00018000Go0000o`050003 o`000<0000?o00000P000ol0000900004P000ol000020003o`00008000?o0000`0000ol000020003 o`0000T000000`3oo`02o`@000Co003o1@000ol000020003o`00008000?o0000`0000ol000020003 o`0000T000000`3o00060005o`3o0?l010000ol000020003o`00008000?o0000`0000ol000020003 o`0000T000090005o`3o0?l010000ol000020005o`000?l0a0001Ol0003o00/00000103o0?l50005 o`3o0?l010000ol000020005o`000?l0a0001Ol0003o00/000020003o`0000@000Co003o1@000ol0 00020005o`000?l0a0001Ol0003o00/0000B00;o0`001Ol0003o0<@000Co003o3000018000?o0000 0`000ol0o`350004o`00o``0000B0003o`0000<000?o0?l0aP000ol0o`0<000030000ol000030003 o`0000<00_o700;o3@0000T000Go0?l0o`040003o`0000@000?o0000aP000ol0000;00002`02o`D0 00?o0000f`0000/000?o000010000ol0003K000030000ol000030003o`000=/0003`0000l0000?00 0000\ \>"], ImageRangeCache->{{{0, 239}, {147, 0}} -> {-0.0842675, 0.0172394, 0.0046457, -0.000169803}}], Cell[OutputFormData[ "\<\ The Unformatted text for this cell was not generated. Use options in the Actions Preferences dialog box to control when Unformatted text is generated.\ \>", "\<\ -Graphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]]}, Open]], Cell[CellGroupData[{Cell[TextData["Conclusion"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ " It is generally perceived that Cramer's Rule is purely of theoretical \ interest (see Axler, page 140). In a computational introduction to linear \ algebra it is often given little attention. This method shows how Cramer's \ Rule can be applied in a reasonably efficient method for solving systems of \ equations as opposed to its direct application requiring computation of \ several determinants. In combination with the Chinese Remainder Theorem, \ this method could make use of parallel computation to solve large systems \ with many relatively small moduli."], "Text", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["References"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ StyleBox["Sheldon Axler, \"Down With Determinants!\",", Evaluatable->False, AspectRatioFixed->True], StyleBox[" The American Mathematical Monthly", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[", 102(1995) 139-154.", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "Philip J. Davis, Interpolation and Approximation, Dover, 1975."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "John D. Lipson, Elements of Algebra and Algebraic Computing, \ Addison-Welsley, 1981."], "Text", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["About the Author"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "Ken Levasseur earned a Ph. D. in 1980 from the University of Rhode Island in \ approximation theory. Since that time he has been at the University of \ Massachusetts Lowell. His main research interests are currently discrete \ mathematics and applied algebra. "], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[StyleBox[ "Kenneth M. Levasseur\nDepartment of Mathematical Sciences\nUniversity of \ Massachusetts Lowell\nLowell, MA 01854\nLevasseuk@woods.uml.edu", AspectRatioFixed->True, FontFamily->"Times", FontWeight->"Plain"]], "Input", AspectRatioFixed->True]}, Open]]}, Open]] }, FrontEndVersion->"Macintosh 3.0", ScreenRectangle->{{0, 640}, {0, 460}}, WindowToolbars->{}, CellGrouping->Manual, WindowSize->{520, 365}, WindowMargins->{{20, Automatic}, {Automatic, 1}}, PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}}, ShowCellLabel->True, ShowCellTags->False, RenderingOptions->{"ObjectDithering"->True, "RasterDithering"->False}, MacintoshSystemPageSetup->"\<\ AVU/IFiQKFD000000Tn0D09?RA0000000PBJL0901kP0AP1Y06`0I@1^0642Ch1@ 0Tn9<000000219Y@0T07^000000000000000009?P50000000000000000000000 00000000000000000000000000000000\>" ] (*********************************************************************** 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[1731, 51, 315, 10, 70, "Title", Evaluatable->False], Cell[2049, 63, 381, 11, 70, "Subtitle", Evaluatable->False], Cell[2433, 76, 185, 4, 70, "Subsubtitle", Evaluatable->False], Cell[CellGroupData[{ Cell[2641, 82, 89, 2, 70, "Section", Evaluatable->False], Cell[2733, 86, 1517, 34, 70, "Text", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[4282, 122, 140, 3, 70, "Section", Evaluatable->False], Cell[4425, 127, 757, 19, 70, "Text", Evaluatable->False], Cell[5185, 148, 263, 5, 70, "Text", Evaluatable->False], Cell[5451, 155, 325, 6, 70, "Text", Evaluatable->False], Cell[5779, 163, 399, 7, 70, "Text", Evaluatable->False], Cell[6181, 172, 6664, 185, 70, 1515, 116, "GraphicsData", "PostScript", "Graphics", Evaluatable->False], Cell[12848, 359, 1072, 39, 70, "Text", Evaluatable->False], Cell[13923, 400, 146, 3, 70, "Input", InitializationCell->True], Cell[14072, 405, 191, 4, 70, "Text", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[14295, 411, 94, 2, 70, "Section", Evaluatable->False], Cell[14392, 415, 380, 7, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[14795, 424, 256, 6, 70, "Input"], Cell[15054, 432, 117, 2, 70, "Print", Evaluatable->False] }, Closed]], Cell[15183, 436, 212, 4, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[15418, 442, 256, 6, 70, "Input"], Cell[15677, 450, 117, 2, 70, "Print", Evaluatable->False] }, Closed]], Cell[15806, 454, 301, 6, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[16130, 462, 260, 6, 70, "Input"], Cell[16393, 470, 118, 2, 70, "Print", Evaluatable->False] }, Closed]], Cell[16523, 474, 268, 5, 70, "Text", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[16823, 481, 90, 2, 70, "Section", Evaluatable->False], Cell[16916, 485, 494, 8, 70, "Text", Evaluatable->False], Cell[17413, 495, 166, 4, 70, "Text", Evaluatable->False], Cell[17582, 501, 572, 9, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[18177, 512, 90, 2, 70, "Subsection", Evaluatable->False], Cell[18270, 516, 973, 34, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[19266, 552, 167, 3, 70, "Input"], Cell[19436, 557, 220, 10, 70, "Output", Evaluatable->False] }, Closed]], Cell[19668, 569, 1475, 50, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[21166, 621, 75, 1, 70, "Input"], Cell[21244, 624, 158, 7, 70, "Output", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[21434, 633, 73, 1, 70, "Input"], Cell[21510, 636, 135, 7, 70, "Output", Evaluatable->False] }, Closed]], Cell[21657, 645, 133, 3, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[21813, 650, 109, 2, 70, "Input"], Cell[21925, 654, 168, 8, 70, "Output", Evaluatable->False] }, Closed]], Cell[22105, 664, 255, 5, 70, "Text", Evaluatable->False], Cell[22363, 671, 326, 6, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[22712, 679, 86, 2, 70, "Input"], Cell[22801, 683, 112, 6, 70, "Output", Evaluatable->False] }, Closed]], Cell[22925, 691, 95, 2, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[23043, 695, 103, 1, 70, "Input"], Cell[23149, 698, 124, 6, 70, "Output", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[23305, 706, 77, 1, 70, "Input"], Cell[23385, 709, 112, 6, 70, "Output", Evaluatable->False] }, Closed]], Cell[23509, 717, 91, 2, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[23623, 721, 92, 1, 70, "Input"], Cell[23718, 724, 114, 6, 70, "Output", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[23864, 732, 92, 1, 70, "Input"], Cell[23959, 735, 110, 6, 70, "Output", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[24101, 743, 69, 1, 70, "Input"], Cell[24173, 746, 168, 8, 70, "Output", Evaluatable->False] }, Closed]], Cell[24353, 756, 161, 4, 70, "Text", Evaluatable->False] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[24555, 762, 156, 4, 70, "Section", Evaluatable->False], Cell[24714, 768, 303, 6, 70, "Text", Evaluatable->False], Cell[25020, 776, 127, 2, 70, "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[25170, 780, 77, 1, 70, "Input"], Cell[25250, 783, 197, 4, 70, "Info", Evaluatable->False] }, Closed]], Cell[25459, 789, 245, 5, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[25727, 796, 90, 2, 70, "Subsection", Evaluatable->False], Cell[25820, 800, 97, 2, 70, "Text", Evaluatable->False], Cell[25920, 804, 230, 5, 70, "Special2", Evaluatable->False], Cell[26153, 811, 346, 6, 70, "Text", Evaluatable->False], Cell[26502, 819, 165, 3, 70, "Input"], Cell[26670, 824, 486, 16, 70, "Text", Evaluatable->False], Cell[27159, 842, 171, 4, 70, "Input", InitializationCell->True], Cell[27333, 848, 308, 6, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[27664, 856, 81, 1, 70, "Input"], Cell[27748, 859, 204, 8, 70, "Output", Evaluatable->False] }, Closed]], Cell[27964, 869, 1513, 41, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[29500, 912, 103, 1, 70, "Input"], Cell[29606, 915, 141, 7, 70, "Output", Evaluatable->False] }, Closed]], Cell[29759, 924, 114, 2, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[29896, 928, 135, 3, 70, "Input"], Cell[30034, 933, 173, 8, 70, "Output", Evaluatable->False] }, Closed]], Cell[30219, 943, 179, 4, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[30421, 949, 73, 1, 70, "Input"], Cell[30497, 952, 173, 8, 70, "Output", Evaluatable->False] }, Closed]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[30720, 962, 112, 2, 70, "Section", Evaluatable->False], Cell[30835, 966, 134, 3, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[30992, 971, 691, 12, 70, "Input", InitializationCell->True], Cell[31686, 985, 392, 14, 70, "Output", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[32110, 1001, 169, 3, 70, "Input"], Cell[32282, 1006, 357, 14, 70, "Output", Evaluatable->False] }, Closed]], Cell[32651, 1022, 442, 7, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[33116, 1031, 99, 1, 70, "Input"], Cell[33218, 1034, 199, 4, 70, "Message", Evaluatable->False], Cell[33420, 1040, 157, 4, 70, "Message", Evaluatable->False], Cell[33580, 1046, 157, 4, 70, "Message", Evaluatable->False], Cell[33740, 1052, 163, 7, 70, "Output", Evaluatable->False] }, Closed]], Cell[33915, 1061, 612, 19, 70, "Text", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[34559, 1082, 146, 4, 70, "Section", Evaluatable->False], Cell[34708, 1088, 2504, 82, 70, "Text", Evaluatable->False], Cell[37215, 1172, 239, 5, 70, "Special2", Evaluatable->False], Cell[37457, 1179, 1675, 47, 70, "Text", Evaluatable->False], Cell[39135, 1228, 125, 2, 70, "Input", InitializationCell->True], Cell[39263, 1232, 108, 2, 70, "Input"], Cell[39374, 1236, 197, 4, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[39594, 1242, 93, 1, 70, "Input"], Cell[39690, 1245, 287, 10, 70, "Output", Evaluatable->False] }, Closed]], Cell[39989, 1257, 590, 17, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[40602, 1276, 99, 1, 70, "Input"], Cell[40704, 1279, 294, 10, 70, "Output", Evaluatable->False] }, Closed]], Cell[41010, 1291, 420, 14, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[41453, 1307, 72, 1, 70, "Input"], Cell[41528, 1310, 146, 7, 70, "Output", Evaluatable->False] }, Closed]], Cell[41686, 1319, 486, 16, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[42195, 1337, 86, 1, 70, "Input"], Cell[42284, 1340, 144, 7, 70, "Output", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[42460, 1349, 110, 2, 70, "Input"], Cell[42573, 1353, 400, 14, 70, "Output", Evaluatable->False] }, Closed]], Cell[42985, 1369, 144, 4, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[43152, 1375, 86, 1, 70, "Input"], Cell[43241, 1378, 324, 12, 70, "Output", Evaluatable->False] }, Closed]], Cell[43577, 1392, 111, 2, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[43711, 1396, 76, 1, 70, "Input"], Cell[43790, 1399, 19013, 831, 70, 8037, 690, "GraphicsData", "PostScript", "Graphics", Evaluatable->False], Cell[62806, 2232, 265, 10, 70, "Output", Evaluatable->False] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[63112, 2244, 87, 2, 70, "Section", Evaluatable->False], Cell[63202, 2248, 642, 10, 70, "Text", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[63876, 2260, 87, 2, 70, "Section", Evaluatable->False], Cell[63966, 2264, 400, 13, 70, "Text", Evaluatable->False], Cell[64369, 2279, 137, 3, 70, "Text", Evaluatable->False], Cell[64509, 2284, 160, 4, 70, "Text", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[64701, 2290, 93, 2, 70, "Section", Evaluatable->False], Cell[64797, 2294, 337, 6, 70, "Text", Evaluatable->False], Cell[65137, 2302, 276, 6, 70, "Input"] }, Closed]] }, Open ]] } ] *) (*********************************************************************** End of Mathematica Notebook file. ***********************************************************************)