(*********************************************************************** 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[ 68195, 2321]*) (*NotebookOutlinePosition[ 83054, 2867]*) (* CellTagsIndexPosition[ 83010, 2863]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{ Cell["Calculating with Units", "Title"], Cell["Version 3 Edition", "Subtitle"], Cell["David J. M. Park Jr", "Author"], Cell["\<\ 5605 West Falls Road Mt. Airy, MD 21771 djmp@earthlink.net\ \>", "Address"], Cell[TextData[{ "Two packages, ", StyleBox["Miscellaneous`V3ExtendUnits`", FontWeight->"Bold"], " and ", StyleBox["Miscellaneous`V3ReducedUnits`", FontWeight->"Bold"], " are presented which supplement the standard ", StyleBox["Miscellaneous`Units`", FontWeight->"Bold"], " package. They add to the capabilities of the standard package, are easier \ to apply, and also allow formatting of the output at the same time as unit \ conversion. There is a facility for defining new units. The ReducedUnits \ package allows the implementation of unit systems such as geometrized units \ or atomic units." }], "Abstract"], Cell[CellGroupData[{ Cell[" Introduction", "Section"], Cell[TextData[{ " The Standard Add-On Packages for ", StyleBox["Mathematica", FontSlant->"Italic"], " contain a package, Miscellaneous`Units`, for doing unit conversions in \ physical problems. It is good practice to work with units when solving any \ physical problem. But the use of units should be unobtrusive and as close to \ trivial as possible, since it is much more rewarding to concentrate on the \ physical and mathematical aspects of a problem." }], "Text"], Cell[TextData[ " This paper describes two packages which supplement the \ Miscellaneous`Units` package. The Convert routine does not uniformally \ convert all forms of expressions. It does not do the necessary \ simplifications within root expressions. Nor does it always do the necessary \ simplification when the constants \[Pi] and E appear. It does not use \ PowerExpand even when it is pure unit expressions that need such expansion. \ It has a definite problem in converting real number radians to degrees. Part \ of its design may be to preserve exact expressions, yet it doesn't always do \ this because many conversion constants are introduced as machine precision \ numbers."], "Text"], Cell["\<\ The ExtendUnits package is based on the premise that unit conversion is \ either a last step in solving a problem, where numerical answers are desired, \ or it is used in generating an expression for plotting or numerical analysis. \ With this premise ExtendUnits will work uniformly on a much larger class of \ expressions. A method for working around the conversion to degrees has been \ introduced. A number of forms of the ToUnit conversion function have been \ provided for mapping onto common output structures.\ \>", "Text"], Cell["\<\ In addition there is provision for simultaneously converting a result to \ multiple equivalent units. Another feature provides for the parsing of a \ result into a series of compatible descending units.\ \>", "Text"], Cell["\<\ Converting a solution to the desired units is usually the last step in \ solving a problem. In addition to the correct units, one will also usually \ wish to specify the format of the number. This package allows specification \ of the various formats for numbers, including a new PrefixForm which \ automatically selects the correct SI unit prefix.\ \>", "Text"], Cell["\<\ It is often desirable to work with units, but then generate a unitless \ expression for plotting or numerical analysis. Two routines, Deunitize and a \ more controlled form DeunitizeWithReference will perform this function.\ \>", "Text"], Cell["\<\ The standard Units package has a great many units. But specialized \ fields will often introduce additional units for their particular \ convenience. This package allows users to define new units.\ \>", "Text"], Cell["\<\ Often, in special fields, it is desirable to implement unit systems in \ which certain physical constants are set to 1. This is done, for example, \ when introducing geometrized units or atomic units. The supplemental package \ ReducedUnits allows the implementation of such systems.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["The Basic ToUnit Function and Features", "Section"], Cell["\<\ The ExtendUnits package should be installed in the \ AddOns/ExtraPackages/Miscellaneous directory folder. The core function in the \ package is named ToUnit. It is a pure function used as follows:\ \>", "Text"], Cell[BoxData[ \(<< Miscellaneous`V3ExtendUnits`\)], "Input", CellLabel->"In[1]:="], Cell[CellGroupData[{ Cell[BoxData[ \(\(ToUnit[Meter]\)[35. Yard]\)], "Input", CellLabel->"In[2]:="], Cell[BoxData[ \(32.0040000000000013`\ Meter\)], "Output", CellLabel->"Out[2]="] }, Open ]], Cell["But it will most often be used in postfix form.", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(1. AU // ToUnit[Mile]\)], "Input", CellLabel->"In[3]:="], Cell[BoxData[ \(9.2944081563668206`*^7\ Mile\)], "Output", CellLabel->"Out[3]="] }, Open ]], Cell["ToUnit can take a number of options. The first two are:", "Text"], Cell["\<\ ToUnit Option Default Meaning _____________________________________________________________________ AllowComplexExpand False\t\tEnables ComplexExpand in expression \t\t\t\t\t\t\t\tevaluation AllowPowerExpand True\t\tEnables PowerExpand in expression \t\t\t\t\t\t\t\tevaluation\ \>", "Text", PageBreakWithin->False, TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell["\<\ These options, combined with the automatic use of the BaseSI routine,\ \>", "Text"], Cell["BaseSI[expr] Converts all units in expr to base SI units", "Text", PageBreakWithin->False, TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell["\<\ allow ToUnit to directly handle expressions which Convert either does not \ handle or leaves in need of further processing.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(\@\(10\ Ohm\^2\) // ToUnit[Ohm]\)], "Input", CellLabel->"In[4]:="], Cell[BoxData[ \(3.16227766016837907`\ Ohm\)], "Output", CellLabel->"Out[4]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(\@\(\((5\ Ohm)\)\^2 + \((20 \[Pi]\ Henry\ Hertz)\)\^2\) // ToUnit[Ohm]\)], "Input", CellLabel->"In[5]:="], Cell[BoxData[ \(63.0304827875825868`\ Ohm\)], "Output", CellLabel->"Out[5]="] }, Open ]], Cell["\<\ BaseSI combined with N and PowerExpand have automatically simplified the \ above expression so it can be readily converted to ohms.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[{ \(BaseSI[\@\(\((5\ Ohm)\)\^2 + \((20 \[Pi]\ Henry\ Hertz)\)\^2\)]\ \), \(% // N\ \), \(% // PowerExpand\ \), \(Convert[%, \ Ohm]\)}], "Input", CellLabel->"In[6]:="], Cell[BoxData[ \(\@\(\(25\ Kilogram\^2\ Meter\^4\)\/\(Ampere\^4\ Second\^6\) + \(400\ Kilogram\^2\ Meter\^4\ \[Pi]\^2\)\/\(Ampere\^4\ Second\^6\)\)\)], "Output", CellLabel->"Out[6]="], Cell[BoxData[ \(63.0304827875825868`\ \@\(\(Kilogram\^2\ Meter\^4\)\/\(Ampere\^4\ Second\^6\)\)\)], "Output", CellLabel->"Out[7]="], Cell[BoxData[ \(\(63.0304827875825868`\ Kilogram\ Meter\^2\)\/\(Ampere\^2\ Second\^3\)\)], "Output", CellLabel->"Out[8]="], Cell[BoxData[ \(63.0304827875825868`\ Ohm\)], "Output", CellLabel->"Out[9]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Abs[\((3 + 5 I)\) Ohm] // ToUnit[Ohm, AllowComplexExpand \[Rule] True]\)], "Input", CellLabel->"In[10]:="], Cell[BoxData[ \(5.83095189484530074`\ Ohm\)], "Output", CellLabel->"Out[10]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(\@\(-\((2\ Henry\ Hertz)\)\^2\) // ToUnit[Ohm]\)], "Input", CellLabel->"In[11]:="], Cell[BoxData[ \(\((\(0.`\[InvisibleSpace]\) + 2.`\ I)\)\ Ohm\)], "Output", CellLabel->"Out[11]="] }, Open ]], Cell["\<\ To convert to dimensionless quantities, just use 1 as the unit as with \ Convert.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Exp[ \(-2\)\/Second\ \@\(\((2 Second)\)\^2 - \((1.99\ Second)\)\^2\)] // ToUnit[1]\)], "Input", CellLabel->"In[12]:="], Cell[BoxData[ \(0.670655499704825874`\)], "Output", CellLabel->"Out[12]="] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Output Formatting and PrefixForm", "Section"], Cell[TextData[{ "Numbers are formatted using the standard ", StyleBox["Mathematica", FontSlant->"Italic"], " number format unless a different number formatting function is provided. \ Since it is convenient to prescribe the number format at the same time as \ prescribing the unit, and because a new PrefixForm number format is supplied \ by the package, an option to ToUnit is provided for this specification." }], "Text"], Cell[TextData[{ "ToUnit Option Default\t\t\tMeaning\n\ __________________________________________________________________\nUnitForm \ Automatic\t\tAutomatic prescribes standard \n\t\t\t\t\t\t\t\t", StyleBox["Mathematica", FontSlant->"Italic"], " number format. Otherwise\n\t\t\t\t\t\t\t\ta pure function such as\n\t\t\t\ \t\t\t\t\t(NumberForm[#, 4]&)\tcan be given. " }], "Text", TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell["\<\ The following example illustrates the use of the various UnitForm option \ values.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \({1. \ AU // ToUnit[Meter], \n\t1. AU // ToUnit[Tera\ Meter], \n\t 1. AU // ToUnit[Meter, UnitForm \[Rule] \((NumberForm[#, 4]&)\)], \n \t1. AU // ToUnit[Meter, UnitForm \[Rule] \((NumberForm[#, 12, ExponentFunction \[Rule] \((Null&)\), DigitBlock \[Rule] 3]&)\)], \n\t 1. AU // ToUnit[Meter, UnitForm \[Rule] ScientificForm], \n\t 1. AU // ToUnit[Meter, UnitForm \[Rule] EngineeringForm], \n\t 1. AU // ToUnit[Meter, UnitForm \[Rule] PrefixForm]} // TableForm \)], "Input", CellLabel->"In[13]:="], Cell[BoxData[ InterpretationBox[GridBox[{ {\(1.49579000000000039`*^11\ Meter\)}, {\(0.149578999999999995`\ Meter\ Tera\)}, { TagBox[ RowBox[{ RowBox[{"(", InterpretationBox[\("1.496"\[Times]10\^"11"\), .149579*^12, AutoDelete->True], ")"}], " ", "Meter"}], (NumberForm[ #, 4]&)]}, { TagBox[ RowBox[{ InterpretationBox["\<\"149,579,000,000.\"\>", .149579*^12, AutoDelete->True], " ", "Meter"}], ( NumberForm[ #, 12, ExponentFunction -> (Null&), DigitBlock -> 3]&)]}, { TagBox[ RowBox[{ RowBox[{"(", InterpretationBox[\("1.49579"\[Times]10\^"11"\), .149579*^12, AutoDelete->True], ")"}], " ", "Meter"}], ScientificForm]}, { TagBox[ RowBox[{ RowBox[{"(", InterpretationBox[\("149.579"\[Times]10\^"9"\), .149579*^12, AutoDelete->True], ")"}], " ", "Meter"}], EngineeringForm]}, { TagBox[ RowBox[{ StyleBox["0.149578999999999995`", StyleBoxAutoDelete->True, PrintPrecision->6], " ", "Tera", " ", "Meter"}], HoldForm]} }, RowSpacings->1, ColumnSpacings->3, RowAlignments->Baseline, ColumnAlignments->{Left}], TableForm[ { Times[ .149579*^12, Meter], Times[ .14957899999999999, Meter, Tera], NumberForm[ Times[ .149579*^12, Meter], 4], NumberForm[ Times[ .149579*^12, Meter], 12, ExponentFunction -> (Null&), DigitBlock -> 3], ScientificForm[ Times[ .149579*^12, Meter]], EngineeringForm[ Times[ .149579*^12, Meter]], HoldForm[ Times[ .14957899999999999, Tera, Meter]]}]]], "Output", CellLabel->"Out[13]//TableForm="] }, Open ]], Cell["\<\ PrefixForm is a new number formatting option introduced with ExtendUnits.\ \>", "Text"], Cell["\<\ PrefixForm[unit expression, precision:6, offset:1] \t\t\t\tFormats a unit expression to give a small number with \t\t\t\ta proper SI unit prefix. The breaking position between \t\t\t\tunits is controlled by the optional offset.\ \>", "Text", PageBreakWithin->False, TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell[TextData[{ " PrefixForm wraps the answer in a HoldForm and then inserts the prefix \ multiplier so it will always come before the unit. In the second case in the \ table above, where Tera Meter was specified directly as the unit, ", StyleBox["Mathematica", FontSlant->"Italic"], " rearranged the symbols alphabetically.\n\n There is a question as to \ how the prefixes should be picked in PrefixForm. The natural form might be to \ pick the prefixes so the numbers varied between xxx. and x (offset 0). \ However, the more common usage seems to be xx.x to 0.xxx (offset 1, the \ default). The optional offset argument allows the user to specify the \ division point between prefix switches." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(PrefixForm[1.3333*^8\ Meter, 6, 1]\)], "Input", CellLabel->"In[14]:="], Cell[BoxData[ TagBox[ RowBox[{ StyleBox["0.133329999999999992`", StyleBoxAutoDelete->True, PrintPrecision->6], " ", "Giga", " ", "Meter"}], HoldForm]], "Output", CellLabel->"Out[14]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(PrefixForm[1.3333*^8\ Meter, 6, 0]\)], "Input", CellLabel->"In[15]:="], Cell[BoxData[ TagBox[ RowBox[{ StyleBox["133.330000000000037`", StyleBoxAutoDelete->True, PrintPrecision->6], " ", "Mega", " ", "Meter"}], HoldForm]], "Output", CellLabel->"Out[15]="] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Converting to Degrees", "Section"], Cell[TextData[{ " Convert has a problem when dealing with ", StyleBox["Degree", FontFamily->"Courier", FontWeight->"Bold"], ". Unfortunately, ", StyleBox["Degree", FontFamily->"Courier", FontWeight->"Bold"], " is both an angle unit and a numeric constant. When dealing with nonexact \ expressions, ", StyleBox["Mathematica", FontSlant->"Italic"], " multiplies it out. This creates a problem when converting to degrees. ", StyleBox["Convert", FontFamily->"Courier", FontWeight->"Bold"], " handles the following case:" }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Convert[\(\[Pi]\/4\) Radian, \[Degree]]\)], "Input", CellLabel->"In[16]:="], Cell[BoxData[ \(45\ Degree\)], "Output", CellLabel->"Out[16]="] }, Open ]], Cell[TextData[{ "But ", StyleBox["Convert", FontFamily->"Courier", FontWeight->"Bold"], " fails with an approximate value, which will often be the case. The final \ evaluation reverses the conversion." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Convert[1.35\ Radian, \[Degree]]\)], "Input", CellLabel->"In[17]:="], Cell[BoxData[ \(1.35000000000000031`\)], "Output", CellLabel->"Out[17]="] }, Open ]], Cell[TextData[{ StyleBox["ToUnit", FontFamily->"Courier", FontWeight->"Bold"], StyleBox[" handles this problem by replacing any "], StyleBox["Degree", FontFamily->"Courier", FontWeight->"Bold"], StyleBox[ " units with an internal fake degree unit, converting to it, and then at \ the conclusion replacing the fake degree with "], StyleBox["HoldForm[Degree]", FontFamily->"Courier", FontWeight->"Bold"], StyleBox["."] }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(1.35\ Radian // ToUnit[\[Degree]]\)], "Input", CellLabel->"In[18]:="], Cell[BoxData[ RowBox[{"77.3493023426611525`", " ", TagBox["Degree", HoldForm]}]], "Output", CellLabel->"Out[18]="] }, Open ]], Cell["\<\ If the \[Degree] symbol is preferred on output, the PrintDegreeSymbol option \ can be used.\ \>", "Text"], Cell[TextData[ "ToUnit Option \tDefault\t\t\tMeaning\n\ __________________________________________________________________\n\ PrintDegreeSymbol\tFalse\tPrints \"\[Degree]\" for the degree symbol"], "Text",\ TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell[CellGroupData[{ Cell[BoxData[ \(1.35\ Radian // ToUnit[\[Degree], PrintDegreeSymbol \[Rule] True]\)], "Input", CellLabel->"In[19]:="], Cell[BoxData[ \(77.3493023426611525`\ "\[Degree]"\)], "Output", CellLabel->"Out[19]="] }, Open ]], Cell["\<\ This wraps the \[Degree] symbol in quote marks, so should only be used if \ ToUnit is generating final output. To aid in undoing these two formats a \ ReleaseDegree function is provided.\ \>", "Text"], Cell["\<\ ReleaseDegree[output degree expression] \t\t\t\tReturns a normal radian expression which can be used \t\t\t\tas further input.\ \>", "Text", PageBreakWithin->False, TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell[CellGroupData[{ Cell[BoxData[{ \({1.35\ Radian // ToUnit[\[Degree]], 1.35\ Radian // ToUnit[\[Degree], PrintDegreeSymbol \[Rule] True]}\ \), \(% // ReleaseDegree\)}], "Input", CellLabel->"In[20]:="], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"77.3493023426611525`", " ", TagBox["Degree", HoldForm]}], ",", \(77.3493023426611525`\ "\[Degree]"\)}], "}"}]], "Output", CellLabel->"Out[20]="], Cell[BoxData[ \({1.35000000000000031`, 1.35000000000000031`}\)], "Output", CellLabel->"Out[21]="] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Mapping ToUnit onto Various Structures", "Section"], Cell["\<\ ToUnit has an option which directly maps it to any specific part of an \ expression.\ \>", "Text"], Cell["\<\ ToUnit Option \tDefault\t\t\tMeaning __________________________________________________________________ UnitPosition\t\tAutomatic\tAutomatic specifies the entire \t\t\t\t\t\t\t\texpression.\tOutherwise, a list \t\t\t\t\t\t\t\tspecifying the position of application \t\t\t\t\t\t\t\tmay be given.\ \>", "Text", TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell[CellGroupData[{ Cell[BoxData[{ \(area \[Rule] length\[Times]width /. {length \[Rule] 20 Inch, width \[Rule] 2 Yard}\ \), \(% // ToUnit[Meter\^2, UnitPosition \[Rule] {2}]\)}], "Input", CellLabel->"In[22]:="], Cell[BoxData[ \(area \[Rule] 40\ Inch\ Yard\)], "Output", CellLabel->"Out[22]="], Cell[BoxData[ \(area \[Rule] 0.9290303999999999`\ Meter\^2\)], "Output", CellLabel->"Out[23]="] }, Open ]], Cell["\<\ However, ToUnit comes in a number of alternative forms, distinguished either \ by name or form of arguments, which facilitate its mapping onto common output \ structures..\ \>", "Text"], Cell[TextData[{ "ToUnit[unit, options...][expression] \n Convert expression to the \ specified units using the options.\nToUnit[unit, n, options...][expression] \n\ Map ToUnit onto the n'th level one item in the expression.\n\ ToUnit[unit, {n1, n2,...}, options...][expression] \n Map ToUnit \ onto a series of level one items in the expression.\nToUnitRule[unit, \ options...][expression] \n Map ToUnit onto the second part of a \ rule or structure.\nToUnitRule[unit, n, options][expression] \n Map \ ToUnit onto the second part of the n'th rule in a list. \nToUnitRule[unit, \ {n1, n2,...}, options...][expression] \n Map ToUnit onto the second \ parts of a series of rules \n in a list.\nToUnitList[unit, \ options...][expression] \n Map ToUnit onto each item on a list.\n\ ToUnitVectorRule[unit, options...][expression] \n Map ToUnitList \ onto the second part of a rule.\nToUnitVectorRule[unit, n, \ options...][expression] \n Map ToUnitVectorRule onto the n'th item \ of a list.\nToUnitForms[unit, {form1, form2,...}, options...][expression] \n\t\ \t\tUse the replacement rules x_ ", Cell[BoxData[ FormBox[ SubscriptBox["form", "i"], TraditionalForm]]], " \[Rule] ToUnit[unit, \n\t\t\toptions...][x] ", Cell[BoxData[ FormBox[ SubscriptBox["form", "i"], TraditionalForm]]], ". " }], "Text", PageBreakWithin->False, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell["\<\ The alternative argument forms of ToUnit allow it to be mapped onto one \ or more items in a list.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[{ \({3. , 6. , 12. } Feet // ToUnit[Meter, 2]\), \({3. , 6. , 12. } Feet // ToUnit[Meter, {1, 3}]\)}], "Input", CellLabel->"In[24]:="], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{ StyleBox["3.`", StyleBoxAutoDelete->True, PrintPrecision->1], " ", "Feet"}], ",", \(1.82880000000000002`\ Meter\), ",", RowBox[{ StyleBox["12.0000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], " ", "Feet"}]}], "}"}]], "Output", CellLabel->"Out[24]="], Cell[BoxData[ RowBox[{"{", RowBox[{\(0.914400000000000012`\ Meter\), ",", RowBox[{ StyleBox["6.`", StyleBoxAutoDelete->True, PrintPrecision->1], " ", "Feet"}], ",", \(3.65759999999999996`\ Meter\)}], "}"}]], "Output", CellLabel->"Out[25]="] }, Open ]], Cell["Or the entire list can be converted at once with ToUnitList.", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \({3. , 6. , 12. } Feet // ToUnitList[Meter]\)], "Input", CellLabel->"In[26]:="], Cell[BoxData[ \({0.914400000000000012`\ Meter, 1.82880000000000002`\ Meter, 3.65759999999999996`\ Meter}\)], "Output", CellLabel->"Out[26]="] }, Open ]], Cell[" ToUnitRule is most convenient in converting rules. ", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(x \[Rule] 3.55 Meter // ToUnitRule[Inch]\)], "Input", CellLabel->"In[27]:="], Cell[BoxData[ \(x \[Rule] 139.763779527559073`\ Inch\)], "Output", CellLabel->"Out[27]="] }, Open ]], Cell["\<\ It actually can be used on any expression with two or more elements.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \({x \[Rule] 3.55\ Meter, x \[Equal] 3.55 Meter, x \[LessEqual] 3.55 Meter, x \[NotEqual] 3.55 Meter, {x, 3.55 Meter, 4. Feet}} // ToUnitRule[Inch, {1, 2, 3, 4, 5}]\)], "Input", CellLabel->"In[28]:="], Cell[BoxData[ RowBox[{"{", RowBox[{ \(x \[Rule] 139.763779527559073`\ Inch\), ",", \(x == 139.763779527559073`\ Inch\), ",", \(x \[LessEqual] 139.763779527559073`\ Inch\), ",", \(x \[NotEqual] 139.763779527559073`\ Inch\), ",", RowBox[{"{", RowBox[{"x", ",", \(139.763779527559073`\ Inch\), ",", RowBox[{ StyleBox["4.`", StyleBoxAutoDelete->True, PrintPrecision->1], " ", "Feet"}]}], "}"}]}], "}"}]], "Output",\ CellLabel->"Out[28]="] }, Open ]], Cell["\<\ ToUnitVectorRule is used to convert rules which have vectors on the \ right hand side.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(vec \[Rule] {3. Feet, 5. Inch, 1. Mile} // ToUnitVectorRule[Meter]\)], "Input", CellLabel->"In[29]:="], Cell[BoxData[ \(vec \[Rule] {0.914400000000000012`\ Meter, 0.127000000000000001`\ Meter, 1609.34399999999993`\ Meter}\)], "Output", CellLabel->"Out[29]="] }, Open ]], Cell["\<\ Different forms of ToUnit may be applied selectively to different items \ in a list.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(\(\(\({3.5 Feet, vec \[Rule] {3. Feet, 5. Inch, 1. Mile}, x \[Rule] 6. Feet}\n\t\t // ToUnit[Meter, 1]\)\n\t\t // ToUnitVectorRule[Meter, 2]\)\n\t\t // ToUnitRule[Meter, 3]\) // TableForm\)], "Input", CellLabel->"In[30]:="], Cell[BoxData[ InterpretationBox[GridBox[{ {\(1.06679999999999997`\ Meter\)}, { \(vec \[Rule] {0.914400000000000012`\ Meter, 0.127000000000000001`\ Meter, 1609.34399999999993`\ Meter} \)}, {\(x \[Rule] 1.82880000000000002`\ Meter\)} }, RowSpacings->1, ColumnSpacings->3, RowAlignments->Baseline, ColumnAlignments->{Left}], TableForm[ { Times[ 1.0668, Meter], vec -> { Times[ .91439999999999999, Meter], Times[ .127, Meter], Times[ 1609.3439999999998, Meter]}, x -> Times[ 1.8288, Meter]}]]], "Output", CellLabel->"Out[30]//TableForm="] }, Open ]], Cell["\<\ ToUnitForms allows expressions to be converted according to tag symbols in \ the expression.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(3.5\ Yard\ south\ + \ 34 Feet\ west // ToUnitForms[Meter, {south, west}]\)], "Input", CellLabel->"In[31]:="], Cell[BoxData[ \(3.20039999999999968`\ Meter\ south + 10.363199999999999`\ Meter\ west\)], "Output", CellLabel->"Out[31]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(\(3.5\ Yard\ south\ + \ 34 Feet\ west\ \n\t\t // ToUnitForms[Meter, {west}]\)\ \n // ToUnitForms[Centimeter, {south}]\)], "Input", CellLabel->"In[32]:="], Cell[BoxData[ \(320.040000000000013`\ Centimeter\ south + 10.363199999999999`\ Meter\ west\)], "Output", CellLabel->"Out[32]="] }, Open ]], Cell["It is also permissible to add unit tags and convert to them.", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(1.90\ DM\/Liter /. DM \[Rule] Dollar/1.65 // ToUnit[Dollar/Gallon, UnitForm \[Rule] \((NumberForm[#, {3, 2}]&)\)] \)], "Input", CellLabel->"In[33]:="], Cell[BoxData[ TagBox[ FractionBox[ RowBox[{ InterpretationBox["\<\"4.36\"\>", 4.3589546666666665, AutoDelete->True], " ", "Dollar"}], "Gallon"], (NumberForm[ #, {3, 2}]&)]], "Output", CellLabel->"Out[33]//NumberForm="] }, Open ]], Cell["\<\ I devised these forms of ToUnit to handle the common cases I arrived at \ in solving simple physics problems. Others are sure to arrive at other common \ cases I have not considered. But it is easy enough to write a function which \ maps ToUnit onto any expression form using either MapAt or the UnitPosition \ option in ToUnit.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Converting to Multiple Units", "Section"], Cell["\<\ Occasionally it is desirable to have the output in several equivalent \ units at once. The procedures ToUnit, ToUnitRule and ToUnitList allow this, \ simply by enclosing the desired units in a list. One then gets a list of \ equivalent conversions.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(25.5 Meter\/Second // ToUnit[{Mile\/Hour, \(Kilo\ Meter\)\/Hour}]\)], "Input", CellLabel->"In[34]:="], Cell[BoxData[ \({\(57.0418754473872624`\ Mile\)\/Hour, \(91.7999999999999971`\ Kilo\ Meter\)\/Hour}\)], "Output", CellLabel->"Out[34]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(distance \[Rule] 1.5\ Mile // ToUnitRule[{Meter, Yard}]\)], "Input", CellLabel->"In[35]:="], Cell[BoxData[ \(distance \[Rule] {2414.0160000000006`\ Meter, 2640.00000000000056`\ Yard}\)], "Output", CellLabel->"Out[35]="] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Parsing of Units", "Section"], Cell["\<\ Another occasional requirement is to parse or breakout a quantity in a \ series of compatible descending units. This can be done with all the ToUnit \ routines by wrapping the units in a ParseUnits wrapper.\ \>", "Text"], Cell["\<\ ParseUnits[unit1, unit2,...] used as the units argument in any of the \t\t\tToUnit routines breaks the quantity into a descending sum \t\t\tof compatible units.\ \>", "Text", PageBreakWithin->False, TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{\(1.33\ Mile\), "//", RowBox[{"ToUnit", "[", RowBox[{ StyleBox["ParseUnits", FontFamily->"Courier", FontWeight->"Bold"], "[", \(Yard, Feet, Inch\), "]"}], "]"}]}]], "Input", CellLabel->"In[36]:="], Cell[BoxData[ TagBox[\(2340\ Yard + 2\ Feet + 4.80000000000654836`\ Inch\), HoldForm]], "Output", CellLabel->"Out[36]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{\(angle \[Rule] 1.22\ Radian\), "//", RowBox[{"ToUnitRule", "[", RowBox[{ StyleBox["ParseUnits", FontFamily->"Courier", FontWeight->"Bold"], "[", \(Degree, ArcMinute, ArcSecond\), "]"}], "]"}]}]], "Input", CellLabel->"In[37]:="], Cell[BoxData[ RowBox[{"angle", "\[Rule]", TagBox[ RowBox[{ RowBox[{"69", " ", TagBox["Degree", HoldForm]}], "+", \(54\ ArcMinute\), "+", \(3.06362145756082782`\ ArcSecond\)}], HoldForm]}]], "Output", CellLabel->"Out[37]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{\(quantity \[Rule] \(3. Mile\)\/\(2.2 Meter\)\), "//", RowBox[{"ToUnitRule", "[", RowBox[{ StyleBox["ParseUnits", FontFamily->"Courier", FontWeight->"Bold"], "[", \(Gross, Dozen, 1\), "]"}], "]"}]}]], "Input", CellLabel->"In[38]:="], Cell[BoxData[ RowBox[{"quantity", "\[Rule]", TagBox[\(15\ Gross + 2\ Dozen + 10.5599999999995186`\), HoldForm]}]], "Output", CellLabel->"Out[38]="] }, Open ]], Cell[TextData[{ "ToUnit Option \tDefault\t\t\tMeaning\n\ __________________________________________________________________\n\ ParsePrecision\t\t", Cell[BoxData[ SuperscriptBox["10", RowBox[{"-", "13"}]]]], "\t\tControls the rounding used when parsing\n\t\t\t\t\t\t\t\ta unit \ expression" }], "Text", TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell["\<\ Setting the ParsePrecision too high can cause various problems.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(23. \ Feet // ToUnit[ParseUnits[Yard, Foot, Inch], ParsePrecision \[Rule] 10\^\(-15\)] \)], "Input", CellLabel->"In[39]:="], Cell[BoxData[ TagBox[\(7\ Yard + 2\ Foot + 7.99360577730112709`*^-14\ Inch\), HoldForm]], "Output", CellLabel->"Out[39]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(23. \ Feet // ToUnit[ParseUnits[Yard, Foot, Inch], ParsePrecision \[Rule] 10\^\(-13\)] \)], "Input", CellLabel->"In[40]:="], Cell[BoxData[ TagBox[\(7\ Yard + 2\ Foot\), HoldForm]], "Output", CellLabel->"Out[40]="] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Temperature Conversions", "Section"], Cell["\<\ ToUnit can be used to convert either temperature units or temperature scales.\ \ \>", "Text"], Cell["\<\ ToUnit Option \tDefault\t\t\tMeaning __________________________________________________________________ TemperatureScale\tFalse\t\tFalse converts temperature units, \t\t\t\t\t\t\t\tTrue converts temperature scales\ \>", "Text", TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell[CellGroupData[{ Cell[BoxData[ \(10\ Celsius // ToUnit[Kelvin]\)], "Input", CellLabel->"In[41]:="], Cell[BoxData[ \(10.`\ Kelvin\)], "Output", CellLabel->"Out[41]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(10\ Celsius // ToUnit[Kelvin, TemperatureScale \[Rule] True]\)], "Input",\ CellLabel->"In[42]:="], Cell[BoxData[ \(283.150000000000012`\ Kelvin\)], "Output", CellLabel->"Out[42]="] }, Open ]], Cell["\<\ However, the following functions provide easier temperature scale \ conversions. The functions are all Listable. (ToUnit is not Listable).\ \>", "Text"], Cell["\<\ ToKelvin[temperature]\t\tConverts a temperature to the Kelvin scale ToCelsius[temperature]\t\tConverts a temperature to the Celsius scale ToFahrenheit[temperature]\tConverts a temperature to the Fahrenheit \t\t\t\t\t\t\tscale ToRankine[temperature] \t Converts a temperature to the Rankine scale\ \>", "Text", PageBreakWithin->False, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell[CellGroupData[{ Cell[BoxData[ \(ToKelvin[{0. Celsius, 32\ Fahrenheit, \ 400\ Rankine}]\)], "Input", CellLabel->"In[43]:="], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{ StyleBox["273.150000000000003`", StyleBoxAutoDelete->True, PrintPrecision->5], " ", "Kelvin"}], ",", RowBox[{ StyleBox["273.150000000000003`", StyleBoxAutoDelete->True, PrintPrecision->5], " ", "Kelvin"}], ",", \(222.222222222222276`\ Kelvin\)}], "}"}]], "Output", CellLabel->"Out[43]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \({0. Celsius, 273.15 Kelvin, 100 Rankine} // ToFahrenheit\)], "Input",\ CellLabel->"In[44]:="], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{ StyleBox["32.0000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], " ", "Fahrenheit"}], ",", \(32.0000000000000017`\ Fahrenheit\), ",", \(\(-359.670000000000067`\)\ Fahrenheit\)}], "}"}]], "Output", CellLabel->"Out[44]="] }, Open ]], Cell["\<\ It is necessary to enter a zero temperature with the decimal point to prevent \ dropping of the unit.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Deunitizing Functions and Expressions", "Section"], Cell[TextData[{ "\tIt is very well to use units, but ", StyleBox["Mathematica", FontSlant->"Italic"], " numerical procedures such as plotting or fitting data points do not work \ with units included. Then, a numerical function or expression without units \ is needed which means that the input and output units are implied. \ ExtendUnits provides two procedures for eliminating the units in a controlled \ manner. The simpler one is Deunitize." }], "Text"], Cell["\<\ Deunitize[expression, {x, y, z...}, unitSystem] Converts the expression to a common unit system specified by unitSystem (SI, MKS, CGS) and then removes all atomic symbols except those specified in the variable list. The last two arguments are optional. If missing, an empty list, and the SI system of units is implied.\ \>", "Text", PageBreakWithin->False, TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell[TextData[{ StyleBox["Mathematica", FontSlant->"Italic"], " can't evaluate an inequality with different units until either both sides \ have the same units or the expression is deunitized." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[{ \(5 LightYear > 1 Parsec\ \), \(% // Deunitize\)}], "Input", CellLabel->"In[45]:="], Cell[BoxData[ \(5\ LightYear > Parsec\)], "Output", CellLabel->"Out[45]="], Cell[BoxData[ \(True\)], "Output", CellLabel->"Out[46]="] }, Open ]], Cell["\<\ This is the expression for the position of a particle under constant \ acceleration.\ \>", "Text"], Cell[BoxData[ \(x[t_] := x0 + v0\ t + 1/2 a\ t\^2\)], "Input", CellLabel->"In[47]:="], Cell["This is a set of data for the parameters.", "Text"], Cell[BoxData[ \(\(data = {x0 \[Rule] 3 Meter, v0 \[Rule] 2 Meter/Second, a \[Rule] 5 Meter/Second\^2}; \)\)], "Input", CellLabel->"In[48]:="], Cell["\<\ This is the position with units as a function of t expressed in seconds.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(x[t\ Second] /. data\)], "Input", CellLabel->"In[49]:="], Cell[BoxData[ \(3\ Meter + 2\ Meter\ t + \(5\ Meter\ t\^2\)\/2\)], "Output", CellLabel->"Out[49]="] }, Open ]], Cell["\<\ This eliminates all units and gives an expression for x in meters with t in \ seconds. It can be used in numerical routines.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Deunitize[x[t\ Second] /. data, {t}]\)], "Input", CellLabel->"In[50]:="], Cell[BoxData[ \(3 + 2\ t + \(5\ t\^2\)\/2\)], "Output", CellLabel->"Out[50]="] }, Open ]], Cell["\<\ This uses the CGS system and hence the position is in centimeters with t in \ seconds.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Deunitize[x[t\ Second] /. data, {t}, CGS]\)], "Input", CellLabel->"In[51]:="], Cell[BoxData[ \(300 + 200\ t + 250\ t\^2\)], "Output", CellLabel->"Out[51]="] }, Open ]], Cell["Here is a set of data with various units.", "Text"], Cell[BoxData[ \(\(data2 = {x0 \[Rule] 3 Feet, v0 \[Rule] 2 Yard/Second, a \[Rule] 5 Meter/Second\^2}; \)\)], "Input", CellLabel->"In[52]:="], Cell["\<\ With the new data, and using the SI system, this gives the position in meters \ when t is in minutes.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Deunitize[x[t\ Minute] /. data2, {t}]\)], "Input", CellLabel->"In[53]:="], Cell[BoxData[ \(\(0.914400000000000012`\[InvisibleSpace]\) + 109.728000000000026`\ t + 9000\ t\^2\)], "Output", CellLabel->"Out[53]="] }, Open ]], Cell["If we wish to keep v0 as a variable...", "Text"], Cell[BoxData[ \(x[t_, v0_] := x0 + v0\ t + 1/2 a\ t\^2\)], "Input", CellLabel->"In[54]:="], Cell[BoxData[ \(\(data3 = {x0 \[Rule] 3 Meter, a \[Rule] 5 Meter/Second\^2}; \)\)], "Input", CellLabel->"In[55]:="], Cell[CellGroupData[{ Cell[BoxData[ \(Deunitize[x[t\ Minute, v0\ Yard/Second] /. data3, {t, v0}]\)], "Input", CellLabel->"In[56]:="], Cell[BoxData[ \(3 + 9000\ t\^2 + 54.8639999999999972`\ t\ v0\)], "Output", CellLabel->"Out[56]="] }, Open ]], Cell["\<\ This gives the position in meters with t in minutes and v0 in yards/second. \ If the position in Feet is desired, multiply by Meter/Foot, which contrary to \ appearance gives the number of feet per meter.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Deunitize[x[t\ Minute, v0\ Yard/Second] Meter/Foot /. data3, {t, v0}] \)], "Input", CellLabel->"In[57]:="], Cell[BoxData[ \(3.28083989501312345`\ \((3 + 9000\ t\^2 + 54.8639999999999972`\ t\ v0)\)\)], "Output", CellLabel->"Out[57]="] }, Open ]], Cell["\<\ A more complete method which both checks for consistency of units and \ provides a reference equation to show exactly how the units entered into the \ expression before the numerical factors were calculated is \ DeunitizeWithReference.\ \>", "Text"], Cell["\<\ DeunitizeWithReference[f[arguments], variables, outputunit] Deunitizes a function f and prints the associated reference equation showing the implied units. The arguments are entered as either constants with units or variables with units; variables is a list of the variables which appear in the argument list; outputunit is the desired output unit for the function.\ \>", "Text", PageBreakWithin->False, TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell["\<\ It is necessary to first define the function to be deunitized. Using the same \ example, but with all parameters added to the argument list:\ \>", "Text"], Cell[BoxData[ \(Clear[x]; \nx[t_, x0_, v0_, a_] := x0 + v0\ t + 1/2 a\ t\^2\)], "Input",\ CellLabel->"In[58]:="], Cell[CellGroupData[{ Cell[BoxData[ \(DeunitizeWithReference[ x[t\ Second, 3\ Meter, 2\ Meter/Second, 5 Meter/Second\^2], {t}, Meter] \)], "Input", CellLabel->"In[59]:="], Cell[BoxData[ FractionBox[ RowBox[{\(Meter\^2\), " ", RowBox[{"(", RowBox[{"6", "+", FractionBox[ RowBox[{"4", " ", RowBox[{"(", TagBox[\(Second\ t\), HoldForm], ")"}]}], "Second"], "+", FractionBox[ RowBox[{"5", " ", SuperscriptBox[ RowBox[{"(", TagBox[\(Second\ t\), HoldForm], ")"}], "2"]}], \(Second\^2\)]}], ")"}]}], RowBox[{"2", " ", RowBox[{"(", TagBox[ RowBox[{"output", " ", TagBox["Meter", HoldForm]}], HoldForm], ")"}]}]]], "Print"], Cell[BoxData[ \(1\/2\ \((6 + 4\ t + 5\ t\^2)\)\)], "Output", CellLabel->"Out[59]="] }, Open ]], Cell[TextData[{ "The first argument in DeunitizeWithReference is the function where the \ arguments are given with their units. DeunitizeWithReference has the \ attribute HoldFirst. The routine extracts the arguments without immediate \ evaluation. In the x function argument sequence, some of the arguments have \ specific values, such as 3 Meter, and one has the variable value t Second. \ The second argument in DeunitizeWithReference is a list of the variables, in \ this case ", Cell[BoxData[ RowBox[{"{", "t", "}"}]]], ". The third argument is the desired output unit, in this case Meter. The \ reference equation is printed. The input and output units are clearly shown \ and all other units are base SI. The normal output is the actual unit free \ expression which can be used in numerical work. The routine evaluates the \ expression and checks that the units are consistent, giving an error message \ if it isn't. In the following the output has been incorrectly specified as \ seconds." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(DeunitizeWithReference[ x[t\ Second, 3\ Meter, 2\ Meter/Second, 5 Meter/Second\^2], {t}, Second]\)], "Input", CellLabel->"In[60]:="], Cell[BoxData[ FractionBox[ RowBox[{\(Meter\^2\), " ", RowBox[{"(", RowBox[{"6", "+", FractionBox[ RowBox[{"4", " ", RowBox[{"(", TagBox[\(Second\ t\), HoldForm], ")"}]}], "Second"], "+", FractionBox[ RowBox[{"5", " ", SuperscriptBox[ RowBox[{"(", TagBox[\(Second\ t\), HoldForm], ")"}], "2"]}], \(Second\^2\)]}], ")"}]}], RowBox[{"2", " ", RowBox[{"(", TagBox[ RowBox[{"output", " ", TagBox["Second", HoldForm]}], HoldForm], ")"}]}]]], "Print"], Cell[BoxData[ \(DeunitizeWithReference::"units" \( : \ \) "Bad unit specification."\)], "Message"], Cell[BoxData[ \($Failed\)], "Output", CellLabel->"Out[60]="] }, Open ]], Cell["\<\ Here the third argument, v0, has been specified with incorrect units.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(DeunitizeWithReference[ x[t\ Second, 3\ Meter, 2\ Meter/Second\^2, 5 Meter/Second\^2], {t}, Yard]\)], "Input", CellLabel->"In[61]:="], Cell[BoxData[ FractionBox[ RowBox[{ \(Meter\^2\), " ", \((\(2.`\[InvisibleSpace]\) + 5.5`\ Second)\), " ", RowBox[{"(", RowBox[{\(6\ Second\^2\), "+", RowBox[{"4", " ", RowBox[{"(", TagBox[\(Second\ t\), HoldForm], ")"}]}], "+", RowBox[{"5", " ", SuperscriptBox[ RowBox[{"(", TagBox[\(Second\ t\), HoldForm], ")"}], "2"]}]}], ")"}]}], RowBox[{"2", " ", \(Second\^3\), " ", RowBox[{"(", TagBox[ RowBox[{"output", " ", TagBox["Yard", HoldForm]}], HoldForm], ")"}]}]]], "Print"], Cell[BoxData[ \(DeunitizeWithReference::"units" \( : \ \) "Bad unit specification."\)], "Message"], Cell[BoxData[ \($Failed\)], "Output", CellLabel->"Out[61]="] }, Open ]], Cell["Here the output is specified to be in furlongs.", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(DeunitizeWithReference[ x[t\ Minute, 3\ Meter, v0\ Yard/Second, 5 Meter/Second\^2], {t, v0}, Furlong]\)], "Input", CellLabel->"In[62]:="], Cell[BoxData[ FractionBox[ RowBox[{"Meter", " ", RowBox[{"(", RowBox[{\(3\ Meter\), "+", FractionBox[ RowBox[{"5", " ", "Meter", " ", SuperscriptBox[ RowBox[{"(", TagBox[\(Minute\ t\), HoldForm], ")"}], "2"]}], \(2\ Second\^2\)], "+", RowBox[{ RowBox[{"(", TagBox[\(Minute\ t\), HoldForm], ")"}], " ", TagBox[\(\(v0\ Yard\)\/Second\), HoldForm]}]}], ")"}]}], TagBox[ RowBox[{"output", " ", TagBox["Furlong", HoldForm]}], HoldForm]]], "Print"], Cell[BoxData[ \(0.00497096953789867246`\ \((3 + 9000\ t\^2 + 54.8639999999999972`\ t\ v0)\)\)], "Output", CellLabel->"Out[62]="] }, Open ]], Cell["\<\ The above expression gives the position in furlongs when t is given in \ minutes and v0 is given in yards/second.\ \>", "Text"], Cell["\tDeunitizeWithReference has a number of options.", "Text"], Cell["\<\ DeunitizeWithReference Default\t\tMeaning \tOptions __________________________________________________________________ AllowPowerExpand\t\tTrue\tUsed in the test evaluation for unit \t\t\t\t\t\t\t\tconsistency AllowComplexExpand\t\tFalse\tUsed in the test evaluation for unit \t\t\t\t\t\t\t\tconsistency PrintReferenceEquation\tTrue\tSet to False to eliminate the reference \t\t\t\t\t\t\t\tequation ReferenceValues\t\t\t{1,1,...,1} \t\t\t\t\t\t\t\tThe numeric variable values used in the \t\t\t\t\t\t\t\ttest evaluation for unit consistency. \t\t\t\t\t\t\t\tAny\tset of values in the function \t\t\t\t\t\t\t\tdomain can be used.\ \>", "Text", PageBreakWithin->False, TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell["\<\ For an example where the default reference values in the test evaluation \ can't be used, consider the capacitance/(unit length) of a coaxial cable.\ \>", "Text"], Cell[BoxData[ \(Needs["\"]\)], "Input", CellLabel->"In[63]:="], Cell[BoxData[ \(c[a_, b_] := \(2 \[Pi]\ VacuumPermittivity\)\/Log[b/a]\)], "Input", CellLabel->"In[64]:="], Cell[TextData[{ "The default test values of ", Cell[BoxData[ RowBox[{"a", "\[Equal]", "1"}]]], " and ", Cell[BoxData[ RowBox[{"b", "\[Equal]", "1"}]]], " leads to a division by zero." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(DeunitizeWithReference[c[a\ Mil, \ b\ Mil], {a, b}, Farad/Meter]\)], "Input", CellLabel->"In[65]:="], Cell[BoxData[ \(Power::"infy" \( : \ \) "Infinite expression \!\(1\/0\) encountered."\)], "Message"], Cell[BoxData[ RowBox[{ \(Rest::"norest"\), \( : \ \), "\<\"Cannot take Rest of expression \ \\!\\(\\*InterpretationBox[\\\"ComplexInfinity\\\", DirectedInfinity[]]\\) \ with length zero.\"\>"}]], "Message"], Cell[BoxData[ FractionBox[ RowBox[{ "5.56325027987829034`*^-11", " ", \(Ampere\^2\), " ", \(Second\^4\), " ", RowBox[{"Rest", "[", InterpretationBox["ComplexInfinity", DirectedInfinity[ ]], "]"}]}], RowBox[{"Kilogram", " ", \(Meter\^3\), " ", RowBox[{"(", TagBox[ RowBox[{"output", " ", TagBox[\(Farad\/Meter\), HoldForm]}], HoldForm], ")"}], " ", RowBox[{"Log", "[", FractionBox[ TagBox[\(b\ Mil\), HoldForm], TagBox[\(a\ Mil\), HoldForm]], "]"}]}]]], "Print"], Cell[BoxData[ \(DeunitizeWithReference::"units" \( : \ \) "Bad unit specification."\)], "Message"], Cell[BoxData[ \($Failed\)], "Output", CellLabel->"Out[65]="] }, Open ]], Cell["Use different test values.", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(DeunitizeWithReference[c[a\ Mil, \ b\ Mil], {a, b}, Farad/Meter, ReferenceValues \[Rule] {2, 1}]\)], "Input", CellLabel->"In[66]:="], Cell[BoxData[ FractionBox[\(5.56325027987829034`*^-11\ Ampere\^4\ Second\^8\), RowBox[{\(Kilogram\^2\), " ", \(Meter\^6\), " ", RowBox[{"(", TagBox[ RowBox[{"output", " ", TagBox[\(Farad\/Meter\), HoldForm]}], HoldForm], ")"}], " ", RowBox[{"Log", "[", FractionBox[ TagBox[\(b\ Mil\), HoldForm], TagBox[\(a\ Mil\), HoldForm]], "]"}]}]]], "Print"], Cell[BoxData[ \(5.56325027987829034`*^-11\/Log[b\/a]\)], "Output", CellLabel->"Out[66]="] }, Open ]], Cell["\<\ Here, different units are used for the inner and outer radii of the cable.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(DeunitizeWithReference[c[a\ Milli\ Meter, \ b\ Centi\ Meter], {a, b}, Farad/Meter]\)], "Input", CellLabel->"In[67]:="], Cell[BoxData[ FractionBox[\(5.56325027987829034`*^-11\ Ampere\^4\ Second\^8\), RowBox[{\(Kilogram\^2\), " ", \(Meter\^6\), " ", RowBox[{"(", TagBox[ RowBox[{"output", " ", TagBox[\(Farad\/Meter\), HoldForm]}], HoldForm], ")"}], " ", RowBox[{"Log", "[", FractionBox[ TagBox[\(b\ Centi\ Meter\), HoldForm], TagBox[\(a\ Meter\ Milli\), HoldForm]], "]"}]}]]], "Print"], Cell[BoxData[ \(5.56325027987829034`*^-11\/Log[\(10\ b\)\/a]\)], "Output", CellLabel->"Out[67]="] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Installing New Units", "Section"], Cell[TextData[{ " ", StyleBox["Mathematica", FontSlant->"Italic"], " cannot anticipate every unit some user may wish to use. ExtendUnits \ allows a user to install new units which will behave just like the other \ units. " }], "Text"], Cell["\<\ InstallNewUnit[rule]\tInstalls a new unit defined by rule. NewUnitRules\t\t\tThe list of new unit equivalences which \t\t\t\t\t\thave been installed in the current session.\ \>", "Text", PageBreakWithin->False, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell["\<\ The North Woods lumberjacks had a mythical hero named Paul Bunyan. Paul \ had a pet call Babe the Blue Ox. They were both giants and the distance \ between the tips of Babe's horns was 42 ax handles. If we use regulation 1 \ Yard ax handles then we could define a new unit...\ \>", "Text"], Cell[BoxData[ \(InstallNewUnit[BlueOxSpan \[Rule] 42 Yard]\)], "Input", CellLabel->"In[68]:="], Cell["We can see that this has been installed in two ways.", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(NewUnitRules\)], "Input", CellLabel->"In[69]:="], Cell[BoxData[ \({BlueOxSpan \[Rule] 38.4048000000000033`\ Meter}\)], "Output", CellLabel->"Out[69]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(\(?BlueOxSpan\)\)], "Input", CellLabel->"In[70]:="], Cell[BoxData[ \("BlueOxSpan is an installed unit."\)], "Print"] }, Open ]], Cell[TextData[{ "The installation is not permanent. It is only active during the current ", StyleBox["Mathematica", FontSlant->"Italic"], " session. We can now use ", Cell[BoxData[ \(TraditionalForm\`BlueOxSpan\)]], " just like any other unit." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(1\ Mile // ToUnit[BlueOxSpan]\)], "Input", CellLabel->"In[71]:="], Cell[BoxData[ \(41.9047619047618979`\ BlueOxSpan\)], "Output", CellLabel->"Out[71]="] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(3\ BlueOxSpan\^2 // ToUnit[Acre]\)], "Input", CellLabel->"In[72]:="], Cell[BoxData[ \(1.0933884297520664`\ Acre\)], "Output", CellLabel->"Out[72]="] }, Open ]], Cell["\<\ The installed units are recognized by the ExtendUnits package. They are not \ recognized by routines in the standard units package.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Convert[1\ Mile, BlueOxSpan]\)], "Input", CellLabel->"In[73]:="], Cell[BoxData[ \(Convert::"incomp" \( : \ \) "Incompatible units in \!\(Mile\) and \!\(BlueOxSpan\)."\)], "Message"], Cell[BoxData[ \(Mile\)], "Output", CellLabel->"Out[73]="] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Reduced Unit Systems", "Section"], Cell["\<\ The supplementary package ReducedUnits allows the introduction of unit \ systems in which certain physical constants are taken as equal to 1 with no \ units. This allows the development of expressions with a reduced number of \ basic units or in some cases no units at all. Examples of such systems are \ geometrized units used in relativity, where everything is generally expressed \ in meters, or atomic units, used in atomic theory or quantum chemistry, where \ everything becomes unitless.\ \>", "Text"], Cell["The routines provided by the package are:", "Text"], Cell["\<\ SetupReducedUnits[{unit quantities}, {retained units}] Establishes a reduced unit system. The first list contains a list of quantities, generally physical constants, which will be taken as equal to 1. There can be no more than 5 such quantities. The second list contains the base SI units which will be retained. These can be chosen from {Meter, Kilogram, Second, Ampere, Kelvin}. The lengths of the two lists must sum to 5. ReducedUnits[expr] changes all units in the expr to the reduced \t\t (i.e., retained) base SI units. ReducedEquivalent[expr, oldunit, newunit] attempts to convert all \t\t cases of oldunit in expr to newunit.\ \>", "Text", PageBreakWithin->False, TextAlignment->Left, TextJustification->0, FontFamily->"Courier", FontSize->10, FontWeight->"Bold", Background->GrayLevel[0.8]], Cell["\<\ \tThis will be illustrated with two exanples. First we need to read in the \ package.\ \>", "Text"], Cell[BoxData[ \(Needs["\"]; \n Needs["\"]\)], "Input", CellLabel->"In[74]:="], Cell[TextData[{ "\tGeometrized units are established by putting ", Cell[BoxData[ \(TraditionalForm\`c \[Equal] G \[Equal] k \[Equal] 1\)]], ". The system is established by" }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(SetupReducedUnits[{SpeedOfLight, GravitationalConstant, BoltzmannConstant}, {Meter, Ampere}]\)], "Input", CellLabel->"In[75]:="], Cell[BoxData[ \({Kelvin \[Rule] 1.14050815012890183`*^-67\ Meter, Second \[Rule] 2.99792458000000117`*^8\ Meter, Kilogram \[Rule] 7.42426876402337754`*^-28\ Meter}\)], "Output", CellLabel->"Out[75]="] }, Open ]], Cell["\<\ This returns the set of rules which convert the nonretained base SI units to \ retained base SI units. This is for information only as the rules are also \ stored internally for use in ReducedUnits. Let's convert the mass of the sun \ to geometrized units.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(ms = SolarMass // ReducedUnits\)], "Input", CellLabel->"In[76]:="], Cell[BoxData[ \(1476.68705716425012`\ Meter\)], "Output", CellLabel->"Out[76]="] }, Open ]], Cell[TextData[{ "But we can multiply any quantity by ", Cell[BoxData[ \(TraditionalForm\`\(c\^n1\) \(G\^n2\) k\^n3\)]], " since they are all equal to 1. Hence we can convert from one unit to \ another if we can find values of ", Cell[BoxData[ \(TraditionalForm\`{n1, n2, n3}\)]], " such that the base SI units of ", Cell[BoxData[ \(TraditionalForm\`\(c\^n1\) \(G\^n2\) k\^n3\)]], " matches the units of the ratio of input to output unit. This may not \ always be possible for any ratio of units in any reduced system. This is done \ with the ReducedEquivalent routine. In geometrized units, the solar mass can \ be expressed in a number of different units." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[{ \(ReducedEquivalent[ms, Meter, Erg]\ \), \(ReducedEquivalent[%, Erg, Second]\ \), \(ReducedEquivalent[%, Second, Kelvin]\ \), \(ReducedEquivalent[%, Kelvin, Pascal\^\(\(-1\)/2\)]\ \), \(ReducedEquivalent[%, Pascal\^\(\(-1\)/2\), Gram]\ \), \(ReducedEquivalent[%, Gram, SolarMass]\)}], "Input", CellLabel->"In[77]:="], Cell[BoxData[ \(1.78762405050753141`*^54\ Erg\)], "Output", CellLabel->"Out[77]="], Cell[BoxData[ \(4.92569782113814724`*^-6\ Second\)], "Output", CellLabel->"Out[78]="], Cell[BoxData[ \(1.29476238902576179`*^70\ Kelvin\)], "Output", CellLabel->"Out[79]="], Cell[BoxData[ \(1.34213007435822229`*^-19\/\@Pascal\)], "Output", CellLabel->"Out[80]="], Cell[BoxData[ \(1.98900000000000076`*^33\ Gram\)], "Output", CellLabel->"Out[81]="], Cell[BoxData[ \(1.`\ SolarMass\)], "Output", CellLabel->"Out[82]="] }, Open ]], Cell[TextData[{ "\tFor a second example we can consider atomic units. Here ", Cell[BoxData[ \(TraditionalForm\`\[HBar] \[Equal] a\_0 = \(m\_e = e \[Equal] 1\)\)]], ". The following statement establishes atomic units." }], "Text"], Cell[BoxData[ \(e = ElectronCharge; \nme = ElectronMass; \na0 = BohrRadius; \n \[HBar] = PlanckConstantReduced; \)], "Input", CellLabel->"In[83]:="], Cell[CellGroupData[{ Cell[BoxData[ \(SetupReducedUnits[{\[HBar], a0, me, e}, {Kelvin}]\)], "Input", CellLabel->"In[84]:="], Cell[BoxData[ \({Ampere \[Rule] 150.974818414254112`, Second \[Rule] 4.13413735393156578`*^16, Kilogram \[Rule] 1.09776838288079847`*^30, Meter \[Rule] 1.88972598857892375`*^10}\)], "Output", CellLabel->"Out[84]="] }, Open ]], Cell["\<\ In this system the speed of light is the inverse of the fine structure \ constant.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(SpeedOfLight // ReducedUnits\)], "Input", CellLabel->"In[85]:="], Cell[BoxData[ \(137.035988541548947`\)], "Output", CellLabel->"Out[85]="] }, Open ]], Cell["\<\ This converts the equation for the energy levels in the hydrogen atom to \ reduced units.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[{ \(En == \(-\(1\/2\)\) \((\[HBar]\^2\/\(me\ a0\^2\))\) Z\^2\/n\^2\ \), \(% // ReducedUnits\ \), \(% // Rationalize\)}], "Input", CellLabel->"In[86]:="], Cell[BoxData[ \(En == \(-\(\(2.17987413193269841`*^-18\ Joule\^2\ Second\^2\ Z\^2\)\/\(Kilogram\ Meter\^2\ n\^2\)\)\)\)], "Output", CellLabel->"Out[86]="], Cell[BoxData[ \(En == \(-\(\(0.500000000000000088`\ Z\^2\)\/n\^2\)\)\)], "Output", CellLabel->"Out[87]="], Cell[BoxData[ \(En == \(-\(Z\^2\/\(2\ n\^2\)\)\)\)], "Output", CellLabel->"Out[88]="] }, Open ]], Cell["\<\ These are only two of the many kinds of reduced unit systems that could \ be established with these routines.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Solving a Simple Physics Problem with Units", "Section"], Cell["\<\ The following is an example of solving a simple physics problem with units. \ The problem is taken from Paul A. Tipler's Physics, Second Edition.\ \>", "Text"], Cell["\<\ A 2 kg box rests on a frictionless incline of angle 30\[Degree] supported by \ a spring (directed along the incline). The spring stretches by 3 cm. (a) Find \ the force constant of the spring. (b) If the box is pulled down the incline 5 \ cm from its equilibrium position and released, what will the initial \ acceleration be?\ \>", "Text"], Cell["First we enter the data.", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(\((data = {m \[Rule] 2 Kilogram, \[Theta] \[Rule] 30 \[Degree], g \[Rule] AccelerationDueToGravity, \[CapitalDelta]x1 \[Rule] 3 Centimeter, \[CapitalDelta]x2 \[Rule] 5 Centimeter})\) // TableForm\)], "Input", CellLabel->"In[89]:="], Cell[BoxData[ InterpretationBox[GridBox[{ {\(m \[Rule] 2\ Kilogram\)}, {\(\[Theta] \[Rule] 30\ Degree\)}, { RowBox[{"g", "\[Rule]", FractionBox[ RowBox[{ StyleBox["9.80664999999999942`", StyleBoxAutoDelete->True, PrintPrecision->6], " ", "Meter"}], \(Second\^2\)]}]}, {\(\[CapitalDelta]x1 \[Rule] 3\ Centimeter\)}, {\(\[CapitalDelta]x2 \[Rule] 5\ Centimeter\)} }, RowSpacings->1, ColumnSpacings->3, RowAlignments->Baseline, ColumnAlignments->{Left}], TableForm[ {m -> Times[ 2, Kilogram], \[Theta] -> Times[ 30, Degree], g -> Times[ 9.8066499999999994, Meter, Power[ Second, -2]], \[CapitalDelta]x1 -> Times[ 3, Centimeter], \[CapitalDelta]x2 -> Times[ 5, Centimeter]}]]], "Output", CellLabel->"Out[89]//TableForm="] }, Open ]], Cell[TextData[{ "It is generally best to solve the problem symbolically and substitute the \ data in the last step. Let ", Cell[BoxData[ \(TraditionalForm\`k\)]], " be the force constant for the spring and let ", Cell[BoxData[ \(TraditionalForm\`a\)]], " be the acceleration. We need only consider the forces along the line of \ the incline. The equations for the system are:" }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(\((eqns = \n{k\ \[CapitalDelta]x1 - m\ g\ Sin[\[Theta]] == 0, \ (*\ Equilibrium\ position\ of\ box\ *) \n\t k \((\[CapitalDelta]x1 + \[CapitalDelta]x2)\) - m\ g\ Sin[\[Theta]] == m\ a\ (*\ Force\ equation\ with\ further\ stretching\ *) })\) // TableForm \)], "Input", CellLabel->"In[90]:="], Cell[BoxData[ InterpretationBox[GridBox[{ {\(k\ \[CapitalDelta]x1 - g\ m\ Sin[\[Theta]] == 0\)}, { \(k\ \((\[CapitalDelta]x1 + \[CapitalDelta]x2)\) - g\ m\ Sin[\[Theta]] == a\ m\)} }, RowSpacings->1, ColumnSpacings->3, RowAlignments->Baseline, ColumnAlignments->{Left}], TableForm[ { Equal[ Plus[ Times[ k, \[CapitalDelta]x1], Times[ -1, g, m, Sin[ \[Theta]]]], 0], Equal[ Plus[ Times[ k, Plus[ \[CapitalDelta]x1, \[CapitalDelta]x2]], Times[ -1, g, m, Sin[ \[Theta]]]], Times[ a, m]]}]]], "Output", CellLabel->"Out[90]//TableForm="] }, Open ]], Cell["\<\ The next step will usually be evaluated several times, first checking all \ solutions, and then picking off, and arranging in order, the desired \ solutions.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(\((sols = \(\(Solve[eqns, {k, a}]\)\[LeftDoubleBracket]1 \[RightDoubleBracket]\)\[LeftDoubleBracket]{2, 1} \[RightDoubleBracket])\) // TableForm\)], "Input", CellLabel->"In[91]:="], Cell[BoxData[ InterpretationBox[GridBox[{ {\(k \[Rule] \(g\ m\ Sin[\[Theta]]\)\/\[CapitalDelta]x1\)}, { \(a \[Rule] \(g\ \[CapitalDelta]x2\ Sin[\[Theta]]\)\/\[CapitalDelta]x1\)} }, RowSpacings->1, ColumnSpacings->3, RowAlignments->Baseline, ColumnAlignments->{Left}], TableForm[ {k -> Times[ g, m, Power[ \[CapitalDelta]x1, -1], Sin[ \[Theta]]], a -> Times[ g, Power[ \[CapitalDelta]x1, -1], \[CapitalDelta]x2, Sin[ \[Theta]]]}]]], "Output", CellLabel->"Out[91]//TableForm="] }, Open ]], Cell["\<\ Now we can substitute the data and set the units. We use a precision of 3.\ \>", "Text"], Cell[BoxData[ \(\(SetOptions[ToUnit, UnitForm \[Rule] \((NumberForm[#, 3]&)\)]; \)\)], "Input", CellLabel->"In[92]:="], Cell[CellGroupData[{ Cell[BoxData[ \(\(\(sols /. data // ToUnitRule[Newton/Meter, 1]\) // ToUnitRule[Meter/Second\^2, 2]\) // TableForm\)], "Input", CellLabel->"In[93]:="], Cell[BoxData[ InterpretationBox[GridBox[{ { RowBox[{"k", "\[Rule]", TagBox[ FractionBox[ RowBox[{ InterpretationBox["\<\"327.\"\>", 326.88833333333332, AutoDelete->True], " ", "Newton"}], "Meter"], (NumberForm[ #, 3]&)]}]}, { RowBox[{"a", "\[Rule]", TagBox[ FractionBox[ RowBox[{ InterpretationBox["\<\"8.17\"\>", 8.172208333333332, AutoDelete->True], " ", "Meter"}], SuperscriptBox["Second", InterpretationBox["\<\"2\"\>", 2, Editable->False]]], (NumberForm[ #, 3]&)]}]} }, RowSpacings->1, ColumnSpacings->3, RowAlignments->Baseline, ColumnAlignments->{Left}], TableForm[ {k -> NumberForm[ Times[ 326.88833333333332, Power[ Meter, -1], Newton], 3], a -> NumberForm[ Times[ 8.172208333333332, Meter, Power[ Second, -2]], 3]}]]], "Output", CellLabel->"Out[93]//TableForm="] }, Open ]] }, Closed]] }, Open ]] }, FrontEndVersion->"Microsoft Windows 3.0", ScreenRectangle->{{0, 1024}, {0, 704}}, ScreenStyleEnvironment->"Working", WindowToolbars->"EditBar", WindowSize->{670, 572}, WindowMargins->{{1, Automatic}, {Automatic, 5}}, PrintingCopies->1, PrintingPageRange->{Automatic, Automatic}, PageHeaders->{{Cell[ TextData[ { CounterBox[ "Page"]}], "PageNumber"], Cell[ TextData[ { ValueBox[ "Day"], " ", ValueBox[ "MonthName"], " ", ValueBox[ "Year"]}], "PageNumber"], Cell[ TextData[ { ValueBox[ "FileName"]}], "Header"]}, {Cell[ TextData[ { ValueBox[ "FileName"]}], "Header"], Cell[ TextData[ { ValueBox[ "Day"], " ", ValueBox[ "MonthName"], " ", ValueBox[ "Year"]}], "PageNumber"], Cell[ TextData[ { CounterBox[ "Page"]}], "PageNumber"]}}, PrintingOptions->{"FirstPageHeader"->False, "FacingPages"->True}, CellBackgroundHalftoneDensity->Automatic, Magnification->1.25, StyleDefinitions -> Notebook[{ Cell[CellGroupData[{ Cell["Style Definitions", "Subtitle"], Cell["\<\ Modify the definitions below to change the default appearance of all cells in \ a given style. Make modifications to any definition using commands in the Format menu.\ \>", "Text"], Cell[CellGroupData[{ Cell["Style Environment Names", "Section"], Cell[StyleData[All, "Working"], ScriptMinSize->9], Cell[StyleData[All, "Printout"], PageWidth->PaperWidth, ShowCellLabel->False, ImageSize->{200, 200}, PrivateFontOptions->{"FontType"->"Outline"}] }, Closed]], Cell[CellGroupData[{ Cell["Notebook Options", "Section"], Cell["\<\ The options defined for the style below will be used at the Notebook level.\ \>", "Text"], Cell[StyleData["Notebook"], PageHeaders->{{Cell[ TextData[ { CounterBox[ "Page"]}], "PageNumber"], None, Cell[ TextData[ { ValueBox[ "FileName"]}], "Header"]}, {Cell[ TextData[ { ValueBox[ "FileName"]}], "Header"], None, Cell[ TextData[ { CounterBox[ "Page"]}], "PageNumber"]}}, PageHeaderLines->{True, True}, PrintingOptions->{"FirstPageHeader"->False, "FacingPages"->True}, CellLabelAutoDelete->False, CellFrameLabelMargins->6, StyleMenuListing->None] }, Closed]], Cell[CellGroupData[{ Cell["Styles for Headings", "Section"], Cell[CellGroupData[{ Cell[StyleData["Title"], CellFrame->{{0, 0}, {0, 0.25}}, CellMargins->{{18, 30}, {4, 20}}, CellGroupingRules->{"TitleGrouping", 0}, PageBreakBelow->False, CellFrameMargins->9, LineSpacing->{0.95, 0}, CounterIncrements->"Title", CounterAssignments->{{"Section", 0}, {"Equation", 0}, {"Figure", 0}}, FontSize->36], Cell[StyleData["Title", "Printout"], CellMargins->{{18, 30}, {4, 0}}, CellFrameMargins->4, FontSize->30] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Subtitle"], CellMargins->{{18, 30}, {0, 10}}, CellGroupingRules->{"TitleGrouping", 10}, PageBreakBelow->False, LineSpacing->{1, 0}, CounterIncrements->"Subtitle", CounterAssignments->{{"Section", 0}, {"Equation", 0}, {"Figure", 0}}, FontSize->24, FontSlant->"Italic"], Cell[StyleData["Subtitle", "Printout"], CellMargins->{{18, 30}, {0, 10}}, FontSize->18] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["SectionFirst"], CellFrame->{{0, 0}, {0, 3}}, CellMargins->{{18, 30}, {4, 30}}, CellGroupingRules->{"SectionGrouping", 40}, PageBreakBelow->False, CellFrameMargins->3, CounterIncrements->"Section", CounterAssignments->{{"Subsection", 0}, {"Subsubsection", 0}}, FontSize->18, FontWeight->"Bold"], Cell[StyleData["SectionFirst", "Printout"], FontSize->14] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Section"], CellMargins->{{18, 30}, {4, 30}}, CellGroupingRules->{"SectionGrouping", 40}, PageBreakBelow->False, CounterIncrements->"Section", CounterAssignments->{{"Subsection", 0}, {"Subsubsection", 0}}, FontSize->18, FontWeight->"Bold"], Cell[StyleData["Section", "Printout"], FontSize->14] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Subsection"], CellDingbat->"\[FilledSquare]", CellMargins->{{18, 30}, {4, 20}}, CellGroupingRules->{"SectionGrouping", 50}, PageBreakBelow->False, CounterIncrements->"Subsection", CounterAssignments->{{"Subsubsection", 0}}, FontSize->14, FontWeight->"Bold"], Cell[StyleData["Subsection", "Printout"], FontSize->12] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Subsubsection"], CellDingbat->"\[FilledSmallSquare]", CellMargins->{{18, 30}, {4, 12}}, CellGroupingRules->{"SectionGrouping", 60}, PageBreakBelow->False, CounterIncrements->"Subsubsection", FontSize->12, FontWeight->"Bold"], Cell[StyleData["Subsubsection", "Printout"], FontSize->10] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Styles for Body Text", "Section"], Cell[CellGroupData[{ Cell[StyleData["Text"], CellMargins->{{18, 10}, {Inherited, 6}}, TextJustification->1, LineSpacing->{1, 2}, CounterIncrements->"Text"], Cell[StyleData["Text", "Printout"], CellMargins->{{18, 30}, {Inherited, 4}}, LineSpacing->{1, 3}, FontSize->10] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Caption"], CellMargins->{{55, 50}, {5, 5}}, FontSize->10], Cell[StyleData["Caption", "Printout"], CellMargins->{{55, 55}, {5, 2}}, FontSize->8] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Styles for Input/Output", "Section"], Cell["\<\ The cells in this section define styles used for input and output to the \ kernel. Be careful when modifying, renaming, or removing these styles, \ because the front end associates special meanings with these style names.\ \>", "Text"], Cell[CellGroupData[{ Cell[StyleData["Input"], CellMargins->{{55, 10}, {5, 8}}, Evaluatable->True, CellGroupingRules->"InputGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GroupPageBreakWithin->False, CellLabelMargins->{{26, Inherited}, {Inherited, Inherited}}, DefaultFormatType->DefaultInputFormatType, AutoItalicWords->{}, FormatType->InputForm, ShowStringCharacters->True, NumberMarks->True, CounterIncrements->"Input", FontSize->12, FontWeight->"Bold"], Cell[StyleData["Input", "Printout"], CellMargins->{{55, 55}, {0, 10}}, ShowCellLabel->True, FontSize->9.5] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Output"], CellMargins->{{55, 10}, {8, 5}}, CellEditDuplicate->True, CellGroupingRules->"OutputGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GroupPageBreakWithin->False, GeneratedCell->True, CellAutoOverwrite->True, CellLabelPositioning->Left, CellLabelMargins->{{26, Inherited}, {Inherited, Inherited}}, DefaultFormatType->DefaultOutputFormatType, AutoItalicWords->{}, FormatType->InputForm, CounterIncrements->"Output"], Cell[StyleData["Output", "Printout"], CellMargins->{{55, 55}, {10, 10}}, ShowCellLabel->True, FontSize->9.5] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Message"], CellDingbat->"\[LongDash]", CellMargins->{{55, Inherited}, {Inherited, Inherited}}, CellGroupingRules->"OutputGrouping", PageBreakWithin->False, GroupPageBreakWithin->False, GeneratedCell->True, CellAutoOverwrite->True, ShowCellLabel->False, CellLabelMargins->{{26, Inherited}, {Inherited, Inherited}}, DefaultFormatType->DefaultOutputFormatType, AutoItalicWords->{}, FormatType->InputForm, CounterIncrements->"Message", StyleMenuListing->None, FontSize->10, FontSlant->"Italic"], Cell[StyleData["Message", "Printout"], CellMargins->{{55, 55}, {0, 3}}, FontSize->8] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Print"], CellMargins->{{55, Inherited}, {Inherited, Inherited}}, CellGroupingRules->"OutputGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GroupPageBreakWithin->False, GeneratedCell->True, CellAutoOverwrite->True, ShowCellLabel->False, CellLabelMargins->{{26, Inherited}, {Inherited, Inherited}}, DefaultFormatType->DefaultOutputFormatType, TextAlignment->Left, AutoItalicWords->{}, FormatType->InputForm, CounterIncrements->"Print", StyleMenuListing->None], Cell[StyleData["Print", "Printout"], CellMargins->{{54, 72}, {2, 10}}, FontSize->8] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Graphics"], CellMargins->{{55, Inherited}, {Inherited, Inherited}}, CellGroupingRules->"GraphicsGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GeneratedCell->True, CellAutoOverwrite->True, ShowCellLabel->False, DefaultFormatType->DefaultOutputFormatType, FormatType->InputForm, CounterIncrements->"Graphics", StyleMenuListing->None], Cell[StyleData["Graphics", "Printout"], CellMargins->{{55, 55}, {0, 15}}, ImageSize->{0.0625, 0.0625}, ImageMargins->{{35, Inherited}, {Inherited, 0}}, FontSize->8] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["CellLabel"], CellMargins->{{9, Inherited}, {Inherited, Inherited}}, StyleMenuListing->None, FontFamily->"Helvetica", FontSize->9, FontSlant->"Oblique"], Cell[StyleData["CellLabel", "Printout"], CellMargins->{{0, Inherited}, {Inherited, Inherited}}, FontSize->8] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Unique Styles", "Section"], Cell[CellGroupData[{ Cell[StyleData["Author"], CellMargins->{{45, Inherited}, {2, 20}}, CellGroupingRules->{"TitleGrouping", 20}, PageBreakBelow->False, CounterAssignments->{{"Section", 0}, {"Equation", 0}, {"Figure", 0}}, FontSize->14, FontWeight->"Bold"], Cell[StyleData["Author", "Printout"], CellMargins->{{36, Inherited}, {2, 30}}, FontSize->12] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Address"], CellMargins->{{45, Inherited}, {2, 2}}, CellGroupingRules->{"TitleGrouping", 30}, PageBreakBelow->False, LineSpacing->{1, 1}, CounterAssignments->{{"Section", 0}, {"Equation", 0}, {"Figure", 0}}, FontSize->12, FontSlant->"Italic"], Cell[StyleData["Address", "Printout"], CellMargins->{{36, Inherited}, {2, 2}}, FontSize->10] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Abstract"], CellMargins->{{45, 75}, {Inherited, 30}}, LineSpacing->{1, 0}], Cell[StyleData["Abstract", "Printout"], CellMargins->{{36, 67}, {Inherited, 50}}, FontSize->10] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Reference"], CellMargins->{{18, 40}, {2, 2}}, TextJustification->1, LineSpacing->{1, 0}], Cell[StyleData["Reference", "Printout"], CellMargins->{{18, 40}, {Inherited, 0}}, FontSize->8] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Styles for Automatic Numbering", "Section"], Cell["\<\ The following styles are useful for numbered equations, figures, etc. They \ automatically give the cell a FrameLabel containing a reference to a \ particular counter, and also increment that counter.\ \>", "Text"], Cell[CellGroupData[{ Cell[StyleData["NumberedEquation"], CellMargins->{{55, 10}, {0, 10}}, CellFrameLabels->{{None, Cell[ TextData[ {"(", CounterBox[ "NumberedEquation"], ")"}]]}, {None, None}}, DefaultFormatType->DefaultInputFormatType, CounterIncrements->"NumberedEquation", FormatTypeAutoConvert->False], Cell[StyleData["NumberedEquation", "Printout"], CellMargins->{{55, 55}, {0, 10}}, FontSize->10] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["NumberedFigure"], CellMargins->{{55, 145}, {2, 10}}, CellHorizontalScrolling->True, CellFrameLabels->{{None, None}, {Cell[ TextData[ {"Figure ", CounterBox[ "NumberedFigure"]}], FontWeight -> "Bold"], None}}, CounterIncrements->"NumberedFigure", FormatTypeAutoConvert->False], Cell[StyleData["NumberedFigure", "Printout"], FontSize->10] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["NumberedTable"], CellMargins->{{55, 145}, {2, 10}}, CellFrameLabels->{{None, None}, {Cell[ TextData[ {"Table ", CounterBox[ "NumberedTable"]}], FontWeight -> "Bold"], None}}, TextAlignment->Center, CounterIncrements->"NumberedTable", FormatTypeAutoConvert->False], Cell[StyleData["NumberedTable", "Printout"], CellMargins->{{18, Inherited}, {Inherited, Inherited}}, FontSize->10] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Formulas and Programming", "Section"], Cell[CellGroupData[{ Cell[RawData["\<\ Cell[StyleData[\"DisplayFormula\"], CellMargins->{{55, 10}, {2, 10}}, CellHorizontalScrolling->True, ScriptLevel->0, SingleLetterItalics->True, UnderoverscriptBoxOptions->{LimitsPositioning->True}]\ \>"], CellMargins->{{55, 10}, {2, 10}}, CellHorizontalScrolling->True, ScriptLevel->0, SingleLetterItalics->True, UnderoverscriptBoxOptions->{LimitsPositioning->True}], Cell[StyleData["DisplayFormula", "Printout"], FontSize->10] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["ChemicalFormula"], CellMargins->{{55, 10}, {2, 10}}, AutoSpacing->False, ScriptLevel->1, ScriptBaselineShifts->{0.6, Automatic}, SingleLetterItalics->False, ZeroWidthTimes->True], Cell[StyleData["ChemicalFormula", "Printout"], FontSize->10] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Program"], CellMargins->{{18, 10}, {Inherited, 6}}, FontFamily->"Courier"], Cell[StyleData["Program", "Printout"], CellMargins->{{18, 30}, {Inherited, 4}}, FontSize->9.5] }, Closed]] }, Closed]] }, Open ]] }] ] (*********************************************************************** 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, 39, 0, 91, "Title"], Cell[1773, 53, 37, 0, 47, "Subtitle"], Cell[1813, 55, 37, 0, 49, "Author"], Cell[1853, 57, 86, 4, 62, "Address"], Cell[1942, 63, 638, 15, 147, "Abstract"], Cell[CellGroupData[{ Cell[2605, 82, 32, 0, 69, "Section"], Cell[2640, 84, 481, 9, 96, "Text"], Cell[3124, 95, 699, 10, 159, "Text"], Cell[3826, 107, 546, 8, 138, "Text"], Cell[4375, 117, 231, 4, 54, "Text"], Cell[4609, 123, 377, 6, 96, "Text"], Cell[4989, 131, 252, 4, 75, "Text"], Cell[5244, 137, 225, 4, 54, "Text"], Cell[5472, 143, 314, 5, 75, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[5823, 153, 57, 0, 36, "Section"], Cell[5883, 155, 220, 4, 54, "Text"], Cell[6106, 161, 88, 2, 36, "Input"], Cell[CellGroupData[{ Cell[6219, 167, 85, 2, 36, "Input"], Cell[6307, 171, 85, 2, 36, "Output"] }, Open ]], Cell[6407, 176, 63, 0, 33, "Text"], Cell[CellGroupData[{ Cell[6495, 180, 79, 2, 36, "Input"], Cell[6577, 184, 86, 2, 36, "Output"] }, Open ]], Cell[6678, 189, 71, 0, 33, "Text"], Cell[6752, 191, 482, 14, 152, "Text", PageBreakWithin->False], Cell[7237, 207, 93, 2, 33, "Text"], Cell[7333, 211, 241, 7, 52, "Text", PageBreakWithin->False], Cell[7577, 220, 147, 3, 54, "Text"], Cell[CellGroupData[{ Cell[7749, 227, 88, 2, 40, "Input"], Cell[7840, 231, 83, 2, 36, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[7960, 238, 135, 3, 40, "Input"], Cell[8098, 243, 83, 2, 36, "Output"] }, Open ]], Cell[8196, 248, 155, 3, 54, "Text"], Cell[CellGroupData[{ Cell[8376, 255, 201, 5, 105, "Input"], Cell[8580, 262, 210, 4, 63, "Output"], Cell[8793, 268, 144, 3, 63, "Output"], Cell[8940, 273, 137, 3, 55, "Output"], Cell[9080, 278, 83, 2, 36, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[9200, 285, 136, 3, 36, "Input"], Cell[9339, 290, 84, 2, 36, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[9460, 297, 104, 2, 40, "Input"], Cell[9567, 301, 103, 2, 36, "Output"] }, Open ]], Cell[9685, 306, 105, 3, 33, "Text"], Cell[CellGroupData[{ Cell[9815, 313, 156, 4, 49, "Input"], Cell[9974, 319, 80, 2, 36, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[10103, 327, 51, 0, 36, "Section"], Cell[10157, 329, 434, 8, 96, "Text"], Cell[10594, 339, 540, 14, 152, "Text"], Cell[11137, 355, 106, 3, 33, "Text"], Cell[CellGroupData[{ Cell[11268, 362, 630, 12, 183, "Input"], Cell[11901, 376, 2222, 63, 70, "Output"] }, Open ]], Cell[14138, 442, 97, 2, 33, "Text"], Cell[14238, 446, 418, 12, 112, "Text", PageBreakWithin->False], Cell[14659, 460, 726, 12, 180, "Text"], Cell[CellGroupData[{ Cell[15410, 476, 92, 2, 36, "Input"], Cell[15505, 480, 230, 7, 70, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[15772, 492, 92, 2, 36, "Input"], Cell[15867, 496, 229, 7, 70, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[16145, 509, 40, 0, 36, "Section"], Cell[16188, 511, 577, 18, 77, "Text"], Cell[CellGroupData[{ Cell[16790, 533, 97, 2, 46, "Input"], Cell[16890, 537, 69, 2, 36, "Output"] }, Open ]], Cell[16974, 542, 227, 7, 55, "Text"], Cell[CellGroupData[{ Cell[17226, 553, 90, 2, 36, "Input"], Cell[17319, 557, 79, 2, 36, "Output"] }, Open ]], Cell[17413, 562, 466, 15, 56, "Text"], Cell[CellGroupData[{ Cell[17904, 581, 91, 2, 36, "Input"], Cell[17998, 585, 135, 4, 70, "Output"] }, Open ]], Cell[18148, 592, 115, 3, 33, "Text"], Cell[18266, 597, 349, 10, 92, "Text"], Cell[CellGroupData[{ Cell[18640, 611, 126, 3, 36, "Input"], Cell[18769, 616, 92, 2, 70, "Output"] }, Open ]], Cell[18876, 621, 210, 4, 54, "Text"], Cell[19089, 627, 316, 11, 92, "Text", PageBreakWithin->False], Cell[CellGroupData[{ Cell[19430, 642, 205, 5, 78, "Input"], Cell[19638, 649, 240, 7, 36, "Output"], Cell[19881, 658, 103, 2, 36, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[20033, 666, 57, 0, 36, "Section"], Cell[20093, 668, 108, 3, 33, "Text"], Cell[20204, 673, 463, 13, 152, "Text"], Cell[CellGroupData[{ Cell[20692, 690, 213, 4, 58, "Input"], Cell[20908, 696, 86, 2, 36, "Output"], Cell[20997, 700, 101, 2, 36, "Output"] }, Open ]], Cell[21113, 705, 195, 4, 54, "Text"], Cell[21311, 711, 1554, 30, 472, "Text", PageBreakWithin->False], Cell[22868, 743, 127, 3, 33, "Text"], Cell[CellGroupData[{ Cell[23020, 750, 158, 3, 57, "Input"], Cell[23181, 755, 417, 12, 36, "Output"], Cell[23601, 769, 305, 8, 36, "Output"] }, Open ]], Cell[23921, 780, 76, 0, 33, "Text"], Cell[CellGroupData[{ Cell[24022, 784, 100, 2, 36, "Input"], Cell[24125, 788, 154, 3, 36, "Output"] }, Open ]], Cell[24294, 794, 70, 0, 33, "Text"], Cell[CellGroupData[{ Cell[24389, 798, 99, 2, 36, "Input"], Cell[24491, 802, 95, 2, 36, "Output"] }, Open ]], Cell[24601, 807, 92, 2, 33, "Text"], Cell[CellGroupData[{ Cell[24718, 813, 250, 5, 78, "Input"], Cell[24971, 820, 560, 14, 57, "Output"] }, Open ]], Cell[25546, 837, 115, 3, 33, "Text"], Cell[CellGroupData[{ Cell[25686, 844, 134, 3, 36, "Input"], Cell[25823, 849, 176, 4, 36, "Output"] }, Open ]], Cell[26014, 856, 113, 3, 33, "Text"], Cell[CellGroupData[{ Cell[26152, 863, 283, 5, 99, "Input"], Cell[26438, 870, 700, 19, 67, "Output"] }, Open ]], Cell[27153, 892, 116, 3, 33, "Text"], Cell[CellGroupData[{ Cell[27294, 899, 139, 3, 57, "Input"], Cell[27436, 904, 135, 3, 36, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[27608, 912, 193, 4, 78, "Input"], Cell[27804, 918, 140, 3, 36, "Output"] }, Open ]], Cell[27959, 924, 76, 0, 33, "Text"], Cell[CellGroupData[{ Cell[28060, 928, 187, 4, 70, "Input"], Cell[28250, 934, 278, 8, 49, "Output"] }, Open ]], Cell[28543, 945, 357, 6, 96, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[28937, 956, 47, 0, 36, "Section"], Cell[28987, 958, 277, 5, 75, "Text"], Cell[CellGroupData[{ Cell[29289, 967, 127, 3, 49, "Input"], Cell[29419, 972, 149, 3, 70, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[29605, 980, 113, 2, 36, "Input"], Cell[29721, 984, 142, 4, 70, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[29912, 994, 35, 0, 36, "Section"], Cell[29950, 996, 235, 4, 75, "Text"], Cell[30188, 1002, 352, 11, 92, "Text", PageBreakWithin->False], Cell[CellGroupData[{ Cell[30565, 1017, 277, 8, 36, "Input"], Cell[30845, 1027, 132, 3, 70, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[31014, 1035, 317, 8, 57, "Input"], Cell[31334, 1045, 299, 9, 70, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[31670, 1059, 315, 8, 49, "Input"], Cell[31988, 1069, 168, 4, 70, "Output"] }, Open ]], Cell[32171, 1076, 464, 15, 112, "Text"], Cell[32638, 1093, 87, 2, 33, "Text"], Cell[CellGroupData[{ Cell[32750, 1099, 160, 4, 58, "Input"], Cell[32913, 1105, 134, 3, 70, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[33084, 1113, 160, 4, 58, "Input"], Cell[33247, 1119, 100, 3, 70, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[33396, 1128, 42, 0, 36, "Section"], Cell[33441, 1130, 103, 3, 33, "Text"], Cell[33547, 1135, 379, 11, 112, "Text"], Cell[CellGroupData[{ Cell[33951, 1150, 87, 2, 36, "Input"], Cell[34041, 1154, 71, 2, 70, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[34149, 1161, 120, 3, 36, "Input"], Cell[34272, 1166, 87, 2, 70, "Output"] }, Open ]], Cell[34374, 1171, 167, 3, 54, "Text"], Cell[34544, 1176, 441, 11, 132, "Text", PageBreakWithin->False], Cell[CellGroupData[{ Cell[35010, 1191, 113, 2, 36, "Input"], Cell[35126, 1195, 439, 12, 70, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[35602, 1212, 119, 3, 36, "Input"], Cell[35724, 1217, 351, 9, 70, "Output"] }, Open ]], Cell[36090, 1229, 125, 3, 33, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[36252, 1237, 56, 0, 36, "Section"], Cell[36311, 1239, 466, 9, 96, "Text"], Cell[36780, 1250, 556, 14, 152, "Text", PageBreakWithin->False], Cell[37339, 1266, 213, 5, 54, "Text"], Cell[CellGroupData[{ Cell[37577, 1275, 111, 3, 57, "Input"], Cell[37691, 1280, 80, 2, 36, "Output"], Cell[37774, 1284, 63, 2, 36, "Output"] }, Open ]], Cell[37852, 1289, 108, 3, 33, "Text"], Cell[37963, 1294, 92, 2, 36, "Input"], Cell[38058, 1298, 57, 0, 33, "Text"], Cell[38118, 1300, 159, 3, 36, "Input"], Cell[38280, 1305, 96, 2, 33, "Text"], Cell[CellGroupData[{ Cell[38401, 1311, 78, 2, 36, "Input"], Cell[38482, 1315, 105, 2, 52, "Output"] }, Open ]], Cell[38602, 1320, 148, 3, 54, "Text"], Cell[CellGroupData[{ Cell[38775, 1327, 94, 2, 36, "Input"], Cell[38872, 1331, 84, 2, 52, "Output"] }, Open ]], Cell[38971, 1336, 110, 3, 33, "Text"], Cell[CellGroupData[{ Cell[39106, 1343, 99, 2, 36, "Input"], Cell[39208, 1347, 83, 2, 36, "Output"] }, Open ]], Cell[39306, 1352, 57, 0, 33, "Text"], Cell[39366, 1354, 158, 3, 36, "Input"], Cell[39527, 1359, 125, 3, 33, "Text"], Cell[CellGroupData[{ Cell[39677, 1366, 95, 2, 36, "Input"], Cell[39775, 1370, 147, 3, 36, "Output"] }, Open ]], Cell[39937, 1376, 54, 0, 33, "Text"], Cell[39994, 1378, 97, 2, 36, "Input"], Cell[40094, 1382, 126, 3, 36, "Input"], Cell[CellGroupData[{ Cell[40245, 1389, 116, 2, 36, "Input"], Cell[40364, 1393, 103, 2, 36, "Output"] }, Open ]], Cell[40482, 1398, 228, 4, 54, "Text"], Cell[CellGroupData[{ Cell[40735, 1406, 134, 3, 57, "Input"], Cell[40872, 1411, 138, 3, 36, "Output"] }, Open ]], Cell[41025, 1417, 259, 5, 75, "Text"], Cell[41287, 1424, 620, 15, 172, "Text", PageBreakWithin->False], Cell[41910, 1441, 164, 3, 54, "Text"], Cell[42077, 1446, 120, 3, 58, "Input"], Cell[CellGroupData[{ Cell[42222, 1453, 167, 4, 79, "Input"], Cell[42392, 1459, 743, 22, 61, "Print"], Cell[43138, 1483, 89, 2, 49, "Output"] }, Open ]], Cell[43242, 1488, 1021, 17, 201, "Text"], Cell[CellGroupData[{ Cell[44288, 1509, 168, 4, 79, "Input"], Cell[44459, 1515, 744, 22, 61, "Print"], Cell[45206, 1539, 105, 2, 30, "Message"], Cell[45314, 1543, 66, 2, 36, "Output"] }, Open ]], Cell[45395, 1548, 93, 2, 33, "Text"], Cell[CellGroupData[{ Cell[45513, 1554, 169, 4, 79, "Input"], Cell[45685, 1560, 739, 21, 49, "Print"], Cell[46427, 1583, 105, 2, 30, "Message"], Cell[46535, 1587, 66, 2, 36, "Output"] }, Open ]], Cell[46616, 1592, 63, 0, 33, "Text"], Cell[CellGroupData[{ Cell[46704, 1596, 173, 4, 79, "Input"], Cell[46880, 1602, 716, 21, 61, "Print"], Cell[47599, 1625, 141, 3, 36, "Output"] }, Open ]], Cell[47755, 1631, 137, 3, 54, "Text"], Cell[47895, 1636, 65, 0, 33, "Text"], Cell[47963, 1638, 824, 22, 312, "Text", PageBreakWithin->False], Cell[48790, 1662, 172, 3, 54, "Text"], Cell[48965, 1667, 103, 2, 36, "Input"], Cell[49071, 1671, 113, 2, 52, "Input"], Cell[49187, 1675, 217, 8, 33, "Text"], Cell[CellGroupData[{ Cell[49429, 1687, 125, 3, 36, "Input"], Cell[49557, 1692, 111, 2, 42, "Message"], Cell[49671, 1696, 221, 5, 51, "Message"], Cell[49895, 1703, 673, 20, 56, "Print"], Cell[50571, 1725, 105, 2, 30, "Message"], Cell[50679, 1729, 66, 2, 36, "Output"] }, Open ]], Cell[50760, 1734, 42, 0, 33, "Text"], Cell[CellGroupData[{ Cell[50827, 1738, 161, 3, 57, "Input"], Cell[50991, 1743, 505, 14, 56, "Print"], Cell[51499, 1759, 95, 2, 62, "Output"] }, Open ]], Cell[51609, 1764, 98, 2, 33, "Text"], Cell[CellGroupData[{ Cell[51732, 1770, 147, 3, 57, "Input"], Cell[51882, 1775, 523, 14, 56, "Print"], Cell[52408, 1791, 103, 2, 62, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[52560, 1799, 39, 0, 36, "Section"], Cell[52602, 1801, 248, 7, 54, "Text"], Cell[52853, 1810, 316, 10, 112, "Text", PageBreakWithin->False], Cell[53172, 1822, 304, 5, 75, "Text"], Cell[53479, 1829, 101, 2, 36, "Input"], Cell[53583, 1833, 68, 0, 33, "Text"], Cell[CellGroupData[{ Cell[53676, 1837, 70, 2, 36, "Input"], Cell[53749, 1841, 107, 2, 36, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[53893, 1848, 73, 2, 36, "Input"], Cell[53969, 1852, 67, 1, 30, "Print"] }, Open ]], Cell[54051, 1856, 276, 8, 54, "Text"], Cell[CellGroupData[{ Cell[54352, 1868, 87, 2, 36, "Input"], Cell[54442, 1872, 91, 2, 36, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[54570, 1879, 90, 2, 36, "Input"], Cell[54663, 1883, 84, 2, 36, "Output"] }, Open ]], Cell[54762, 1888, 155, 3, 54, "Text"], Cell[CellGroupData[{ Cell[54942, 1895, 86, 2, 36, "Input"], Cell[55031, 1899, 126, 2, 30, "Message"], Cell[55160, 1903, 63, 2, 36, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[55272, 1911, 39, 0, 36, "Section"], Cell[55314, 1913, 522, 8, 117, "Text"], Cell[55839, 1923, 57, 0, 33, "Text"], Cell[55899, 1925, 902, 22, 312, "Text", PageBreakWithin->False], Cell[56804, 1949, 109, 3, 33, "Text"], Cell[56916, 1954, 154, 3, 57, "Input"], Cell[57073, 1959, 196, 5, 33, "Text"], Cell[CellGroupData[{ Cell[57294, 1968, 159, 3, 78, "Input"], Cell[57456, 1973, 220, 4, 57, "Output"] }, Open ]], Cell[57691, 1980, 280, 5, 75, "Text"], Cell[CellGroupData[{ Cell[57996, 1989, 88, 2, 36, "Input"], Cell[58087, 1993, 86, 2, 36, "Output"] }, Open ]], Cell[58188, 1998, 701, 15, 117, "Text"], Cell[CellGroupData[{ Cell[58914, 2017, 362, 7, 143, "Input"], Cell[59279, 2026, 88, 2, 36, "Output"], Cell[59370, 2030, 91, 2, 36, "Output"], Cell[59464, 2034, 91, 2, 36, "Output"], Cell[59558, 2038, 94, 2, 59, "Output"], Cell[59655, 2042, 89, 2, 36, "Output"], Cell[59747, 2046, 73, 2, 36, "Output"] }, Open ]], Cell[59835, 2051, 241, 5, 54, "Text"], Cell[60079, 2058, 158, 3, 99, "Input"], Cell[CellGroupData[{ Cell[60262, 2065, 107, 2, 36, "Input"], Cell[60372, 2069, 241, 5, 57, "Output"] }, Open ]], Cell[60628, 2077, 106, 3, 33, "Text"], Cell[CellGroupData[{ Cell[60759, 2084, 86, 2, 36, "Input"], Cell[60848, 2088, 79, 2, 36, "Output"] }, Open ]], Cell[60942, 2093, 113, 3, 33, "Text"], Cell[CellGroupData[{ Cell[61080, 2100, 181, 4, 99, "Input"], Cell[61264, 2106, 182, 4, 55, "Output"], Cell[61449, 2112, 111, 2, 52, "Output"], Cell[61563, 2116, 91, 2, 52, "Output"] }, Open ]], Cell[61669, 2121, 138, 3, 54, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[61844, 2129, 62, 0, 36, "Section"], Cell[61909, 2131, 169, 3, 54, "Text"], Cell[62081, 2136, 350, 6, 75, "Text"], Cell[62434, 2144, 40, 0, 33, "Text"], Cell[CellGroupData[{ Cell[62499, 2148, 299, 6, 78, "Input"], Cell[62801, 2156, 950, 22, 112, "Output"] }, Open ]], Cell[63766, 2181, 410, 10, 75, "Text"], Cell[CellGroupData[{ Cell[64201, 2195, 388, 8, 120, "Input"], Cell[64592, 2205, 782, 24, 49, "Output"] }, Open ]], Cell[65389, 2232, 181, 4, 54, "Text"], Cell[CellGroupData[{ Cell[65595, 2240, 241, 5, 36, "Input"], Cell[65839, 2247, 620, 16, 69, "Output"] }, Open ]], Cell[66474, 2266, 98, 2, 33, "Text"], Cell[66575, 2270, 127, 3, 36, "Input"], Cell[CellGroupData[{ Cell[66727, 2277, 165, 3, 79, "Input"], Cell[66895, 2282, 1260, 34, 67, "Output"] }, Open ]] }, Closed]] }, Open ]] } ] *) (*********************************************************************** End of Mathematica Notebook file. ***********************************************************************)