diff --git a/Makefile.pamphlet b/Makefile.pamphlet index ba4541c..9e78ca8 100644 --- a/Makefile.pamphlet +++ b/Makefile.pamphlet @@ -711,7 +711,7 @@ needed at the moment because certain functions do not yet work on all platforms. <>= SRCDIRS="bootdir interpdir sharedir algebradir etcdir clefdir docdir \ - graphdir smandir hyperdir inputdir " + graphdir smandir hyperdir inputdir browserdir" @ \subsubsection{The [[GCLVERSION]] variable } [[GCLVERSION]] is the name of the GCL version. The one we used to diff --git a/books/bookvol11.pamphlet b/books/bookvol11.pamphlet index 4213c45..c09e394 100644 --- a/books/bookvol11.pamphlet +++ b/books/bookvol11.pamphlet @@ -215,26 +215,26 @@ This book contains the Firefox browser AJAX routines. \end{verbatim} \section{The Makefile} +This Makefile assumes that it is being run in the final target +directory of the build system. We walk the list of PAGES and +untangle them from this file, along with any support files +referenced by the pages. <<*>>= -TANGLE=${AXIOM}/bin/lib/notangle +BOOK=${SPD}/books/bookvol11.pamphlet -%.xhtml: bookvol11.pamphlet +%.xhtml: ${BOOK} @ echo making $*.xhtml - @ ${TANGLE} -R"$*.xhtml" bookvol11.pamphlet > $*.xhtml + @ ${TANGLE} -R"$*.xhtml" ${BOOK} > $*.xhtml <> all: ${PAGES} @ mkdir -p bitmaps - @ ${TANGLE} -R"axiom1.bitmap" bookvol11.pamphlet >bitmaps/axiom1.bitmap - @ ${TANGLE} -R"rcm3720.input" bookvol11.pamphlet >rcm3720.input - @ ${TANGLE} -R"strang.input" bookvol11.pamphlet >strang.input - @ ${TANGLE} -R"signatures.txt" bookvol11.pamphlet >signatures.txt - -clean: - @ rm -f *.xhtml - @ rm -f rcm3720.input - @ rm -f signatures.txt + @ ${TANGLE} -R"axiom1.bitmap" ${BOOK} >bitmaps/axiom1.bitmap + @ ${TANGLE} -R"rcm3720.input" ${BOOK} >rcm3720.input + @ ${TANGLE} -R"strang.input" ${BOOK} >strang.input + @ ${TANGLE} -R"signatures.txt" ${BOOK} >signatures.txt + @ \section{Building new pages} diff --git a/books/bookvol7.pamphlet b/books/bookvol7.pamphlet index 7d7cb57..74d6409 100644 --- a/books/bookvol7.pamphlet +++ b/books/bookvol7.pamphlet @@ -19832,26 +19832,11 @@ SCRIPTS=${OUTLIB}/htsearch ${OUTLIB}/presea BINFILES= ${OUT}/hypertex ${OUT}/htadd ${OUT}/htsearch ${OUTLIB}/spadbuf \ ${OUTLIB}/hthits ${OUTLIB}/ex2ht -all: ${OBJS} ${SCRIPTS} ${BINFILES} \ - ${PAGES}/ht.db ${HYPER}/rootpage.xhtml \ - ${HYPER}/axbook \ +all: ${OBJS} ${SCRIPTS} ${BINFILES} ${PAGES}/ht.db ${HYPER}/axbook \ ${HYPER}/bigbayou.png ${HYPER}/doctitle.png @cp ${IN}/bitmaps/* ${HYPER}/bitmaps @ echo 155 finished ${IN} -clean: - @echo skipping ${MNT}/${SYS}/doc/bookvol11.dvi - @echo 156 cleaning ${SRC}/hyper - -${HYPER}/rootpage.xhtml: ${IN}/bookvol11.pamphlet - @ echo 150 making ${HYPER}/xhtml from ${IN}/bookvol11.pamphlet - ( cd ${HYPER} ; \ - cp ${IN}/bookvol11.pamphlet . ; \ - ${TANGLE} -t8 bookvol11.pamphlet >Makefile.pages ; \ - make -j 10 -f Makefile.pages ; \ - rm -f Makefile.pages ; \ - rm -f bookvol11.pamphlet ) - ${HYPER}/bigbayou.png: ${IN}/bigbayou.png @ echo 151 making ${HYPER}/bigbayou.png from ${IN}/bigbayou.png @ cp ${IN}/bigbayou.png ${HYPER}/bigbayou.png diff --git a/changelog b/changelog index 29e3bd8..a509824 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,7 @@ +20080610 tpd books/bookvol7 remove bookvol11 handling +20080610 tpd books/bookvol11 update the Makefile +20080610 tpd Makefile add browserdir to SRCDIR variable +20080610 tpd src/Makefile write browserdir stanze for bookvol11 20080609 tpd src/hyper/Makefile removed (use bookvol7) 20080609 tpd src/hyper/addfile removed (use bookvol7) 20080609 tpd src/hyper/bitmaps removed (use bookvol7) diff --git a/src/Makefile.pamphlet b/src/Makefile.pamphlet index 39f7ae3..b40d07f 100644 --- a/src/Makefile.pamphlet +++ b/src/Makefile.pamphlet @@ -12,15 +12,6 @@ \section{Directory overview} \subsection{Environment variables} DIRS is a list of directories with the suffix {\bf dir}. -DOCS is the same list with {\bf dir} suffix replaced with {\bf document}. -CLNS is the same list with {\bf dir} suffix replaced with {\bf clean}. - -Thus if we have a new directory {\bf foo} add it to the {\bf DIRS} -variable as {\bf foodir}. It will automatically be added to {\bf DOCS} -as {\bf foodocument} and {\bf CLNS} as {\bf fooclean}. - -These variables are used to drive the make, make document, and -make clean processes, respectively. There is a partial order of the directories which is not apparent. @@ -50,8 +41,6 @@ stanza to this Makefile you should check that list. <>= SETUP=scriptsdir libdir DIRS=${SRCDIRS} -DOCS=scriptsdocument libdocument ${DIRS:dir=document} -CLNS=scriptsclean libclean ${DIRS:dir=clean} @ \subsection{The scripts directory} @@ -142,23 +131,6 @@ smanclean: ${SRC}/sman/Makefile @rm -f ${SRC}/sman/Makefile.dvi @ -\subsection{The hyper directory} -Hyperdoc is the Axiom document browser. -<>= -hyperdir: ${SPD}/books/bookvol7.pamphlet - @echo 13 making hyperdoc from bookvol7 - @mkdir -p ${INT}/hyper - @mkdir -p ${OBJ}/${SYS}/hyper - @mkdir -p ${OBJ}/${SYS}/bin - @mkdir -p ${OBJ}/${SYS}/lib - @mkdir -p ${MNT}/${SYS}/doc/hypertex/bitmaps - @mkdir -p ${MNT}/${SYS}/doc/hypertex/pages - @mkdir -p ${MNT}/${SYS}/doc/src/hyper - @(cd ${INT}/hyper ; \ - ${TANGLE} -t8 ${SPD}/books/bookvol7.pamphlet >Makefile ; \ - ${ENV} ${MAKE} ) - -@ \subsection{The share directory} The {\bf share} directory files that are shared by all version of the system. @@ -520,10 +492,27 @@ docclean: ${SRC}/doc/Makefile @rm -f ${SRC}/doc/Makefile.dvi @ -\subsection{The graph directory} +\subsection{Volume 7:Axiom Hyperdoc book} +Hyperdoc is the Axiom document browser. +<>= +hyperdir: ${SPD}/books/bookvol7.pamphlet + @echo 7 making hyperdoc from bookvol7 + @mkdir -p ${INT}/hyper + @mkdir -p ${OBJ}/${SYS}/hyper + @mkdir -p ${OBJ}/${SYS}/bin + @mkdir -p ${OBJ}/${SYS}/lib + @mkdir -p ${MNT}/${SYS}/doc/hypertex/bitmaps + @mkdir -p ${MNT}/${SYS}/doc/hypertex/pages + @mkdir -p ${MNT}/${SYS}/doc/src/hyper + @(cd ${INT}/hyper ; \ + ${TANGLE} -t8 ${SPD}/books/bookvol7.pamphlet >Makefile ; \ + ${ENV} ${MAKE} ) + +@ +\subsection{Volume 8: Axiom Graphics book} <>= graphdir: ${SPD}/books/bookvol8.pamphlet - @echo 45 making graph from bookvol8 + @echo 8 making graph from bookvol8 @mkdir -p ${INT}/graph/parabola @mkdir -p ${OBJ}/${SYS}/graph @mkdir -p ${INT}/graph @@ -532,6 +521,21 @@ graphdir: ${SPD}/books/bookvol8.pamphlet ${ENV} ${MAKE} ) @ +\subsection{Volume 11: Axiom Browser book} +These are the pages for the Axiom Firefox browser interface. +They can be expanded in parallel since they (currently) need no +post processing. Thus the "-j 10" argument to make. We use +``Makefile11'' so that future parallel builds don't step on each other. +<>= +browserdir: ${SPD}/books/bookvol11.pamphlet + @echo 11 making browser from bookvol11 + @mkdir -p ${MNT}/${SYS}/doc/hypertex/bitmaps + @(cd ${MNT}/${SYS}/doc/hypertex ; \ + ${TANGLE} -t8 ${SPD}/books/bookvol11.pamphlet >Makefile11 ; \ + ${ENV} ${MAKE} -j 10 -f Makefile11 ; \ + rm -f Makefile11 ) + +@ \section{The Makefile} This Makefile gets called twice during the system build. The first call is to the {\bf setup} stanza which will execute the {\bf scriptsdir} @@ -553,7 +557,6 @@ setup: ${SETUP} <> <> <> -<> <> <> <> @@ -563,13 +566,10 @@ setup: ${SETUP} <> <> <> -<> - -document: ${DOCS} - @echo 50 making docs in ${SRC} -clean: ${CLNS} - @echo 51 cleaning ${SRC} +<> +<> +<> @ \eject diff --git a/src/hyper/bookvol11.pamphlet b/src/hyper/bookvol11.pamphlet deleted file mode 100644 index e8c22b8..0000000 --- a/src/hyper/bookvol11.pamphlet +++ /dev/null @@ -1,50494 +0,0 @@ -\documentclass{book} -\usepackage{axiom} -\usepackage{makeidx} -\makeindex -\usepackage{graphicx} -\begin{document} -\begin{titlepage} -\center{\includegraphics{ps/axiomfront.ps}} -\vskip 0.1in -\includegraphics{ps/bluebayou.ps}\\ -\vskip 0.1in -{\Huge{The 30 Year Horizon}} -\vskip 0.1in -$$ -\begin{array}{lll} -Manuel\ Bronstein & William\ Burge & Timothy\ Daly \\ -James\ Davenport & Michael\ Dewar & Martin\ Dunstan \\ -Albrecht\ Fortenbacher & Patrizia\ Gianni & Johannes\ Grabmeier \\ -Jocelyn\ Guidry & Richard\ Jenks & Larry\ Lambe \\ -Michael\ Monagan & Scott\ Morrison & William\ Sit \\ -Jonathan\ Steinbach & Robert\ Sutor & Barry\ Trager \\ -Stephen\ Watt & Jim\ Wen & Clifton\ Williamson -\end{array} -$$ -\center{\large{VOLUME 11: BROWSER}} -\end{titlepage} -\pagenumbering{roman} -\begin{verbatim} -Portions Copyright (c) 2007 Timothy Daly -Portions Copyright (c) 2007 Alfredo Portes -Portions Copyright (c) 2007 Arthur Ralfs - -The Blue Bayou image Copyright (c) 2004 Jocelyn Guidry - -This book is licensed as follows: - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -\end{verbatim} - -Inclusion of names in the list of credits is based on historical -information and is as accurate as possible. Inclusion of names -does not in any way imply an endorsement but represents historical -influence on Axiom development. -\vfill -\eject -\begin{tabular}{lll} -Cyril Alberga & Roy Adler & Richard Anderson\\ -George Andrews & Henry Baker & Stephen Balzac\\ -Yurij Baransky & David R. Barton & Gerald Baumgartner\\ -Gilbert Baumslag & Fred Blair & Vladimir Bondarenko\\ -Mark Botch & Alexandre Bouyer & Peter A. Broadbery\\ -Martin Brock & Manuel Bronstein & Florian Bundschuh\\ -William Burge & Quentin Carpent & Bob Caviness\\ -Bruce Char & Cheekai Chin & David V. Chudnovsky\\ -Gregory V. Chudnovsky & Josh Cohen & Christophe Conil\\ -Don Coppersmith & George Corliss & Robert Corless\\ -Gary Cornell & Meino Cramer & Claire Di Crescenzo\\ -Timothy Daly Sr. & Timothy Daly Jr. & James H. Davenport\\ -Jean Della Dora & Gabriel Dos Reis & Michael Dewar\\ -Claire DiCrescendo & Sam Dooley & Lionel Ducos\\ -Martin Dunstan & Brian Dupee & Dominique Duval\\ -Robert Edwards & Heow Eide-Goodman & Lars Erickson\\ -Richard Fateman & Bertfried Fauser & Stuart Feldman\\ -Brian Ford & Albrecht Fortenbacher & George Frances\\ -Constantine Frangos & Timothy Freeman & Korrinn Fu\\ -Marc Gaetano & Rudiger Gebauer & Kathy Gerber\\ -Patricia Gianni & Holger Gollan & Teresa Gomez-Diaz\\ -Laureano Gonzalez-Vega& Stephen Gortler & Johannes Grabmeier\\ -Matt Grayson & James Griesmer & Vladimir Grinberg\\ -Oswald Gschnitzer & Jocelyn Guidry & Steve Hague\\ -Vilya Harvey & Satoshi Hamaguchi & Martin Hassner\\ -Ralf Hemmecke & Henderson & Antoine Hersen\\ -Pietro Iglio & Richard Jenks & Kai Kaminski\\ -Grant Keady & Tony Kennedy & Paul Kosinski\\ -Klaus Kusche & Bernhard Kutzler & Larry Lambe\\ -Frederic Lehobey & Michel Levaud & Howard Levy\\ -Rudiger Loos & Michael Lucks & Richard Luczak\\ -Camm Maguire & Bob McElrath & Michael McGettrick\\ -Ian Meikle & David Mentre & Victor S. Miller\\ -Gerard Milmeister & Mohammed Mobarak & H. Michael Moeller\\ -Michael Monagan & Marc Moreno-Maza & Scott Morrison\\ -Mark Murray & William Naylor & C. Andrew Neff\\ -John Nelder & Godfrey Nolan & Arthur Norman\\ -Jinzhong Niu & Michael O'Connor & Kostas Oikonomou\\ -Julian A. Padget & Bill Page & Jaap Weel\\ -Susan Pelzel & Michel Petitot & Didier Pinchon\\ -Claude Quitte & Norman Ramsey & Michael Richardson\\ -Renaud Rioboo & Jean Rivlin & Nicolas Robidoux\\ -Simon Robinson & Michael Rothstein & Martin Rubey\\ -Philip Santas & Alfred Scheerhorn & William Schelter\\ -Gerhard Schneider & Martin Schoenert & Marshall Schor\\ -Fritz Schwarz & Nick Simicich & William Sit\\ -Elena Smirnova & Jonathan Steinbach & Christine Sundaresan\\ -Robert Sutor & Moss E. Sweedler & Eugene Surowitz\\ -James Thatcher & Baldir Thomas & Mike Thomas\\ -Dylan Thurston & Barry Trager & Themos T. Tsikas\\ -Gregory Vanuxem & Bernhard Wall & Stephen Watt\\ -Juergen Weiss & M. Weller & Mark Wegman\\ -James Wen & Thorsten Werther & Michael Wester\\ -John M. Wiley & Berhard Will & Clifton J. Williamson\\ -Stephen Wilson & Shmuel Winograd & Robert Wisbauer\\ -Sandra Wityak & Waldemar Wiwianka & Knut Wolf\\ -Clifford Yapp & David Yun & Richard Zippel\\ -Evelyn Zoernack & Bruno Zuercher & Dan Zwillinger -\end{tabular} -\eject -\tableofcontents -\vfill -\eject -\setlength{\parindent}{0em} -\setlength{\parskip}{1ex} -{\Large{\bf New Foreword}} -\vskip .25in - -On October 1, 2001 Axiom was withdrawn from the market and ended -life as a commercial product. -On September 3, 2002 Axiom was released under the Modified BSD -license, including this document. -On August 27, 2003 Axiom was released as free and open source -software available for download from the Free Software Foundation's -website, Savannah. - -Work on Axiom has had the generous support of the Center for -Algorithms and Interactive Scientific Computation (CAISS) at -City College of New York. Special thanks go to Dr. Gilbert -Baumslag for his support of the long term goal. - -The online version of this documentation is roughly 1000 pages. -In order to make printed versions we've broken it up into three -volumes. The first volume is tutorial in nature. The second volume -is for programmers. The third volume is reference material. We've -also added a fourth volume for developers. All of these changes -represent an experiment in print-on-demand delivery of documentation. -Time will tell whether the experiment succeeded. - -Axiom has been in existence for over thirty years. It is estimated to -contain about three hundred man-years of research and has, as of -September 3, 2003, 143 people listed in the credits. All of these -people have contributed directly or indirectly to making Axiom -available. Axiom is being passed to the next generation. I'm looking -forward to future milestones. - -With that in mind I've introduced the theme of the ``30 year horizon''. -We must invent the tools that support the Computational Mathematician -working 30 years from now. How will research be done when every bit of -mathematical knowledge is online and instantly available? What happens -when we scale Axiom by a factor of 100, giving us 1.1 million domains? -How can we integrate theory with code? How will we integrate theorems -and proofs of the mathematics with space-time complexity proofs and -running code? What visualization tools are needed? How do we support -the conceptual structures and semantics of mathematics in effective -ways? How do we support results from the sciences? How do we teach -the next generation to be effective Computational Mathematicians? - -The ``30 year horizon'' is much nearer than it appears. - -\vskip .25in -%\noindent -Tim Daly\\ -CAISS, City College of New York\\ -November 10, 2003 ((iHy)) -\vfill -\eject -\pagenumbering{arabic} -\setcounter{chapter}{0} % Chapter 1 -\chapter{Overview} -This book contains the Firefox browser AJAX routines. - -\section{Build Instructions} -\begin{verbatim} - mkdir -p /home/silver/bitmaps - cp bookvol11.pamphlet /home/silver - cd /home/silver - export AXIOM=(where) - export PATH=$AXIOM/bin/lib:$AXIOM/bin:$PATH - notangle -t8 bookvol11.pamphlet > Makefile - make -j 10 - axiom -nox - -> )set mes auto off - -> )set out mathml on - -> axServer(8085,multiServ)$AXSERV - - Now start your browser and go to: - file:///home/silver/rootpage.xhtml - and then do: - Basic Commands -> Calculus -> Differentiate -> Continue - Basic Commands -> Matrix -> Continue - - You should see the result of the differentiate appear inline in the - page. You can change the values in the text areas, click continue, - and see the new result. -\end{verbatim} - -\section{The Makefile} -<<*>>= -TANGLE=${AXIOM}/bin/lib/notangle - -%.xhtml: bookvol11.pamphlet - @ echo making $*.xhtml - @ ${TANGLE} -R"$*.xhtml" bookvol11.pamphlet > $*.xhtml - -<> - -all: ${PAGES} - @ mkdir -p bitmaps - @ ${TANGLE} -R"axiom1.bitmap" bookvol11.pamphlet >bitmaps/axiom1.bitmap - @ ${TANGLE} -R"rcm3720.input" bookvol11.pamphlet >rcm3720.input - @ ${TANGLE} -R"strang.input" bookvol11.pamphlet >strang.input - @ ${TANGLE} -R"signatures.txt" bookvol11.pamphlet >signatures.txt - -clean: - @ rm -f *.xhtml - @ rm -f rcm3720.input - @ rm -f signatures.txt -@ - -\section{Building new pages} -To add a new page you need to create a page with the default layout below -and add the name of the page to the PAGES variable below. - -Most of the pages have a default layout of the form: -\begin{verbatim} -\subsection{pagename.xhtml} -<>= -<> - - -<> -
Page subtitle goes here
-
-your basic page text goes here. -<> -@ -\end{verbatim} -There are several things to observe here: -
    -
  1. Each page lives in its own subsection and its own chunk.
  2. -
  3. The pagename and the chunkname are the same
  4. -
  5. The chunk includes the @<>
  6. -
  7. The chunk includes the @<>
  8. -
  9. The chunk includes the @<>
  10. -
-The default page layout cannot communicate with Axiom. - -\subsection{Communicating with Axiom} -If your page needs to communicate with Axiom you need to add some -information in the header of the page. -The default page that talks to Axiom has the form: -\begin{verbatim} -\subsection{pagename.xhtml} -@<>= -@<> - - - -@<> -
Page subtitle goes here
-
-your text goes here -your communication blocks go here -@<> -\end{verbatim} - -\subsection{Handling statements with no free variables} -Use a makeRequest call with a parameter of the id. -Note that the div with id of ``ansXX'' will get replaced -automatically and the ``ans'' prefix is required. -\begin{verbatim} -
  • - -
    -
  • -\end{verbatim} - -\subsection{Handling statements with free variables} -Free variables exist are used in statements but they are defined in -other statements. To make sure the free variables have the correct -values you need to include an explicit list of the other ids that -need to be executed {\sl before} this statement. You do this with -a call to ``handleFree''. It expects a list, enclosed in brackets, -of the ids to execute in order. Be certain that the current id is -at the end of the list. -\begin{verbatim} -
  • - -
    -
  • -\end{verbatim} - -\subsection{Handling domain database lookups} -Use an anchor tag of the form: -\begin{verbatim} -Vector -\end{verbatim} -This will be interpreted by Axiom to mean that you want to do a -lookup on a domain, category, or package whose name follows the -question mark. Note that the domain name should NOT be an abbreviation. - -\subsection{Handling )show domain} -Use a block containing a showcall of the form: -\begin{verbatim} -
  • - -
    -
  • -\end{verbatim} -Note that the ``)show'' must be at the beginning of the line -and that there can only be one space between the word show and -the following argument. - -\subsection{Handling lisp expressions} -Use a block containing a lispcall of the form: -
  • - -
    -
  • -Note that this works but you can easily blow away your Axiom -session with random statements. Let the coder beware. - -\subsection{Handling expressions that have no output} -Use the CSS class=``noresult'' tag on the input form. -This causes the item to show up in black text. It is -still executable and is generally executed by handleFree -calls because it contains definitions. However, things like -function definitions in Axiom return no interesting output -so there is no point in clicking on them. -\begin{verbatim} -
  • - -
    -
  • -\end{verbatim} - - -\section{Defined Pages} -Every page in this file is extracted by the Makefile. This is the list -of pages that will be extracted. It is organized roughly in the hierarchy -that you see in the browser pages. This is convention and is not required. - -The page hierarchy (used by the Makefile) is: -<>= -PAGES=rootpage.xhtml \ - testpage.xhtml \ - commandline.xhtml \ - menufileopen.xhtml \ - menufileread.xhtml \ - menufilesave.xhtml \ - menufilesaveas.xhtml \ - menufileloadlibrary.xhtml \ - menufileinputfile.xhtml \ - menufiletogglespool.xhtml \ - menufileprint.xhtml \ - menufileexit.xhtml \ - menueditcopy.xhtml \ - menueditcopytext.xhtml \ - menueditcopytex.xhtml \ - menueditdeleteselection.xhtml \ - menueditcopyasimage.xhtml \ - menueditselectiontoimage.xhtml \ - menueditselectiontoinput.xhtml \ - menueditcut.xhtml \ - menueditpaste.xhtml \ - menuaxiominterrupt.xhtml \ - menuaxiomrestart.xhtml \ - menuaxiomclearmemory.xhtml \ - menuaxiomaddtopath.xhtml \ - menuaxiomshowfunctions.xhtml \ - menuaxiomshowdefinition.xhtml \ - menuaxiomshowvariables.xhtml \ - menuaxiomdeletefunction.xhtml \ - menuaxiomdeletevariable.xhtml \ - menuaxiomtoggletimedisplay.xhtml \ - menuaxiomset.xhtml \ - menuaxiomdisplay.xhtml \ - menuequationssolve.xhtml \ - menuequationssolvenumerically.xhtml \ - menuequationsrootsofpolynomial.xhtml \ - menuequationsrealrootsofpolynmial.xhtml \ - menuequationssolvelinearsystem.xhtml \ - menuequationssolvealgebraicsystem.xhtml \ - menuequationseliminatevariable.xhtml \ - menuequationssolveode.xhtml \ - menuequationsinitialvalueproblem1.xhtml \ - menuequationsinitialvalueproblem2.xhtml \ - menuequationsboundaryvalueproblem.xhtml \ - menuequationssolveodewithlaplace.xhtml \ - menuequationsatvalue.xhtml \ - menualgebrageneratematrix.xhtml \ - menualgebraentermatrix.xhtml \ - menualgebrainvertmatrix.xhtml \ - menualgebracharacteristicpolynomial.xhtml \ - menualgebradeterminant.xhtml \ - menualgebraeigenvalues.xhtml \ - menualgebraeigenvectors.xhtml \ - menualgebraadjointmatrix.xhtml \ - menualgebratransposematrix.xhtml \ - menualgebramakelist.xhtml \ - menualgebraapplytolist.xhtml \ - menualgebramaptolist.xhtml \ - menualgebrareducelist.xhtml \ - menualgebramaptomatrix.xhtml \ - menucalculuslevel3.xhtml \ - menucalculuslevel3a.xhtml \ - menucalculuslevel3b.xhtml \ - menucalculuslevel3c.xhtml \ - menucalculusintegrate.xhtml \ - menucalculusrischintegrate.xhtml \ - menucalculuschangevariable.xhtml \ - menucalculusdifferentiate.xhtml \ - menucalculusfindlimit.xhtml \ - menucalculusgetseries.xhtml \ - menucalculuspadeapproximation.xhtml \ - menucalculuscalculussum.xhtml \ - menucalculuscalculusproduct.xhtml \ - menucalculuslaplacetransform.xhtml \ - menucalculusinverselaplacetransform.xhtml \ - menucalculusgreatestcommondivisor.xhtml \ - menucalculusleastcommonmultiple.xhtml \ - menucalculusdividepolynomials.xhtml \ - menucalculuspartialfractions.xhtml \ - menucalculuscontinuedfractions.xhtml \ - menusimplifysimplifyexpression.xhtml \ - menusimplifysimplifyradicals.xhtml \ - menusimplifyfactorexpression.xhtml \ - menusimplifyfactorcomplex.xhtml \ - menusimplifyexpandexpression.xhtml \ - menusimplifyexpandlogarithms.xhtml \ - menusimplifycontractlogarithms.xhtml \ - menusimplifyfactorialsandgamma.xhtml \ - menusimplifytrigsimplification.xhtml \ - menusimplifycomplexsimplification.xhtml \ - menusimplifysubtitute.xhtml \ - menusimplifyevaluatenounform.xhtml \ - menusimplifytogglealgebraicflag.xhtml \ - menusimplifyaddalgebraicequality.xhtml \ - menusimplifymoduluscomputation.xhtml \ - menunumerictogglenumericoutput.xhtml \ - menunumerictofloat.xhtml \ - menunumerictobigfloat.xhtml \ - menunumericsetprecision.xhtml \ - basiccommand.xhtml \ - tutorial.xhtml \ - jenks.xhtml \ - calculus.xhtml \ - differentiate.xhtml \ - indefiniteintegral.xhtml \ - definiteintegral.xhtml \ - basiclimit.xhtml \ - reallimit.xhtml \ - complexlimit.xhtml \ - summation.xhtml \ - bcmatrix.xhtml \ - bcexpand.xhtml \ - draw.xhtml \ - draw2donevariable.xhtml \ - draw2ddefinedcurve.xhtml \ - draw2dpolynomialequation.xhtml \ - draw3dtwovariable.xhtml \ - draw3ddefinedtube.xhtml \ - draw3ddefinedsurface.xhtml \ - series.xhtml \ - seriesexpand.xhtml \ - taylorseries.xhtml \ - laurentseries.xhtml \ - puiseuxseries.xhtml \ - solve.xhtml \ - solvelinearequations.xhtml \ - solvelinearmatrix.xhtml \ - solvesystempolynomials.xhtml \ - solvesinglepolynomial.xhtml \ - topreferencepage.xhtml \ - releasenotes.xhtml \ - usersguidepage.xhtml \ - aldorusersguidepage.xhtml \ - foundationlibrarydocpage.xhtml \ - topicspage.xhtml \ - cats.xhtml \ - dlmf.xhtml \ - dlmfapproximations.xhtml \ - dlmfasymptoticexpansions.xhtml \ - dlmfbarnesgfunction.xhtml \ - dlmfbetafunction.xhtml \ - dlmfcontinuedfractions.xhtml \ - dlmfdefinitions.xhtml \ - dlmffunctionrelations.xhtml \ - dlmfgraphics.xhtml \ - dlmfinequalities.xhtml \ - dlmfinfiniteproducts.xhtml \ - dlmfintegrals.xhtml \ - dlmfintegralrepresentations.xhtml \ - dlmfmathematicalapplications.xhtml \ - dlmfmethodsofcomputation.xhtml \ - dlmfmultidimensionalintegral.xhtml \ - dlmfnotation.xhtml \ - dlmfphysicalapplications.xhtml \ - dlmfpolygammafunctions.xhtml \ - dlmfqgammaandbetafunctions.xhtml \ - dlmfseriesexpansions.xhtml \ - dlmfsums.xhtml \ - dlmfsoftware.xhtml \ - dlmfspecialvaluesandextrema.xhtml \ - dlmftables.xhtml \ - uglangpage.xhtml \ - examplesexposedpage.xhtml \ - ugsyscmdpage.xhtml \ - operations.xhtml \ - dblookup.xhtml \ - dbcharacteristic.xhtml \ - dbcomplexcomplex.xhtml \ - dbcomplexconjugate.xhtml \ - dbcomplexfactor.xhtml \ - dbcompleximag.xhtml \ - dbcomplexnorm.xhtml \ - dbcomplexreal.xhtml \ - dbcomplexdoublefloat.xhtml \ - dbcomplexfloat.xhtml \ - dbcomplexinteger.xhtml \ - dbexpressioninteger.xhtml \ - dbfractioninteger.xhtml \ - dbfractionpolynomialinteger.xhtml \ - dbopacos.xhtml \ - dbopacosh.xhtml \ - dbopacot.xhtml \ - dbopacoth.xhtml \ - dbopacsc.xhtml \ - dbopacsch.xhtml \ - dbopaddmod.xhtml \ - dbopairyai.xhtml \ - dbopairybi.xhtml \ - dbopapproximants.xhtml \ - dbopasin.xhtml \ - dbopasinh.xhtml \ - dbopasec.xhtml \ - dbopasech.xhtml \ - dbopatan.xhtml \ - dbopatanh.xhtml \ - dbopbernoullib.xhtml \ - dbopbesseli.xhtml \ - dbopbesselj.xhtml \ - dbopbesselk.xhtml \ - dbopbessely.xhtml \ - dbopbeta.xhtml \ - dbopbinary.xhtml \ - dbopcardinalnumber.xhtml \ - dbopchebyshevt.xhtml \ - dbopchebyshevu.xhtml \ - dbopcoefficient.xhtml \ - dbopcoefficients.xhtml \ - dbopcoerce.xhtml \ - dbopcolumn.xhtml \ - dbopcompactfraction.xhtml \ - dbopcomplexeigenvectors.xhtml \ - dbopcomplexelementary.xhtml \ - dbopcomplexintegrate.xhtml \ - dbopcomplexlimit.xhtml \ - dbopcomplexsolve.xhtml \ - dbopcontent.xhtml \ - dbopcontinuedfraction.xhtml \ - dbopconvergents.xhtml \ - dbopconvert.xhtml \ - dbopcopy.xhtml \ - dbopcos.xhtml \ - dbopcosh.xhtml \ - dbopcot.xhtml \ - dbopcoth.xhtml \ - dbopcount.xhtml \ - dbopcountableq.xhtml \ - dbopcreate3space.xhtml \ - dbopcsc.xhtml \ - dbopcsch.xhtml \ - dbopcurve.xhtml \ - dbopcycleragits.xhtml \ - dbopcyclotomic.xhtml \ - dbopd.xhtml \ - dbopdecimal.xhtml \ - dbopdefiningpolynomial.xhtml \ - dbopdegree.xhtml \ - dbopdenom.xhtml \ - dbopdraw.xhtml \ - dbopdeterminant.xhtml \ - dbopdiagonalmatrix.xhtml \ - dbopdigamma.xhtml \ - dbopdigits.xhtml \ - dbopdimension.xhtml \ - dbopdivide.xhtml \ - dbopdivisors.xhtml \ - dbopei.xhtml \ - dbopeigenmatrix.xhtml \ - dbopeigenvalues.xhtml \ - dbopeigenvector.xhtml \ - dbopeigenvectors.xhtml \ - dbopelt.xhtml \ - dbopequal.xhtml \ - dbopeulere.xhtml \ - dbopeulerphi.xhtml \ - dbopeval.xhtml \ - dbopevenq.xhtml \ - dbopexp.xhtml \ - dbopexquo.xhtml \ - dbopfactor.xhtml \ - dbopfactorfraction.xhtml \ - dbopfibonacci.xhtml \ - dbopfiniteq.xhtml \ - dbopfirstdenom.xhtml \ - dbopfirstnumer.xhtml \ - dbopfractragits.xhtml \ - dbopfractionpart.xhtml \ - dbopgamma.xhtml \ - dbopgcd.xhtml \ - dbophermiteh.xhtml \ - dbophex.xhtml \ - dbophorizconcat.xhtml \ - dbophtrigs.xhtml \ - dbophypergeometric0f1.xhtml \ - dbopinteger.xhtml \ - dbopintegrate.xhtml \ - dbopinverse.xhtml \ - dbopinvmod.xhtml \ - dbopjacobi.xhtml \ - dboplaguerrel.xhtml \ - dboplaurent.xhtml \ - dboplcm.xhtml \ - dbopleadingcoefficient.xhtml \ - dbopleadingmonomial.xhtml \ - dboplegendre.xhtml \ - dboplength.xhtml \ - dboplimit.xhtml \ - dboplog.xhtml \ - dboploggamma.xhtml \ - dbopmainvariable.xhtml \ - dbopmakegraphimage.xhtml \ - dbopmakeobject.xhtml \ - dbopmakeviewport3d.xhtml \ - dbopmap.xhtml \ - dbopmapbang.xhtml \ - dbopmatrix.xhtml \ - dbopmax.xhtml \ - dbopmemberq.xhtml \ - dbopmin.xhtml \ - dbopminimumdegree.xhtml \ - dbopminus.xhtml \ - dbopmoebiusmu.xhtml \ - dbopmonicdivide.xhtml \ - dbopmulmod.xhtml \ - dbopncols.xhtml \ - dbopnegativeq.xhtml \ - dbopnew.xhtml \ - dbopnextprime.xhtml \ - dbopnorm.xhtml \ - dbopnrows.xhtml \ - dbopnthfractionalterm.xhtml \ - dbopnthroot.xhtml \ - dbopnullity.xhtml \ - dbopnullspace.xhtml \ - dbopnumberoffractionalterms.xhtml \ - dbopnumer.xhtml \ - dbopnumeric.xhtml \ - dbopoddq.xhtml \ - dboponedimensionalarray.xhtml \ - dbopoperator.xhtml \ - dboporthonormalbasis.xhtml \ - dbopoutputfixed.xhtml \ - dbopoutputfloating.xhtml \ - dbopoutputgeneral.xhtml \ - dbopoutputspacing.xhtml \ - dboppadicfraction.xhtml \ - dboppartialfraction.xhtml \ - dboppartialquotients.xhtml \ - dboppattern.xhtml \ - dboppermanent.xhtml \ - dboppi.xhtml \ - dbopplus.xhtml \ - dboppolygamma.xhtml \ - dboppositiveq.xhtml \ - dboppositiveremainder.xhtml \ - dbopprefixragits.xhtml \ - dbopprevprime.xhtml \ - dbopprimefactor.xhtml \ - dbopprimeq.xhtml \ - dbopprimes.xhtml \ - dboppuiseux.xhtml \ - dbopqelt.xhtml \ - dbopqseteltbang.xhtml \ - dbopquatern.xhtml \ - dbopquo.xhtml \ - dbopradicaleigenvectors.xhtml \ - dbopradicalsolve.xhtml \ - dboprank.xhtml \ - dbopratdenom.xhtml \ - dboprealeigenvectors.xhtml \ - dboprealelementary.xhtml \ - dbopreduce.xhtml \ - dbopreductum.xhtml \ - dboprem.xhtml \ - dbopresetvariableorder.xhtml \ - dbopresultant.xhtml \ - dboprootof.xhtml \ - dboprootsimp.xhtml \ - dboprootsof.xhtml \ - dbopround.xhtml \ - dboprow.xhtml \ - dboprowechelon.xhtml \ - dbopsetcolumnbang.xhtml \ - dbopsetelt.xhtml \ - dbopseteltbang.xhtml \ - dbopsetrowbang.xhtml \ - dbopsetsubmatrixbang.xhtml \ - dbopsign.xhtml \ - dbopsimplify.xhtml\ - dbopsec.xhtml \ - dbopsech.xhtml \ - dbopseries.xhtml \ - dbopseriessolve.xhtml \ - dbopsin.xhtml \ - dbopsingleintegerand.xhtml \ - dbopsingleintegernot.xhtml \ - dbopsingleintegeror.xhtml \ - dbopsingleintegerxor.xhtml \ - dbopsinh.xhtml \ - dbopsetvariableorder.xhtml \ - dbopsolve.xhtml \ - dbopsqrt.xhtml \ - dbopstar.xhtml \ - dbopstarstar.xhtml \ - dbopsubmatrix.xhtml \ - dbopsubmatrix.xhtml \ - dbopsubmod.xhtml \ - dbopsurface.xhtml \ - dbopsumofkthpowerdivisors.xhtml \ - dboptan.xhtml \ - dboptanh.xhtml \ - dboptaylor.xhtml \ - dboptimes.xhtml \ - dboptotaldegree.xhtml \ - dboptrace.xhtml \ - dboptranspose.xhtml \ - dboptrigs.xhtml \ - dboptruncate.xhtml \ - dbopvariables.xhtml \ - dbopvectorise.xhtml \ - dbopvectorspace.xhtml \ - dbopvertconcat.xhtml \ - dbopwholepart.xhtml \ - dbopwholeragits.xhtml \ - dbopwrite.xhtml \ - dbopzeroof.xhtml \ - dbopzerosof.xhtml \ - dbopzeroq.xhtml \ - dbpolynomialinteger.xhtml \ - dbpolynomialfractioninteger.xhtml \ - systemvariables.xhtml \ - glossarypage.xhtml \ - htxtoppage.xhtml \ - refsearchpage.xhtml \ - topicspage.xhtml \ - numberspage.xhtml \ - numintegers.xhtml \ - numgeneralinfo.xhtml \ - numbasicfunctions.xhtml \ - numintegerfractions.xhtml \ - numnumbertheoreticfunctions.xhtml \ - numfactorization.xhtml \ - numfunctions.xhtml \ - numexamples.xhtml \ - numproblems.xhtml \ - numfractions.xhtml \ - numrationalnumbers.xhtml \ - numquotientfields.xhtml \ - nummachinefloats.xhtml \ - numfloat.xhtml \ - introtofloat.xhtml \ - conversionfunctions.xhtml \ - outputfunctions.xhtml \ - determinantofhilbert.xhtml \ - numcomplexnumbers.xhtml \ - numfinitefields.xhtml \ - numnumericfunctions.xhtml \ - numcardinalnumbers.xhtml \ - nummachinesizedintegers.xhtml \ - numromannumerals.xhtml \ - numcontinuedfractions.xhtml \ - numpartialfractions.xhtml \ - numquaternions.xhtml \ - numoctonions.xhtml \ - numrepeatingdecimals.xhtml \ - numrepeatingbinaryexpansions.xhtml \ - numrepeatinghexexpansions.xhtml \ - numotherbases.xhtml \ - polynomialpage.xhtml \ - polybasicfunctions.xhtml \ - polysubstitutions.xhtml \ - polyfactorization.xhtml \ - polyfactorization1.xhtml \ - polyfactorization2.xhtml \ - polyfactorization3.xhtml \ - polyfactorization4.xhtml \ - polygcdandfriends.xhtml \ - polyroots.xhtml \ - polyroots1.xhtml \ - polyroots2.xhtml \ - polyroots3.xhtml \ - polyroots4.xhtml \ - polyspecifictypes.xhtml \ - polyspecifictypes1.xhtml \ - factored.xhtml \ - polyspecifictypes2.xhtml \ - polyspecifictypes3.xhtml \ - polyspecifictypes4.xhtml \ - functionpage.xhtml \ - funrationalfunctions.xhtml \ - funalgebraicfunctions.xhtml \ - funelementaryfunctions.xhtml \ - funsimplification.xhtml \ - funpatternmatching.xhtml \ - funoperatoralgebra.xhtml \ - equationpage.xhtml \ - equsystemlinear.xhtml \ - equdifferential.xhtml \ - equdifferentiallinear.xhtml \ - equdifferentialnonlinear.xhtml \ - equdifferentialpowerseries.xhtml \ - calculuspage.xhtml \ - callimits.xhtml \ - calderivatives.xhtml \ - calintegrals.xhtml \ - calmoreintegrals.xhtml \ - callaplace.xhtml \ - calseries.xhtml \ - calseries1.xhtml \ - calseries2.xhtml \ - calseries3.xhtml \ - calseries4.xhtml \ - calseries5.xhtml \ - calseries6.xhtml \ - calseries7.xhtml \ - calseries8.xhtml \ - linalgpage.xhtml \ - linintro.xhtml \ - lincreate.xhtml \ - linoperations.xhtml \ - lineigen.xhtml \ - linhilbert.xhtml \ - linpermaent.xhtml \ - linvectors.xhtml \ - linsquarematrices.xhtml \ - lin1darrays.xhtml \ - lin2darrays.xhtml \ - linconversion.xhtml \ - graphicspage.xhtml \ - graphexamples.xhtml \ - graphexamplesassorted.xhtml \ - graphexamplesthreed.xhtml \ - graphexamplesonevariable.xhtml \ - graphexamplesparametric.xhtml \ - graphexamplespolar.xhtml \ - graphexamplesimplicit.xhtml \ - graphexampleslistofpoints.xhtml \ - graph2d.xhtml \ - graph2dimplicit.xhtml \ - graph2dlistsofpoints.xhtml \ - graph2donevariable.xhtml \ - graph2dparametric.xhtml \ - graph2dpolar.xhtml \ - graph3d.xhtml \ - graph3dobjects.xhtml \ - graph3dparametric.xhtml \ - graph3dsurfaces.xhtml \ - graph3dtubeplots.xhtml \ - graph3dtwovariables.xhtml \ - graphviewports.xhtml \ - algebrapage.xhtml \ - algnumbertheory.xhtml \ - algnumbertheorygalois.xhtml \ - alggrouptheory.xhtml \ - alggrouptheorygroup.xhtml \ - alggrouptheoryrepa6.xhtml \ - alggrouptheoryreptheory.xhtml \ - cryptopage.xhtml \ - cryptoclass1.xhtml \ - cryptoclass2.xhtml \ - cryptoclass3.xhtml \ - cryptoclass4.xhtml \ - cryptoclass5.xhtml \ - cryptoclass6.xhtml \ - cryptoclass7.xhtml \ - cryptoclass8.xhtml \ - cryptoclass9.xhtml \ - cryptoclass10.xhtml \ - cryptoclass11.xhtml \ - ocwmit18085.xhtml \ - ocwmit18085lecture1.xhtml \ - ocwmit18085lecture2.xhtml \ - man0page.xhtml \ - topexamplepage.xhtml \ - topsettingspage.xhtml \ - axiomfonts.xhtml \ - pagelist.xhtml \ - pagematrix.xhtml \ - pageonedimensionalarray.xhtml \ - pagepermanent.xhtml \ - pageset.xhtml \ - pagesquarematrix.xhtml \ - pagetable.xhtml \ - pagetwodimensionalarray.xhtml \ - pagevector.xhtml - -@ - -\section{The Standard Layout} -Generally a page has a standard layout using a couple of chunks -to minimize the typing. The defined chunks are: -\begin{itemize} -\item ``standard head'' which includes the head element, xmlns, meta, and -title element. It also contains the ``style'' element for CSS information. -\item ``page head'' contains the banner information -\item ``page foot'' contains the trailing page information and the -body-end and html-end tags -\end{itemize} -So the basic layout looks like -\begin{verbatim} -@<> - (local and general javascript goes here) - - -@<> - (local page definition goes here) -@<> -\end{verbatim} -So all you need to worry about are the actual page forms and the -javascript to fetch those forms. - -For ``active pages'', that is those that communicate with Axiom -they generally define a javascript function called ``commandline'' -which formats the request to be sent to the host. You also need to -include the ``axiom talker'' chunk. Note that ``axiom talker'' -expects the ``commandline'' function to exist and calls it. Thus, -for the page that handles differentiation calls to Axiom we add -the local javascript: -\begin{verbatim} - - - -\end{verbatim} -This defined the ``commandline'' function and embeds the ``axiom talker''. -The ``commandline'' function knows how to fetch fields from the rest of -the page and format them into a single Axiom string. This is page -specific code. For example, this shows a single input line which -will be sent to the host when the ``Continue'' is pressed: -\begin{verbatim} -
    -

    - Type an input command line to Axiom:
    - - @<> -

    -
    - @<> -\end{verbatim} - -Note that the commandline function takes an argument which it gets -from the caller, makeRequest. This argument can be used to distinguish -which button was pressed. - -The {\bf div} section with {\bf id=``mathAns''} is replaced by the -result sent from the server. - -\section{Cascading Style Sheet} -\subsection{Standard Style Sheet} -This is the standard CSS style section that gets included with every -page. We do this here but it could be a separate style sheet. It -hardly matters either way as the style sheet is trivial. -\begin{verbatim} -\end{verbatim} -< -@ -\subsection{Menu style sheet} -<>= - -@ -\section{standard head} -This is the standard head section. It is used on pages that do not -include javascript. Note that it does NOT include the so -the javascript can be added easily. -<>= - - - - - Axiom Documentation -< - - -<> - -<> -@ - -\subsection{graphexamples.xhtml} -<>= -<> - - -<> -
    Graphics Examples
    -
    -Here are some examples of Axiom graphics. - -<> -@ - -\subsection{graphexamplesassorted.xhtml} -<>= -<> - - - -<> -
    Assorted Graphics Examples
    -
    -Function of two variables: z=f(x,y) -
      -
    • - -
      -
    • -
    -Function of one variable: y=f(x) -
      -
    • - -
      -
    • -
    -Plane parametric curve: x=f(t),y=g(t) -
      -
    • - -
      -
    • -
    -Space parametric curve: x=f(t),y=g(t),z=h(t) -
      -
    • - -
      -
    • -
    -Polar coordinates: r=f(θ) -
      -
    • - -
      -
    • -
    -Implicit curves: p(x,y)=0 -
      -
    • - -
      -
    • -
    -<> -@ - - -\subsection{graphexamplesimplicit.xhtml} -<>= -<> - - - -<> -
    Implicit Curves
    -
    -A Conic Section (Hyperbola) -
      -
    • - -
      -
    • -
    -An Elliptic Curve -
      -
    • - -
      -
    • -
    -Cartesian Ovals -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Cassinian Ovals: two loops -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -<> -@ - - -\subsection{graphexampleslistofpoints.xhtml} -<>= -<> - - - -<> -
    Plotting Lists of Points
    -
    -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -The makeViewport2D command takes a -list of options as a parameter in this example. The string "Lines" is -designated as the viewport's title. -<> -@ - - -\subsection{graphexamplesonevariable.xhtml} -<>= -<> - - - -<> -
    Functions of One Variable
    -
    -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -<> -@ - - -\subsection{graphexamplesparametric.xhtml} -<>= -<> - - - -<> -
    Parametric Curves
    -
    -The Lemnicate of Bernoulli -
      -
    • - -
      -
    • -
    -Lissajous curve -
      -
    • - -
      -
    • -
    -A gnarly closed curve -
      -
    • - -
      -
    • -
    -Another closed curve -
      -
    • - -
      -
    • -
    -<> -@ - - -\subsection{graphexamplespolar.xhtml} -<>= -<> - - - -<> -
    Polar Coordinates
    -
    -A circle -
      -
    • - -
      -
    • -
    -A spiral -
      -
    • - -
      -
    • -
    -A Petal Curve -
      -
    • - -
      -
    • -
    -A Limacon -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{graphexamplesthreed.xhtml} -<>= -<> - - - -<> -
    Three Dimensional Graphics
    -
    -Plots of parametric surfaces defined by functions f(u,v), g(u,v) and h(u,v). - -Pear Surface -
      -
    • - -
      -
    • -
    - -Trigonometric Screw -
      -
    • - -
      -
    • -
    - -Etruscan Venus -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    - -Banchoff Klein Bottle -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    - -<> -@ - -\subsection{graphicspage.xhtml} -<>= -<> - - -<> -Axiom can plot curves and surfaces of various types, as well as -lists of points in the plane. - - - - - - - - - - - - - - - - - -
    - Examples - - See examples of Axiom graphics -
    - 2D Graphics - - Graphics in the real and complex plane -
    - 3D Graphics - - Plot surfaces, curves, or tubes around curves -
    - Viewports - - Customize graphics using Viewports -
    -<> -@ - -\subsection{graphviewports.xhtml} -<>= -<> - - - -<> -
    Stand-alone Viewport
    -
    -To get a viewport on a page, you first need to create on in Axiom and -write it out to a file that can be called up. For example, we draw a -saddle function and assign the result to the variable v. -
      -
    • - -
      -
    • -
    -Now that we've created the viewport, we want to write the data out to -a file. To do this, we use the write command -which takes as arguments the viewport to write out, the title of the file -to be written to, and an optiona argument telling the write command what -type (or types) of data you want to write (in addition to the ones that -Axiom writes). The optional argument could be a string, like "pixmap", or -a list of strings, like ["postscript", "pixmap"]. We need a "bitmap" data -type to include a graph in a page so in this case, we write the viewport -and tell it to also write a "pixmap" file: -
      -
    • - -
      -
    • -
    -Currently supported file formats are "pixmap", "bitmap", "postscript" -and "image". - -Axiom automatically adds ".view" at the end of the viewport data file -to specify the file type. The ".view" is actually a directory and -contains a bitmap file, usually called image.bm.Z, which is a compressed -bitmap. Firefox can display bitmap files, as shown here. Clicking on the -image should start a "live graphics copy" so you can manipulate the image. - -
    -
    - - - -<> -@ - -\subsection{graph2d.xhtml} -<>= -<> - - - -<> -
    Two Dimensional Graphics
    -
    - -<> -@ - -\subsection{graph2dimplicit.xhtml} -<>= -<> - - - -<> -
    Implicit Curves
    -
    -Axiom has facilities for graphing a non-singular algebraic curve in a -rectangular region of the plane. An algebraic curve is a curve defined by -a polynomial equation p(x,y)=0. Non-singular means that the curve is -"smooth" in that it does not cross itself or come to a point (cusp). -Algebraically, this means that for any point (a,b) on the curve (i.e. -a point such that p(a,b)=0), the partial derivatives dp/dx(a,b) and -dp/dy(a,b) are not both zero. We require that the polynomial have rational -or integral coefficients. Here is a Cartesian ovals algebraic curve -example: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -A range must be declared for each variable specified in the algebraic -curve equation. -<> -@ - -\subsection{graph2dlistsofpoints.xhtml} -<>= -<> - - - -<> -
    List of Points
    -
    -Axiom has the ability to create lists of points in a two dimensional -graphics viewport. This is done by utilizing the -GraphImage and -TwoDimensionalViewport -domain facilities. - -In this example, the makeGraphImage -takes a list of lists of points parameter, a list of colors for each point -in the graph, a list of colors for each line in the graph, and a list of -numbers which indicate the size of each point in the graph. The following -lines create list of lists of points which can be read be made into two -dimensional graph images. - -First we make a list of points -
      -
    • - -
      -
    • -
    -Then we select pairs of these points which represent the endpoints of lines. -
      -
    • - -
      -
    • -
    -Next we set the point color and size, and the line color for all components -of the graph. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Now the graph image is created and named according to the component -specifications indicated above. The -makeViewport2D command then -creates a two dimensional viewport for this graph according to the list -of options specified within the brackets. -
      -
    • - -
      -
    • -
    -The makeViewport2D command takes a -list of options as a parameter. In this example the string "Lines" is -designated as the viewport's title. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{graph2donevariable.xhtml} -<>= -<> - - - -<> -
    Functions of One Variable
    -
    -Here we wish to plot a function y=f(x) on the interval [a,b]. As an -example, let's take the function y=sin(tan(x))-tan(sin(x)) on the interval -[0,6]. Here is the simplest command that will do this: -
      -
    • - -
      -
    • -
    -Notice that Axiom compiled a function before the graph was put on the -screen. The expression sin(tan(x))-tan(sin(x)) was converted to a compiled -function so that its value for various values of x could be computed -quickly and efficiently. Let's graph the same function on a different -interval and this time we'll give the graph a title. The title is a string, -which is an optional argument of the command 'draw'. -
      -
    • - -
      -
    • -
    -Once again the expression sin(tan(x))-tan(sin(x)) was converted to a -compiled function before any points were computed. If you want to graph the -same function on a number of intervals, it's a good idea to write down a -function definition so that the function only has to be compiled once. -Here's an example: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Notice that our titles can be whatever we want, as long as they are -encloded by double quotes. However, a title which is too long to fit -within the viewport title window will be clipped. -<> -@ - -\subsection{graph2dparametric.xhtml} -<>= -<> - - - -<> -
    Parametric Curves
    -
    -One way of producing interesting curves is by using parametric equations. -Let x=f(t) and y=g(t) for two functions f and g as the parameter t ranges -over an interval [a,b]. Here's an example: -
      -
    • - -
      -
    • -
    -Here 0..2*%pi represents the interval over which the variable t ranges. -In the case of parametric curves, Axiom will compile two functions, one for -each of the functions f and g. You may also put a title on a graph. The -title may be an arbitrary string and is an optional argument to the -command 'draw'. For example: -
      -
    • - -
      -
    • -
    -If you plan on plotting x=f(t), y=g(t) as t ranges over several intervals, -you may want to define functions f and g, so that they need not be -recompiled every time you create a new graph. Here's an example: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -These examples show how the curve changes as the range of the parameter -t varies. -<> -@ - -\subsection{graph2dpolar.xhtml} -<>= -<> - - - -<> -
    Polar Coordinates
    -
    -Graphs in polar coordinates are given by an equation r=f(θ) as -theta ranges over an interval. This is equivalent to the parametric curve -x=f(θ)*cos(θ),y=f(θ)*sin(θ) as θ -ranges over the same interval. You may create such curves using the -command 'draw', with the optional argument 'coordinates==polar'. -Here are some examples: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -You may also define your own functions, when you plan on plotting the same -curve as θ varies over several intervals. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -For information on plotting graphs in other coordinate systems see the -pages for the CoordinateSystems -domain. -<> -@ - - -\subsection{graph3d.xhtml} -<>= -<> - - -<> -
    Three Dimensional Graphing
    -
    - -<> -@ - -\subsection{graph3dobjects.xhtml} -<>= -<> - - - -<> -
    Building Three Dimensional Objects from Primatives
    -
    -Rather than using the draw and -makeObject commands, you can create -three-dimensional graphs from primitives. Operation -create3Space creates a three-space -object to which points, curves, and polygons can be added using the -operations from the ThreeSpace domain. -The resulting object can then be displayed in a viewport using -makeViewport3D. - -Create the empty three-space object space. -
      -
    • - -
      -
    • -
    -Objects can be sent to this space using the operations exported by the -ThreeSpace domain. The following examples -place curves into space. - -Add these three curves to the space. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Create and display the viewport using -makeViewport3D. Options may also be -given but here are displayed as a list with values enclosed in parentheses. -
      -
    • - -
      -
    • -
    -
    -
    -Cube Example -
    -As a second example of the use of primitives, we generate a cube using -a polygon mesh. It is important to use a consistent orientation of the -polygons for correct generation of three-dimensional objects. - -Again start with an empty three-space object. -
      -
    • - -
      -
    • -
    -For convenience, give the DoubleFloat -values +1 and -1 names. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Define the vertices of the cube. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Add the faces of the cube as polygons to the space using a consistent -orientation. -
      -
    • - -
      -
    • -
    -Create and display the viewport. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{graph3dparametric.xhtml} -<>= -<> - - - -<> -
    Parametric Space Curves
    -
    -This page describes the plotting in three dimensional space of a curve -defined by the parametric equations x=f(t), y=g(t), z=h(t), where f,g, and -h are functions of the parameter t which ranges over a specified interval. -The basic draw command for this function utilizes either the uncompiled -functions or compiled functions format and uses the -curve command to specify the three -functions for the x, y, and z components of the curve. The general format -for uncompiled functions is: -
    -   draw(curve(f(t),g(t),h(t)), t=a..b)
    -
    -where a..b is the segment defining the interval [a,b] over which the -parameter t ranges. In this case the functions are not compiled until -the draw command is executed. Here is an example: -
      -
    • - -
      -
    • -
    -In the case of compiled functions, the functions are named and compiled -independently. This is useful if you intend to use the functions often, -or if the functions are long and complex. The following lines show -functions whose parameters are of the type SmallFloat. The functions -are compiled and stored by Axiom when entered. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Once the functions are compiled the draw command only needs the names of -the functions to execute. Here is a compiled functions example: -
      -
    • - -
      -
    • -
    -Note that the parameter range does not take the variable name as in the -case of uncompiled functions. It is understood that the indicated range -applies to the parameter of the functions, which in this case is t. -<> -@ - -\subsection{graph3dsurfaces.xhtml} -<>= -<> - - - -<> -
    Parametric Surfaces
    -
    -Graphing a surface defined by x=f(u,v), y=g(u,v), z=h(u,v). This page -describes plotting of surfaces defined by the parametric equations of two -variables, x=f(u,v), y=g(u,v), and z=h(u,v), for which the ranges of u and -v are explicitly defined. The basic draw command for this function utilizes -either the uncompiled function or compiled function format and uses the -surface command to specify the three -functions for the x, y, and z components of the surface. The general -format for uncompiled functions is: -
    -    draw(surface(f(u,v),g(u,v),h(u,v)), u=a..b, v=c..d)
    -
    -where a..b and c..d are segments defining the intervals [a,b] and [c,d] -over which the parameters u and v span. In this case the functions are -not compiled until the draw command is executed. Here is an example of a -surface plotted using the parabolic cylindrical coordinate system option: -
      -
    • - -
      -
    • -
    -In the case of compiled functions, the functions are named and compiled -independentlyh. This is useful if you intend to use the functions often, -or if the functions are long and complex. The following lines show functions -whose parameters are of the type SmallFloat. The functions are compiled and -stored by Axiom when entered. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Once the function is compiled the draw command only needs the names of -the functions to execute. Here is a compiled functions example plotted -using the toroidal coordinate system option: -
      -
    • - -
      -
    • -
    -Note that the parameter ranges do not take the variable names as in the case -of uncompiled functions. The variables are entered in the order in which -they are defined in the function specification. In this case the first -range specifies the u-variable and the second range specifies the v-variable. -<> -@ - -\subsection{graph3dtubeplots.xhtml} -<>= -<> - - - -<> -
    Parametric Tube Plots
    -
    -This page describes the plotting in three dimensional space of a tube -around a parametric space curve defined by the parametric equations -x=f(t), y=g(t), z=h(t), where f, g, and h are functions of the parameter t -which ranges over a specified interval. The basic draw command for this -function utilizes either the uncompiled functions or compiled functions -format and uses the curve command to specify -the three functions for the x, y, and z components of the curve. This uses -the same format as that for space curves except that it requires a -specification for the radius of the tube. If the radius of the tube is 0, -then the result is the space curve itself. The general format for -uncompiled functions is: -
    -    draw(curve(f(t),g(t),h(t)),t=a..b,tubeRadius==r)
    -
    -where a..b is the segment defining the interval [a,b] over which the -parameter t ranges, and the tubeRadius is indicated by the variable r. -In this case the functions are not compiled until the draw command is -executed. Here is an example: -
      -
    • - -
      -
    • -
    -In the case of compiled functions, the functions are named and compiled -independently. This is useful if you intend to use the functions often, -or if the functions are long and complex. The following lines show -functions whose parameters are of the type SmallFloat. The functions are -compiled and stored by Axiom when entered. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Once the function is compiled the draw command only needs the names of -the functions to execute. Here is a compiled functions example of a trefoil -knot: -
      -
    • - -
      -
    • -
    -Note that the parameter range does not take the variable name as in the -case of uncompiled functions. It is understood that the indicated range -applies to the parameter of the functions, which in this case is t. -Typically, the radius of the tube should be set between 0 and 1. A radius -of less than 0 results in it's positive counterpart and a radius of greater -than one cause self-intersection. -<> -@ - -\subsection{graph3dtwovariables.xhtml} -<>= -<> - - - -<> -
    Functions of Two Variables
    -
    -This page describes the plotting of surfaces defined by an equation of -two variables, z=f(x,y), for which the ranges of x and y are explicitly -defined. The basic draw command for this function utilizes either the -uncompiled function or compiled function format. The general format for an -uncompiled function is: -
    -   draw(f(x,y), x=a..b, y=c..d)
    -
    -where a..b and c..d are segments defining the intervals [a,b] and [c,d] -over which the variables x and y span. In this case, the function is not -compiled until the draw command is executed. Here is an example: -
      -
    • - -
      -
    • -
    -In the case of a compiled function, the function is named and compiled -independently. This is useful if you intend to use a function often, or -if the function is long and complex. The following line shows a function -whose parameters are of the type SmallFloat. The function is compiled and -stored by Axiom when it is entered. -
      -
    • - -
      -
    • -
    -Once the function is compiled the draw command only needs the name of the -function to execute. Here is a compiled function example: -
      -
    • - -
      -
    • -
    -Note that the parameter ranges do not take the variable names as in the -case of uncompiled functions. The variables are entered in the order in -which they are defined in the function specificationl. In this case the -first range specifies the x-variable and the second range specifies the -y-variable. -<> -@ - -%%H -\subsection{htxtoppage.xhtml} -<>= -<> - - -<> - htxtoppage not implemented -<> -@ - - -%%I -\subsection{indefiniteintegral.xhtml} -<>= -<> - - - -<> -
    - Enter the function you want to integrate:
    -
    - Enter the variable of integration: -
    -
    -<> -<> -<> -@ - -\subsection{introtofloat.xhtml} -<>= -<> - - - -<> -
    Introduction to Float
    -
    -Scientific notation is supported for input and output of floating -point numbers. A floating point number is written as a string of -digits containing a decimal point optionally followed by the letter "E", -and then the exponent. We begin by doing some calculations using -arbitrary precision floats. The default precision is twenty decimal -digits. -
      -
    • - -
      -
    • -
    -A decimal base for the exponent is assumed, so the number 1.234E2 denotes -1.234*10**2 -
      -
    • - -
      -
    • -
    -The normal arithmetic operations are available for floating point numbers. -
      -
    • - -
      -
    • -
    -<> -@ - -%%J -\subsection{jenks.xhtml} -<>= -<> - - -<> -
    - - - -
    -
    -

    - - AXIOM -- Richard D. Jenks and Robert S. Sutor - -

    -
    -
    -

    - - The Scientific Computation System - -

    -
    -
    -

    - - Volume 0 -- The Textbook - -

    -
    - - Chapter 0: Introduction to Axiom -
    - - Chapter 1: An Overview of Axiom -
    - - Chapter 2: Using Types and Modes -
    - - Chapter 3: Using HyperDoc -
    - - Chapter 4: Input Files and Output Styles -
    - - Chapter 5: Overview of Interactive Language -
    - - Chapter 6: User-Defined Functions, Macros and Rules -
    - - Chapter 7: Graphics -
    - - Chapter 8: Advanced Problem Solving -
    - - Chapter 9: Some Examples of Domains and Packages -
    - - Chapter 10: Interactive Programming -
    - - Chapter 11: Packages -
    - - Chapter 12: Categories -
    - - Chapter 13: Domains -
    - - Chapter 14: Browse -
    - - Chapter 15: What's New in Axiom Version 2.0 -
    - - Chapter 17: Categories -
    - - Chapter 18: Domains -
    - - Chapter 19: Packages -
    - - Chapter 21: Programs for AXIOM Images -
    -<> -@ - -%%K -%%L - -\subsection{laurentseries.xhtml} -<>= -<> - - - -<> - - - - - - - - - - - - - - - - -
    - Enter the formula for the general coefficient of the series: -
    - -
    - Enter the index variable for your formula: - -
    - Enter the power series variable: - -
    - Enter the point about which to expand: - -
    -For Laurent Series, the exponent of the power series variable ranges -from an initial value, an arbitrary integer value, to plus -infinity; the step size is any positive integer. - - - - - - - -
    - Enter the initial value of the index (an integer): - -
    - Enter the step size (a positive integer): - -
    -<> -<> -<> - -@ - -\subsection{linalgpage.xhtml} -<>= -<> - - -<> -
    Linear Algebra
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Introduction -
    - Create and manipulate matrices. Work with the entries of a - matrix. Perform matrix arithmetic. -
    - Creating Matrices -
    - Create matrices from scratch and from other matrices -
    - Operations on Matrices -
    - Algebraic manipulations with matrices. Compute the inverse, - determinant, and trace of a matrix. Find the rank, nullspace, - and row echelon form of a matrix. -
    - Eigenvalues and Eigenvectors -
    - How to compute eigenvalues and eigenvectors -
    -
    - -<> -@ - -\subsection{linconversion.xhtml} -<>= -<> - - - -<> -
    Conversion
    -
    -Conversion is the process of changing an object of one type into an -object of another type. The syntax for conversion is object::newType. -
    -By default, 3 has the type -PositiveInteger -
      -
    • - -
      -
    • -
    -We can change thisinto an object of type -Fraction Integer by using "::". -
      -
    • - -
      -
    • -
    -A coercion is a special kind of conversion that Axiom is allowed to do -automatically when you enter an expression. Coercions are usually -somewhat safer than more general conversions. The Axiom library contains -operations called -coerce and -convert. Only the -coerce operations can be used by the -interpreter to change an object into an object of another type unless -you explicitly use a "::". - -By now you will be quite familiar with what types and modes look like. -It is useful to think of a type or mode as a pattern for what you want -the result to be. Let's start with a square matrix of polynomials with -complex rational number coefficients. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -We first want to interchange the Complex -and Fraction layers. We do the conversion -by doing the interchange in the type expression. -
      -
    • - -
      -
    • -
    -Interchange the Polynomial and the -Fraction levels. -
      -
    • - -
      -
    • -
    -Interchange the Polynomial and the -Complex levels. -
      -
    • - -
      -
    • -
    -All the entries have changed types, although in comparing the last two -results only the entry in the lower left corner looks different. We did -all the intermediate steps to show you what Axiom can do. - -In fact, we could have combined all these into one conversion. -
      -
    • - -
      -
    • -
    - -There are times when Axiom is not able to do the conversion in one step. -You may need to break up the transformation into several conversions in -order to get an object of the desired type. - -We cannot move either the Fraction or -Complex above (or to the left of, -depending on how you look at it) -SquareMatrix because each of these -levels requires that its argument type have commutative multiplication, -whereas SquareMatrix does not. -(Fraction requires that its argument -belong to the category -IntegralDomain and -Complex requires that its argument belongs to -CommutativeRing. See the -Jenks section 2.1 for a brief -discussion of categories. The Integer level -did not move anywhere because it does not allow any arguments. We also did -not move the SquareMatrix part -anywhere, but we could have. Recall that m looks like this: -
      -
    • - -
      -
    • -
    -If we want a polynomial with matrxi coefficients rather than a matrix with -polynomial entries, we can just do the conversion. -
      -
    • - -
      -
    • -
    -We have not yet used modes for any conversions. Modes are a great -shorthand for indicating the type of the object you want. Instead of -using the long type expression in the last example we could have -simply said this: -
      -
    • - -
      -
    • -
    -We can also indicate more structure if we want the entries of the matrices -to be fractions. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{lincreate.xhtml} -<>= -<> - - - -<> -
    Creating Matrices
    -
    -There are many ways to create a matrix from a collection of values or -from existing matrices. - -If the matrix has almost all items equal to the same value, use -new to create a matrix filled with that value -and then reset the entries that are different. -
      -
    • - -
      -
    • -
    -To change the entry in the second row, third column to 5, use -setelt. -
      -
    • - -
      -
    • -
    -An alternative syntax is to use assignment. -
      -
    • - -
      -
    • -
    -The matrix was destructively modified. -
      -
    • - -
      -
    • -
    -If you already have the matrix entries as a list of lists, use -matrix. -
      -
    • - -
      -
    • -
    -If the matrix is diagonal, use -diagonalMatrix -
      -
    • - -
      -
    • -
    -Use setRow! and -setColumn! -to change a row or column of a matrix. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Use copy to make a copy of a matrix. -
      -
    • - -
      -
    • -
    -This is useful if you intend to modify a matrix destructively but want a -copy of the original. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Use subMatrix(dm,2,3,2,4) to extract -part of an existing matrix. The syntax is -
    -  subMatrix(m,firstrow,lastrow,firstcol,lastcol)
    -
    -
      -
    • - -
      -
    • -
    -To change a submatrix, use -setsubMatrix!. -
      -
    • - -
      -
    • -
    -If e is too big to fit where you specify, an error message is displayed. Use -subMatrix. -
      -
    • - -
      -
    • -
    -This changes the submatrix of d whose upper left corner is at the first row -and second column and whose size is that of e. -
      -
    • - -
      -
    • -
    -
      -
    • - -
      -
    • -
    -Matrices can be joined either horizontally or vertically to make new -matrices. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Use horizConcat to append them side to -side. The two matrices must have the same number of rows. -
      -
    • - -
      -
    • -
    -Use vertConcat to stack one upon the -other. The two matrices must have the same number of columns. -
      -
    • - -
      -
    • -
    -The operation transpose is used to create -a new matrix by reflection across the main diagonal. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{lineigen.xhtml} -<>= -<> - - - -<> -
    Computation of Eigenvalues and Eigenvectors
    -
    -In this section we show you some of Axiom's facilities for computing and -manipulating eigenvalues and eigenvectors, also called characteristic -values and characteristic vectors, respectively. - -Let's first create a matrix with integer entries. -
      -
    • - -
      -
    • -
    -To get a list of the rational eigenvalues, use the operation -eigenvalues. -
      -
    • - -
      -
    • -
    -Given an explicit eigenvalue, -eigenvector computes the eigenvectors -corresponding to it. -
      -
    • - -
      -
    • -
    -The operation eigenvectors returns a -list of pairs of values and vectors. When an eigenvalue is rational, Axiom -gives you the value explicitly; otherwise, its minimal polynomial is given, -(the polynomial of lowest degree with the eigenvalues as roots), together -with a parametric representation of the eigenvector using the eigenvalue. -This means that if you ask Axiom to solve -the minimal polynomial, then you can substitute these roots into the -parametric form of the corresponding eigenvectors. - -You must be aware that unless an exact eigenvalue has been computed, -the eigenvector may be badly in error. -
      -
    • - -
      -
    • -
    -Another possibility is to use the operation -radicalEigenvectors tries to -compute explicitly the eignevectors in terms of radicals. -
      -
    • - -
      -
    • -
    -Alternatively, Axiom can compute real or complex approximations to the -eigenvectors and eigenvalues using the operations -realEigenvectors or -complexEigenvectors. They -each take an additional argument epsilon to specify the "precision" -required. In the real case, this means that each approximation will be -within plus or minus epsilon of the actual result. In the complex case, this -means that each approximation will be within plus or minus epsilon of the -actual result in each of the real and imaginary parts. - -The precision can be specified as a Float if -the results are desired in floating-point notation, or as -Fraction Integer if the results are -to be expressed using rational (or complex rational) numbers. -
      -
    • - -
      -
    • -
    -If an n by n matrix has n distinct eigenvalues (and therefore n eigenvectors) -the operation eigenMatrix gives you a -matrix of the eigenvectors. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -If a symmetric matrix has a basis of orthonormal eigenvectors, then -orthonormalBasis computes a list -of these vectors. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -<> -@ - -\subsection{linhilbert.xhtml} -<>= -<> - - - -<> -
    An Example: Determinant of a Hilbert Matrix
    -
    -Consider the problem of computing the determinant of a 10 by 10 Hilbert -matrix. The (i,j)-th entry of a Hilbert matrix is given by 1/(i+j+1). - -First do the computation using rational numbers to obtain the exact result. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -The result given by hardware floats is correct only to four significant digits -of precision. In the jargon of numerical analysis, the Hilbert matrix is said -to be "ill-conditioned". -
      -
    • - -
      -
    • -
    -Now repeat the computation at a higher precision using Float. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Reset digits to its default value. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{linintro.xhtml} -<>= -<> - - - -<> -
    Expanding to Higher Dimensions
    -
    -To get higher dimensional aggregates, you can create one-dimensional -aggregates with elements that are themselves aggregates, for example, -lists of list, one-dimensional arrays of list of multisets, and so on. For -applications requiring two-dimensional homogeneous aggregates, you will -likely find two-dimensional arrays and matrices useful. - -The entries in TwoDimensionalArray -and Matrix objects are all the same type, -except that those for Matrix must belong to a -Ring. You create and access elements in roughly -the same way. Since matrices have an understood algebraic structure, certain -algebraic operations are available for matrices but not for arrays. Because -of this, we limit our discussion here to Matrix, -that can be regarded as an extension of -TwoDimensionalArray. See -TwoDimensionalArray -For more -information about Axiom's linear algebra facilities see -Matrix, -Permanent, -SquareMatrix, -Vector, - -Computation of Eigenvalues and Eigenvectors, and - -Solution of Linear and Polynomial Equations. - -You can create a matrix from a list of lists, where each of the inner -lists represents a row of the matrix. -
      -
    • - -
      -
    • -
    -The "collections" construct (see - -Creating Lists and Streams with Iterators) -is useful for creating matrices whose entries are given by formulas. -
      -
    • - -
      -
    • -
    -Let vm denote the three by three Vandermonde matrix. -
      -
    • - -
      -
    • -
    -Use this syntax to extract an entry in the matrix. -
      -
    • - -
      -
    • -
    -You can also pull out a row or a column. -
      -
    • - -
      -
    • -
    -You can do arithmetic. -
      -
    • - -
      -
    • -
    -You can perform operations such as -transpose, -trace, and -determinant -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{linoperations.xhtml} -<>= -<> - - - -<> -
    Operations on Matrices
    -
    -Axiom provides both left and right scalar multiplication. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -You can add, subtract, and multiply matrices provided, of course, that the -matrices have compatible dimensions. If not, an error message is displayed. -
      -
    • - -
      -
    • -
    -This following product is defined but n*m is not. -
      -
    • - -
      -
    • -
    -The operations nrows and -ncols return the number of rows and -columns of a matrix. You can extract a row or a column of a matrix using -the operations row and -column. The object returned ia a -Vector. Here is the third column of the matrix n. -
      -
    • - -
      -
    • -
    -You can multiply a matrix on the left by a "row vector" and on the right by -a "column vector". -
      -
    • - -
      -
    • -
    -The operation inverse computes the inverse -of a matrix if the matrix is invertible, and returns "failed" if not. This -Hilbert matrix invertible. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -This matrix is not invertible. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The operation determinant computes the -determinant of a matrix provided that the entries of the matrix belong to a -CommutativeRing. The above matrix mm -is not invertible and, hence, must have determinant 0. -
      -
    • - -
      -
    • -
    -The operation trace computes the trace of a -square matrix. -
      -
    • - -
      -
    • -
    -The operation rank computes the rank of a matrix: -the maximal number of linearly independent rows or columns. -
      -
    • - -
      -
    • -
    -The operation nullity computes the nullity -of a matrix: the dimension of its null space. -
      -
    • - -
      -
    • -
    -The operation nullSpace returns a list -containing a basis for the null space of a matrix. Note that the nullity is -the number of elements in a basis for the null space. -
      -
    • - -
      -
    • -
    -The operation rowEchelon returns the row -echelon form of a matrix. It is easy to see that the rank of this matrix is -two and that its nullity is also two. -
      -
    • - -
      -
    • -
    -For more information see -Expanding to Higher Dimensions, - -Computation of Eigenvalues and Eigenvectors, and - -An Example: Determinant of a Hilbert Matrix. Also see -Permanent, -Vector, -OneDimensionalArray, and -TwoDimensionalArray. Issue the -system command -
      -
    • - -
      -
    • -
    -to display the full ist of operations defined by -Matrix. -<> -@ - -\subsection{linpermaent.xhtml} -<>= -<> - - - -<> -
    Permanent
    -
    -The package Permanent provides the function -permanent for square matrices. The -permanent of a square matrix can be -computed in the same way as the determinant by expansion of minors except -that for the permanent the sign for each element is 1, rather than being 1 -if the row plus column indices is positive and -1 otherwise. This function -is much more difficult to compute efficiently than the -determinant. An example of the use of -permanent is the calculation of the nth -derangement number, defined to be the number of different possibilities -for n couples to dance but never with their own spouse. Consider an n by x -matrix with entries 0 on the diagonal and 1 elsewhere. Think of the rows as -one-half of each couple (for example, the males) and the columns the other -half. The permanent of such a matrix gives the desired derangement number. -
      -
    • - -
      -
    • -
    -Here are some derangement numbers, which you see grow quite fast. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -<> -@ - -\subsection{linsquarematrices.xhtml} -<>= -<> - - - -<> -
    SquareMatrix
    -
    -The top level matrix type in Axiom is -Matrix, see -(Matrix), which provides basic arithmetic -and linear algebra functions. However, since the matrices can be of any -size it is not true that any pair can be added or multiplied. Thus -Matrix has little algebraic structure. - -Sometimes you want to use matrices as coefficients for polynomials or in -other algebraic contexts. In this case, -SquareMatrix should be used. The -domain SquareMatrix(n,R) gives the -ring of n by n square matrices over R. -
      -
    • - -
      -
    • -
    -The usual arithmetic operations are available. -
      -
    • - -
      -
    • -
    -Square matrices can be used where ring elements are required. For example, -here is a matrix with matrix entries. -
      -
    • - -
      -
    • -
    -Or you can construct a polynomial with square matrix coefficients. -
      -
    • - -
      -
    • -
    -This value can be converted to a square matrix with polynomial coefficients. -
      -
    • - -
      -
    • -
    -For more information on related topics see -Modes and -Matrix. Issue the system command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by -SquareMatrix. -<> -@ - -\subsection{linvectors.xhtml} -<>= -<> - - - -<> -
    Vector
    -
    -The Vector domain is used for storing -data in a one-dimensonal indexed data structure. A vector is a -homogeneous data structure in that all the components of the vector -must belong to the same Axiom domain. Each vector has a fixed length -specified by the user; vectors are not extensible. This domain is -similar to the -OneDimensionalArray domain, -except that when the components of a -Vector belong to a -Ring, arithmetic operations are provided. -For more examples of operations that are defined for both -Vector and -OneDimensionalArray, see -OneDimensionalArray. - -As with the OneDimensionalArray -domain, a -Vector can be created by calling the operation -new, its components can be accessed by calling -the operations elt and -qelt, and its components can be reset by -calling the operations -setelt and -setelt!. This creates a vector of -integers of length 5 all of whose components are 12. -
      -
    • - -
      -
    • -
    -This is how you create a vector from a list of its components. -
      -
    • - -
      -
    • -
    -Indexing for vectors begins at 1. The last element has index equal to -the length of the vector, which is computed by -#. -
      -
    • - -
      -
    • -
    -This is the standard way to use elt to extract -an element. -
      -
    • - -
      -
    • -
    -This is the standard way to use setelt to change an element. It is the -same as if you had typed setelt(v,3,99). -
      -
    • - -
      -
    • -
    -Now look at v to see the change. You can use -qelt and -qsetelt! (instead of -elt and -setelt, respectively) but only when you -know that the indexis within the valid range. -
      -
    • - -
      -
    • -
    -When the components belong to a -Ring, -Axiom provides arithmetic operations for -Vector. These include left and right -scalar multiplication. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Addition and subtraction are also available -
      -
    • - -
      -
    • -
    -Of course, when adding or subtracting, the two vectors must have the -same length or an error message is displayed. -
      -
    • - -
      -
    • -
    -For more information about other aggregate domains, see -List, -Matrix, -OneDimensionalArray. -Set, -Table, and -TwoDimensionalArray. -Issue the system command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by -Vector. -<> -@ - -\subsection{lin1darrays.xhtml} -<>= -<> - - - -<> -
    One Dimensional Array
    -
    -The OneDimensionalArray is used -for storing data in a one-dimensional indexed data structure. Such an array -is a homogeneous data structure in that all the entries of the array must -belong to the same Axiom domain. Each array has a fixed length specified -by the user and arrays are not extensible. The indexing of -one-dimensional arrays is one-based. This means that the "first" element of -an array is given the index 1. See also -Vector and -FlexibleArray. To create a -one-dimensional array, apply the operation -oneDimensionalArray to a list. -
      -
    • - -
      -
    • -
    -Another approach is to first create a, a one-dimensional array of 10 0's. -OneDimensionalArray has a -convenient abbreviation -ARRAY1. -
      -
    • - -
      -
    • -
    -Set each ith element to i, then display the result. -
      -
    • - -
      -
    • -
    -Square each element by mapping the function i+->i**2 onto each element. -
      -
    • - -
      -
    • -
    -Reverse the elements in place. -
      -
    • - -
      -
    • -
    -Swap the 4th and 5th element. -
      -
    • - -
      -
    • -
    -Sort the elements in place. -
      -
    • - -
      -
    • -
    -Create a new one-dimensional array b containing the last 5 elements of a. -
      -
    • - -
      -
    • -
    -Replace the first 5 elements of a with those of b. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{lin2darrays.xhtml} -<>= -<> - - - -<> -
    Two Dimensional Array
    -
    -The TwoDimensionalArray is used -for storing data in a two-dimensional data structure indexed by row and by -column. Such an array is a homogeneous data structure in that all the -entries of the array must belog to the same Axiom domain (although see -the Any domain). Each array has a -fixed number of rows and columns specified by the user and arrays are not -extensible. In Axiom, the indexing of two-dimensional arrays is one-based. -This means that both the "first" row of an array and the "first" column of -an array are given the index 1. Thus, the entry in the upper left corner -of an array is in position (1,1). - -The operation new creates an array with a -specified number of rows and columns and fills the components of that -array with a specified entry. The arguments of this operation specify the -number of rows, the number of columns, and the entry. This creates a -five-by-four array of integers, all of which are zero. -
      -
    • - -
      -
    • -
    -The entries of this array can be set to other integers using the -operation setelt. - -Issue this to set the element in the upper left corner of this array to 17. -
      -
    • - -
      -
    • -
    -Now the first element of the array is 17. -
      -
    • - -
      -
    • -
    -Likewise, elements of an array are extracted using the operation -elt. -
      -
    • - -
      -
    • -
    -Another way to use these two operations is as follows. This sets the -element in position (3,2) of the array to 15. -
      -
    • - -
      -
    • -
    -This extracts the element in position (,32) of the array. -
      -
    • - -
      -
    • -
    -The operations elt and -setelt come equipped with an error check which -verifies that the indices are in the proper ranges. For example, the -above array has five rows and four columns, so if you ask for the entry -in position (6,2) with arr(6,2) Axiom displays an error message. If there -is no need for an error check, you can call the operations -qelt and -qsetelt! which provide the same -functionality but without the error check. Typically, these operations -are called in well-tested programs. - -The operations row and -column extract rows and columns, -respectively, and return objects of -OneDimensionalArray with the -same underlying element type. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    - -You can determine the dimensions of an array by calling the operations -nrows and ncols, -which return the number of rows and columns, respectively. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -To apply an operation to every element of an array, use -map. This creates a new array. This -expression negates every element. -
      -
    • - -
      -
    • -
    -This creates an array where all the elements are doubled. -
      -
    • - -
      -
    • -
    -To change the array destructively, use -map! instead of -map. If you need to make a copy of any array, -use copy. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Use member? to see if a given element -is in an array. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -To see how many times an element appears in an array, use -count. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    - -For more information about the operations available for -TwoDimensionalArray, issue -
      -
    • - -
      -
    • -
    -For more information on related topics, see -Matrix and -OneDimensionalArray -<> -@ - -%%M -\subsection{man0page.xhtml} -<>= -<> - - -<> -Enter search string (use * for wild card unless counter-indicated): -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - -
    - - Constructors - - - Search for - - categories - , - - domains - , - or - - packages - -
    - - Operations - - Search for operations.
    - - Attributes - - Search for attributes.
    - - General - - Search for all three of the above.
    - - Documentation - - Search library documentation. -
    - - Complete - - All of the above. -
    - - Selectable - - Detailed search with selectable options. -
    - - Reference - - Search Reference documentation (* wild card is not accepted). -
    - - Commands - - View system command documentation. -
    -<> -@ - -\subsection{menualgebraadjointmatrix.xhtml} -<>= -<> - - -<> -menualgebraadjointmatrix not implemented -<> -@ - -\subsection{menualgebraapplytolist.xhtml} -<>= -<> - - -<> -menualgebraapplytolist not implemented -<> -@ - -\subsection{menualgebracharacteristicpolynomial.xhtml} -<>= -<> - - -<> -menualgebracharacteristicpolynomial not implemented -<> -@ - -\subsection{menualgebradeterminant.xhtml} -<>= -<> - - -<> -menualgebradeterminant not implemented -<> -@ - -\subsection{menualgebraeigenvalues.xhtml} -<>= -<> - - -<> -menualgebraeigenvalues not implemented -<> -@ - -\subsection{menualgebraeigenvectors.xhtml} -<>= -<> - - -<> -menualgebraeigenvectors not implemented -<> -@ - -\subsection{menualgebraentermatrix.xhtml} -<>= -<> - - -<> -menualgebraentermatrix not implemented -<> -@ - -\subsection{menualgebrainvertmatrix.xhtml} -<>= -<> - - -<> -menualgebrainvertmatrix not implemented -<> -@ - -\subsection{menualgebrageneratematrix.xhtml} -<>= -<> - - -<> -menualgebrageneratematrix not implemented -<> -@ - -\subsection{menualgebramakelist.xhtml} -<>= -<> - - -<> -menualgebramakelist not implemented -<> -@ - -\subsection{menualgebramaptolist.xhtml} -<>= -<> - - -<> -menualgebramaptolist not implemented -<> -@ - -\subsection{menualgebramaptomatrix.xhtml} -<>= -<> - - -<> -menualgebramaptomatrix not implemented -<> -@ - -\subsection{menualgebrareducelist.xhtml} -<>= -<> - - -<> -menualgebrareducelist not implemented -<> -@ - -\subsection{menualgebratransposematrix.xhtml} -<>= -<> - - -<> -menualgebratransposematrix not implemented -<> -@ - -\subsection{menuaxiomaddtopath.xhtml} -<>= -<> - - -<> -menuaxiomaddtopath not implemented -<> -@ - -\subsection{menuaxiomclearmemory.xhtml} -<>= -<> - - -<> -menuaxiomclearmemory not implemented -<> -@ - -\subsection{menuaxiomdeletefunction.xhtml} -<>= -<> - - -<> -menuaxiomdeletefunction not implemented -<> -@ - -\subsection{menuaxiomdeletevariable.xhtml} -<>= -<> - - -<> -menuaxiomdeletevariable not implemented -<> -@ - -\subsection{menuaxiominterrupt.xhtml} -<>= -<> - - -<> -menuaxiominterrupt not implemented -<> -@ - -\subsection{menuaxiomrestart.xhtml} -<>= -<> - - -<> -menuaxiomrestart not implemented -<> -@ - -\subsection{menuaxiomshowdefinition.xhtml} -<>= -<> - - -<> -menuaxiomshowdefinition not implemented -<> -@ - -\subsection{menuaxiomdisplay.xhtml} -<>= -<> - - -<> -menuaxiomdisplay not implemented -<> -@ - -\subsection{menuaxiomset.xhtml} -<>= -<> - - -<> -menuaxiomset not implemented -<> -@ - -\subsection{menuaxiomshowfunctions.xhtml} -<>= -<> - - -<> -menuaxiomshowfunctions not implemented -<> -@ - -\subsection{menuaxiomshowvariables.xhtml} -<>= -<> - - -<> -menuaxiomshowvariables not implemented -<> -@ - -\subsection{menuaxiomtoggletimedisplay.xhtml} -<>= -<> - - -<> -menuaxiomtoggletimedisplay not implemented -<> -@ - -\subsection{menucalculuscalculussum.xhtml} -<>= -<> - - -<> -menucalculuscalculussum not implemented -<> -@ - -\subsection{menucalculuscalculusproduct.xhtml} -<>= -<> - - -<> -menucalculuscalculusproduct not implemented -<> -@ - -\subsection{menucalculuschangevariable.xhtml} -<>= -<> - - -<> -menucalculuschangevariable not implemented -<> -@ - -\subsection{menucalculuscontinuedfractions.xhtml} -<>= -<> - - -<> -menucalculuscontinuedfractions not implemented -<> -@ - -\subsection{menucalculusdifferentiate.xhtml} -<>= -<> - - -<> -menucalculusdifferentiate not implemented -<> -@ - -\subsection{menucalculusdividepolynomials.xhtml} -<>= -<> - - -<> -menucalculusdividepolynomials not implemented -<> -@ - -\subsection{menucalculusfindlimit.xhtml} -<>= -<> - - -<> -menucalculusfindlimit not implemented -<> -@ - -\subsection{menucalculusgetseries.xhtml} -<>= -<> - - -<> -menucalculusgetseries not implemented -<> -@ - -\subsection{menucalculusgreatestcommondivisor.xhtml} -<>= -<> - - -<> -menucalculusgreatestcommondivisor not implemented -<> -@ - -\subsection{menucalculusleastcommonmultiple.xhtml} -<>= -<> - - -<> -menucalculusleastcommonmultiple not implemented -<> -@ - -\subsection{menucalculusintegrate.xhtml} -<>= -<> - - -<> -menucalculusintegrate not implemented -<> -@ - -\subsection{menucalculusinverselaplacetransform.xhtml} -<>= -<> - - -<> -menucalculusinverselaplacetransform not implemented -<> -@ - -\subsection{menucalculuslaplacetransform.xhtml} -<>= -<> - - -<> -menucalculuslaplacetransform not implemented -<> -@ - -\subsection{menucalculuslevel3.xhtml} -<>= -<> - - -<> -menucalculuslevel3 not implemented -<> -@ - -\subsection{menucalculuslevel3a.xhtml} -<>= -<> - - -<> -menucalculuslevel3a not implemented -<> -@ - -\subsection{menucalculuslevel3b.xhtml} -<>= -<> - - -<> -menucalculuslevel3b not implemented -<> -@ - -\subsection{menucalculuslevel3c.xhtml} -<>= -<> - - -<> -menucalculuslevel3c not implemented -<> -@ - -\subsection{menucalculuspadeapproximation.xhtml} -<>= -<> - - -<> -menucalculuspadeapproximation not implemented -<> -@ - -\subsection{menucalculuspartialfractions.xhtml} -<>= -<> - - -<> -menucalculuspartialfractions not implemented -<> -@ - -\subsection{menucalculusrischintegrate.xhtml} -<>= -<> - - -<> -menucalculusrischintegrate not implemented -<> -@ - -\subsection{menueditcopy.xhtml} -<>= -<> - - -<> -menueditcopy not implemented -<> -@ - -\subsection{menueditcopyasimage.xhtml} -<>= -<> - - -<> -menueditcopyasimage not implemented -<> -@ - -\subsection{menueditcopytex.xhtml} -<>= -<> - - -<> -menueditcopytex not implemented -<> -@ - -\subsection{menueditcopytext.xhtml} -<>= -<> - - -<> -menueditcopytext not implemented -<> -@ - -\subsection{menueditcut.xhtml} -<>= -<> - - -<> -menueditcut not implemented -<> -@ - -\subsection{menueditpaste.xhtml} -<>= -<> - - -<> -menueditpaste not implemented -<> -@ - -\subsection{menueditdeleteselection.xhtml} -<>= -<> - - -<> -menueditdeleteselection not implemented -<> -@ - -\subsection{menueditselectiontoimage.xhtml} -<>= -<> - - -<> -menueditselectiontoimage not implemented -<> -@ - -\subsection{menueditselectiontoinput.xhtml} -<>= -<> - - -<> -menueditselectiontoinput not implemented -<> -@ - -\subsection{menuequationsrealrootsofpolynmial.xhtml} -<>= -<> - - -<> -menuequationsrealrootsofpolynmial not implemented -<> -@ - -\subsection{menuequationsatvalue.xhtml} -<>= -<> - - -<> -menuequationsatvalue not implemented -<> -@ - -\subsection{menuequationsboundaryvalueproblem.xhtml} -<>= -<> - - -<> -menuequationsboundaryvalueproblem not implemented -<> -@ - -\subsection{menuequationsinitialvalueproblem1.xhtml} -<>= -<> - - -<> -menuequationsinitialvalueproblem1 not implemented -<> -@ - -\subsection{menuequationsinitialvalueproblem2.xhtml} -<>= -<> - - -<> -menuequationsinitialvalueproblem2 not implemented -<> -@ - -\subsection{menuequationssolvealgebraicsystem.xhtml} -<>= -<> - - -<> -menuequationssolvealgebraicsystem not implemented -<> -@ - -\subsection{menuequationseliminatevariable.xhtml} -<>= -<> - - -<> -menuequationseliminatevariable not implemented -<> -@ - -\subsection{menuequationssolvelinearsystem.xhtml} -<>= -<> - - -<> -menuequationssolvelinearsystem not implemented -<> -@ - -\subsection{menuequationssolveode.xhtml} -<>= -<> - - -<> -menuequationssolveode not implemented -<> -@ - -\subsection{menuequationssolveodewithlaplace.xhtml} -<>= -<> - - -<> -menuequationssolveodewithlaplace not implemented -<> -@ - -\subsection{menuequationsrootsofpolynomial.xhtml} -<>= -<> - - -<> -menuequationsrootsofpolynomial not implemented -<> -@ - -\subsection{menuequationssolve.xhtml} -<>= -<> - - -<> -menuequationssolve not implemented -<> -@ - -\subsection{menuequationssolvenumerically.xhtml} -<>= -<> - - -<> -menuequationssolvenumerically not implemented -<> -@ - -\subsection{menufileexit.xhtml} -<>= -<> - - -<> -menufileexit not implemented -<> -@ - -\subsection{menufileinputfile.xhtml} -<>= -<> - - -<> -menufileinputfile not implemented -<> -@ - -\subsection{menufileloadlibrary.xhtml} -<>= -<> - - -<> -menufileloadlibrary not implemented -<> -@ - -\subsection{menufileopen.xhtml} -<>= -<> - - -<> -menufileopen not implemented -<> -@ - -\subsection{menufileprint.xhtml} -<>= -<> - - -<> -menufileprint not implemented -<> -@ - -\subsection{menufileread.xhtml} -<>= -<> - - -<> -menufileread not implemented -<> -@ - -\subsection{menufilesave.xhtml} -<>= -<> - - -<> -menufilesave not implemented -<> -@ - -\subsection{menufilesaveas.xhtml} -<>= -<> - - -<> -menufilesaveas not implemented -<> -@ - -\subsection{menufiletogglespool.xhtml} -<>= -<> - - -<> -menufiletogglespool not implemented -<> -@ - -\subsection{menunumericsetprecision.xhtml} -<>= -<> - - -<> -menunumericsetprecision not implemented -<> -@ - -\subsection{menunumerictobigfloat.xhtml} -<>= -<> - - -<> -menunumerictobigfloat not implemented -<> -@ - -\subsection{menunumerictofloat.xhtml} -<>= -<> - - -<> -menunumerictofloat not implemented -<> -@ - -\subsection{menunumerictogglenumericoutput.xhtml} -<>= -<> - - -<> -menunumerictogglenumericoutput not implemented -<> -@ - -\subsection{menusimplifyaddalgebraicequality.xhtml} -<>= -<> - - -<> -menusimplifyaddalgebraicequality not implemented -<> -@ - -\subsection{menusimplifycomplexsimplification.xhtml} -<>= -<> - - -<> -menusimplifycomplexsimplification not implemented -<> -@ - -\subsection{menusimplifycontractlogarithms.xhtml} -<>= -<> - - -<> -menusimplifycontractlogarithms not implemented -<> -@ - -\subsection{menusimplifyevaluatenounform.xhtml} -<>= -<> - - -<> -menusimplifyevaluatenounform not implemented -<> -@ - -\subsection{menusimplifyexpandexpression.xhtml} -<>= -<> - - -<> -menusimplifyexpandexpression not implemented -<> -@ - -\subsection{menusimplifyexpandlogarithms.xhtml} -<>= -<> - - -<> -menusimplifyexpandlogarithms not implemented -<> -@ - -\subsection{menusimplifyfactorialsandgamma.xhtml} -<>= -<> - - -<> -menusimplifyfactorialsandgamma not implemented -<> -@ - -\subsection{menusimplifyfactorcomplex.xhtml} -<>= -<> - - -<> -menusimplifyfactorcomplex not implemented -<> -@ - -\subsection{menusimplifyfactorexpression.xhtml} -<>= -<> - - -<> -menusimplifyfactorexpression not implemented -<> -@ - -\subsection{menusimplifymoduluscomputation.xhtml} -<>= -<> - - -<> -menusimplifymoduluscomputation not implemented -<> -@ - -\subsection{menusimplifysimplifyexpression.xhtml} -<>= -<> - - -<> -menusimplifysimplifyexpression not implemented -<> -@ - -\subsection{menusimplifysubtitute.xhtml} -<>= -<> - - -<> -menusimplifysubtitute not implemented -<> -@ - -\subsection{menusimplifysimplifyradicals.xhtml} -<>= -<> - - -<> -menusimplifysimplifyradicals not implemented -<> -@ - -\subsection{menusimplifytogglealgebraicflag.xhtml} -<>= -<> - - -<> -menusimplifytogglealgebraicflag not implemented -<> -@ - -\subsection{menusimplifytrigsimplification.xhtml} -<>= -<> - - -<> -menusimplifytrigsimplification not implemented -<> -@ - -%%N -\subsection{numbasicfunctions.xhtml} -<>= -<> - - - -<> -
    Basic Functions
    -
    -The size of an integer in Axiom is only limited by the amount of computer -storage you have available. The usual arithmetic operations are available. -
      -
    • - -
      -
    • -
    -There are a number of ways of working with the sign of an integer. Let's -use the x as an example. -
      -
    • - -
      -
    • -
    -First of all, there is the absolute value function. -
      -
    • - -
      -
    • -
    -The sign operation returns -1 if its argument -is negative, 0 if zero and 1 if positive. -
      -
    • - -
      -
    • -
    -You can determine if an integer is negative in several other ways. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Similarly, you can find out if it is positive. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -This is the recommended way of determining whether an integer is zero. -
      -
    • - -
      -
    • -
    -
    -Use the zero? whenever you are testing any -mathematical object for equality with zero. This is usually more efficient -than using = (think of matrices: it is easier -to tell if a matrix is zero by just checking term by term than constructing -another "zero" amtrix and comparing the two matrices term by term) and also -avoids the problem that = is usually used -for creating equations. -
    -This is the recommended way of determining whether an integer is equal to one. -
      -
    • - -
      -
    • -
    -This syntax is used to test equality using =. -It says that you want a Boolean (true or false) -answer rather than an equation. -
      -
    • - -
      -
    • -
    -The operations odd? and -even? determine whether an integer is odd -or even, respectively. They each return a -Boolean -object. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The operation gcd computes the greatest common -divisor of two integers. -
      -
    • - -
      -
    • -
    -The operation lcm computes their least common -multiple. -
      -
    • - -
      -
    • -
    -To determine the maximum of two integers, use max. -
      -
    • - -
      -
    • -
    -To determine the minimum, use min. -
      -
    • - -
      -
    • -
    -The reduce operation is used to extend -binary operations to more than two arguments. For example, you can use -reduce to find the maximum integer in a -list or compute the least common multiple of all integers in a list. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -The infix operator "/" is not used to compute the quotient of integers. -Rather , it is used to create rational numbers as described in -Fractions. -
      -
    • - -
      -
    • -
    -The infix operator quo computes the integer -quotient. -
      -
    • - -
      -
    • -
    -The infix operation rem computes the integer -remainder. -
      -
    • - -
      -
    • -
    -One integer is evenly divisible by another if the remainder is zero. -The operation exquo can also be used. See -Unions for an example. -
      -
    • - -
      -
    • -
    -The operation divide returns a record of -the quotient and remainder and thus is more efficient when both are needed. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Records are discussed in detail in -Records. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{numberspage.xhtml} -<>= -<> - - -<> -The following types of numbers are among those available in Axiom - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Integers - - Arithmetic with arbitrarily large integers -
    - Fractions - - Rational numbers and general fractions -
    - Machine Floats - - Fixed precision machine floating point -
    - Real Numbers - - Arbitrary precision decimal arithmetic -
    - Complex Numbers - - Complex numbers in general -
    - Finite Fields - - Arithmetic in characteristic p -
    -
    -Addtional topics - -<> -@ - -\subsection{numcardinalnumbers.xhtml} -<>= -<> - - - -<> -
    Cardinal Numbers
    -
    -The CardinalNumber can be used for -values indicating the cardinality of sets, both finite and infinite. For -example, the dimension operation in the -category VectorSpace returns a cardinal -number. - -The non-negative integers have a natural construction as cardinals -
    -0=#{ }, 1={0}, 2={0,1}, ..., n={i | 0 <= i < n}
    -
    -The fact that 0 acts as a zero for the multiplication of cardinals is -equivalent to the axiom of choice. - -Cardinal numbers can be created by conversion from non-negative integers. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -The can also be obtained as the named cardinal Aleph(n) -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The finite? operation tests whether a value -is a finite cardinal, that is, a non-negative integer. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Similarly, the countable? operation -determines whether a value is a countable cardinal, that is, finite or -Aleph(0). -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Arithmetic operations are defined on cardinal numbers as follows: - - - - - - - - - - - - - - - - - -
    - x+y = #(X+Y) - - cardinality of the disjoint union -
    - x-y = #(X-Y) - - cardinality of the relative complement -
    - x*y = #(X*Y) - - cardinality of the Cartesian product -
    - x+*y = #(X**Y) - - cardinality of the set of maps from Y to X -
    -Here are some arithmetic examples: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Subtraction is a partial operation; it is not defined when subtracting -a larger cardinal from a smaller one, nor when subtracting two equal -infinite cardinals. -
      -
    • - -
      -
    • -
    -The generalized continuum hypothesis asserts that -
    - 2**Aleph i = Aleph(i+1)
    -
    -and is independent of the axioms of set theory. (Goedel, The consistency -of the continuum hypothesis, Ann. Math. Studies, Princeton Univ. Press, -1940) The CardinalNumber domain -provides an operation to assert whether the hypothesis is to be assumed. -
      -
    • - -
      -
    • -
    -When the generalized continuum hypothesis is assumed, exponentiation to -a transfinite power is allowed. -
      -
    • - -
      -
    • -
    -Three commonly encountered cardinal numbers are -
    -  a = #Z                 countable infinity
    -  c = #R                 the continuum
    -  f = #{g|g: [0,1]->R}
    -
    -In this domain, these values are obtained under the generalized continuum -hypothesis in this way: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -<> -@ - -\subsection{numcomplexnumbers.xhtml} -<>= -<> - - - -<> -
    Complex Numbers
    -
    -The Complex constructor implements -complex objects over a commutative ring R. Typically, the ring R is -Integer, -Fraction Integer, -Float, -DoubleFloat, -R can also be a symbolic type, like -Polynomial Integer. -For more information about the numerical and graphical aspects of -complex numbers, see -Numeric Functions -in section 8.1. - -Complex objects are created by the -complex operation -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The standard arithmetic operations are available. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -If R is a field, you can also divide the complex objects. -
      -
    • - -
      -
    • -
    -Use a conversion -(see Conversion in -section 2.7) to view the last object as a fraction of complex -integers. -
      -
    • - -
      -
    • -
    -The predefined macro %i is defined to be complex(0,1). -
      -
    • - -
      -
    • -
    -You can also compute the -conjugate and -norm of a complex number. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The real and -imag operations are provided to -extract the real and imaginary parts, respectively. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The domain -Complex Integer -is also called the Gaussian integers. If R is the integers (or, more -generally, a -Euclidean Domain), -you can compute greatest common divisors. -
      -
    • - -
      -
    • -
    -You can also compute least common multiples -
      -
    • - -
      -
    • -
    -You can factor Gaussian integers. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -<> -@ - -\subsection{numcontinuedfractions.xhtml} -<>= -<> - - - -<> -
    Continued Fractions
    -
    -Continued fractions have been a fascinating and useful tool in mathematics -for well over three hundred years. Axiom implements continued fractions -for fractions of any Euclidean domain. In practice, this usually means -rational numbers. In this section we demonstrate some of the operations -available for manipulating both finite and infinite continued fractions. -It may be helpful if you review -Stream to remind yourself of some of the -operations with streams. - -The ContinuedFraction domain is a -field and therefore you can add, subtract, multiply, and divide the -fractions. The -continuedFraction operation -converts its fractional argument to a continued fraction. -
      -
    • - -
      -
    • -
    -This display is the compact form of the bulkier -
    -  3 +             1
    -     ---------------------------
    -     7 +            1
    -         -----------------------
    -         15 +         1
    -              ------------------
    -              1 +        1
    -                  --------------
    -                  25 +     1
    -                       ---------
    -                       1 +   1
    -                           -----
    -                           7 + 1
    -                               -
    -                               4
    -
    -You can write any rational number in a similar form. The fraction will -be finite and you can always take the "numerators" to be 1. That is, any -rational number can be written as a simple, finite continued fraction of -the form -
    -a(1) +            1
    -     ---------------------------
    -  a(2) +            1
    -         -----------------------
    -       a(3) +         1
    -                        .
    -                         .
    -                          .
    -                           1
    -
    -              -----------------
    -              a(n-1) +     1
    -                       ---------
    -                          a(n)
    -
    -The a(i) are called partial quotients and the operation -partialQuotients creates a -stream of them. -
      -
    • - -
      -
    • -
    -By considering more and more of the fraction, you get the -convergents. For example, the -first convergent is a(1), the second is a(1)+1/a(2) and so on. -
      -
    • - -
      -
    • -
    -Since this ia a finite continued fraction, the last convergent is the -original rational number, in reduced form. The result of -approximants is always an infinite -stream, though it may just repeat the "last" value. -
      -
    • - -
      -
    • -
    -Inverting c only changes the partial quotients of its fraction by -inserting a 0 at the beginning of the list. -
      -
    • - -
      -
    • -
    -Do this to recover the original continued fraction from this list of -partial quotients. The three argument form of the -continuedFraction operation takes -an element which is the whole part of the fraction, a stream of elements -which are the denominators of the fraction. -
      -
    • - -
      -
    • -
    -The streams need not be finite for -continuedFraction. Can you guess -which irrational number has the following continued fraction? See the end -of this section for the answer. -
      -
    • - -
      -
    • -
    -In 1737 Euler discovered the infinite continued fraction expansion -
    - e - 1                 1
    - ----- =  ---------------------------
    -p          2 +            1
    -              -----------------------
    -              6  +         1
    -                   ------------------
    -                  10 +        1
    -                       --------------
    -                       14 +  ... 
    -
    -We use this expansion to compute rational and floating point -approximations of e. (For this and other interesting expansions, -see C. D. Olds, Continued Fractions, New Mathematical Library, -Random House, New York, 1963 pp.134-139). - -By looking at the above expansion, we see that the whole part is 0 -and the numerators are all equal to 1. This constructs the stream of -denominators. -
      -
    • - -
      -
    • -
    -Therefore this is the continued fraction expansion for (e-1)/2. -
      -
    • - -
      -
    • -
    -These are the rational number convergents. -
      -
    • - -
      -
    • -
    -You can get rational convergents for e by multiplying by 2 and adding 1. -
      -
    • - -
      -
    • -
    -You can also compute the floating point approximations to these convergents. -
      -
    • - -
      -
    • -
    -Compare this to the value of e computed by the -exp operation in -Float. -
      -
    • - -
      -
    • -
    -In about 1658, Lord Brouncker established the following expansion for 4/pi. -
    -  1 +             1
    -     ---------------------------
    -     2 +            9
    -         -----------------------
    -         2  +         25
    -              ------------------
    -              2 +        49
    -                  --------------
    -                  2  +     81
    -                       ---------
    -                       2 +   ...
    -
    -Let's use this expansion to compute rational and floating point -approximations for pi. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -As you can see, the values are converging to -
    -  pi = 3.14159265358979323846..., but not very quickly.
    -
    -
      -
    • - -
      -
    • -
    -You need not restrict yourself to continued fractions of integers. Here is -an expansion for a quotient of Gaussian integers. -
      -
    • - -
      -
    • -
    -This is an expansion for a quotient of polynomials in one variable with -rational number coefficients. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -To conclude this section, we give you evidence that -
    -  z =  3 +             1
    -          ---------------------------
    -          3 +            1
    -              -----------------------
    -              6 +          1
    -                  -------------------
    -                   3 +        1
    -                       --------------
    -                       6  +     1
    -                            ---------
    -                            3 + ...
    -
    -is the expansion of the square root of 11. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{numexamples.xhtml} -<>= -<> - - - -<> -
    Examples
    -
    -One can show that if an integer of the form 2**k+1 is prime, then k -must be a power of two. - -Pierre Fermat conjectured that every integer of the form 2**(2**n)+1 -is prime. Let's look for a counterexample. First define a function: -
      -
    • - -
      -
    • -
    -Now try commands like: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -until you find an integer of this form which is composite. You can also -try the following command: -
      -
    • - -
      -
    • -
    -Obviously, Fermat didn't have access to Axiom. -<> -@ - -\subsection{numfactorization.xhtml} -<>= -<> - - - -<> -
    Primes and Factorization
    -
    -Use the operation factor to factor integers. -It returns an object of type -Factored Integer. See Factored for a -discussion of the manipulation of factored objects. -
      -
    • - -
      -
    • -
    -The operation prime? returns true or false -depending on whether its argument is a prime. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The operation nextPrime returns the -least prime number greater than its argument. -
      -
    • - -
      -
    • -
    -The operation prevPrime returns the -greatest prime number less than its argument. -
      -
    • - -
      -
    • -
    -To compute all primes between two integers (inclusively), use the -operation primes. -
      -
    • - -
      -
    • -
    -You might sometimes want to see the factorization of an integer -when it is considered a Gaussian (that is, complex) integer. See -Complex for more details. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{numfinitefields.xhtml} -<>= -<> - - -<> -
    Finite Fields
    -
    -A finite field (also called a Galois field) is a finite -algebraic structure where on can add, multiply, and divide under the same -laws (for example, commutativity, associativity, or distributivity) as -apply to the rational, real, or complex numbers. Unlike those three fields, -for any finite field there exists a positive prime integer p, called the -characteristic, such that p*x=0 for -any element x in the finite field. In fact, the number of elements in a -finite filed is a power of the characteristic and for each prime p and -positive integer n there exists exactly one finite field with p**n elements, -up to an isomorphism. (For more information about the algebraic structure and -properties of finite fields, see for example, S. Lang Algebr, -Second Edition, New York, Addison-Wesley Publishing Company, Inc. 1984, -ISBN 0 201 05476 6; or R. Lidl, H. Niederreiter, Finite Fields, -Encyclopedia of Mathematics and Its Applications, Vol. 20, Cambridge. -Cambridge Univ. Press, 1983, ISBN 0 521 30240 4) - -When n=1, the field has p elements and is called a prime field, -discussed in - -Modular Arithmetic and Prime Fields -in section 8.11.1. There are several ways of implementing extensions of -finite fields, and Axiom provides quite a bit of freedom to allow you to -choose the one that is best for your application. Moreover, we provide -operations for converting among the different representations of extensions -and different extensions of a single field. Finally, note that you usually -need to package call operations from finite fields if the operations do not -take as an argument an object of the field. See -Package Calling and Target Types -in section 2.9 for more information on package calling. - -<> -@ - -\subsection{numfloat.xhtml} -<>= -<> - - -<> -
    Real Numbers
    -
    -Axiom provides two kinds of floating point numbers. The domain -Float -(abbreviation FLOAT) -implements a model of arbitrary precisions floating point numbers. The -domain -DoubleFloat -(abbreviation DFLOAT) -is intended to make available hardware floating point arithmetic in Axiom. -The actual model of floating point -DoubleFloat that Axiom -provides is system dependent. For example, on the IBM System 370, Axiom -uses IBM double precision which has fourteen hexadecimal digits of -precision or roughly sixteen decimal digits. Arbitrary precision floats -allow the user to specify the precision at which arithmetic operations -are computed. Although this is an attractive facility, it comes at a cost. -Arbitrary precision floating point arithmetic typically takes twenty to -two hundred times more time than hardware floating point. - -For more information about Axiom's numeric and graphic facilities -see Graphics in section 7, -Numeric Functions -in section 8.1, and DoubleFloat - -<> -@ - -\subsection{numfractions.xhtml} -<>= -<> - - - -<> -
    Fractions
    -
    -Axiom handles fractions in many different contexts and will -automatically simplify fractions whenever possible. Here are -some examples: -
      -
    • -
      -
    • -
    • -
      -
    • -
    • -
      -
    • -
    • -
      -
    • -
    -
    -Additional Topics: - - - - - - - - - -
    - Rational Numbers - - Quotients of integers -
    - Quotient Fields - - Quotients over an arbitrary integral domain -
    -<> -@ - -\subsection{numfunctions.xhtml} -<>= -<> - - - -<> -
    Integer Number Theory Functions
    -
    -The -IntegerNumberTheoryFunctions package contains a variety of -operations of interest to number theorists. Many of these operations -deal with divisibility properties of integers (Recall that an integer -a divides an integer b if there is an integer c such that b=a*c.) - -The operation divisors returns a list -of the divisors of an integer -
      -
    • - -
      -
    • -
    -You can now compute the number of divisors of 144 and the sum of the -divisors of 144 by counting and summing the elements of the list we -just created. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Of course, you can compute the number of divisors of an integer n, -usually denoted d(n), and the sum of the divisors of an integer n, -usually denoted ς(n), without ever listing the divisors of n. - -In Axiom, you can simply call the operations -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The key is that d(n) and ς(n) are "multiplicative functions". -This means that when n and m are relatively prime, that is, when n and -m have no factors in common, then d(nm)=d(n)d(m) and ς(nm)= -ς(n)ς(m). Note that these functions are trivial to -compute when n is a prime power and are computed for general n from -the prime factorization of n. Other examples of multiplicative functions -are ς_k(n), the sum of the k-th powers of the divisors of n and -φ(n), the number of integers between 1 and n which are prime to n. -The corresponding Axiom operations are called -sumOfKthPowerDivisors and -eulerPhi. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    - -An interesting function is called μ(n), the Moebius mu function, -defined as -
    -        0 if n has a repeated prime factor 
    -          (i.e. is divisible by a square)
    -  μ(n)= 1 if n is 1
    -       (-1)^k if n is the product of k distinct primes
    -
    -The corresponding Axiom operation is -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -This function occurs in the following theorem: -
    -Theorem(Moebius Inversion Formula):
    -Let f(n) be a function on the positive integers and let F(n) be defined -by F(n)=sum of f(n) over d | n where the sum is taken over the positive -divisors of n. Then the values of f(n) can be recovered from the values -of F(n):f(n) = sum of μF(n/d) over d|n, where the sum is taken -over the positive divisors of n. - -When f(n)=1, the F(n)=d(n). Thus, if you sum μ(d)*d(n/d) over -the positive divisors of d of n, you should always get 1. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Similarly, when f(n)=n, then F(n)=ς(n). Thus, if you sum -μ(d)*ς(n/d) over the positive divisors d of n, you -should always get n. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -The Fibonacci numbers are defined by -
    -  F(1)=1
    -  F(2)=1
    -  F(n)=F(n-1)+F(n-2) for n=3,4,...
    -
    -The operation fibonacci computes the -nth Fibonacci number. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Fibonacci numbers can also be expressed as sums of binomial -coefficients. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    - -Quadratic symbols can be computed with the operations -legendre and -jacobi. The Legendre symbol (a/p) is -defined for integers a and p with p an odd prime number. By definition, -
    -        = -1 when a is not a square (mod p)
    -  (a/p) =  0 when a is divisible by p
    -        = +1 when a is a square (mod p)
    -
    -You compute (a/p) via the command legendre(a,p) -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    - -The Jacobi symbol (a/n) is the usual extension of the Legendre symbol, -where n is an arbitrary integer. The most important property of the -Jacobi symbol is the following: if K is a quadratic field with -discriminant d and quadratic character χ, the χ(n)=(d/n). -Thus, you can use the Jacobi symbol to compute, say, the class numbers -of imaginary quadratic fields from a standard class number formula. This -function computes the class number of the imaginary quadratic field with -discriminant d. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    - -<> -@ - -\subsection{numgeneralinfo.xhtml} -<>= -<> - - -<> -
    General Integer Information
    -
    -Axiom provides many operations for manipulating arbitrary precision integers. -In this section we will show some of those that come from -Integer itself plus some that are implemented -in other packages. More examples of integers are in the following sections: -Numbers. -IntegerNumberTheoryFunctions, -DecimalExpansion, -BinaryExpansion, -HexadecimalExpansion, and -RadixExpansion - -<> -@ - -\subsection{numintegerfractions.xhtml} -<>= -<> - - -<> - numintegerfractions not implemented -<> -@ - -\subsection{numintegers.xhtml} -<>= -<> - - - -<> -
    Integers
    -
    -In Axiom, integers can be as large as you like. Try the following -examples. -
      -
    • -
      -
    • -
    • -
      -
    • -
    -Of course, you can now do arithmetic as usual on these (very) large -integers: -
      -
    • -
      -
    • -
    • -
      -
    • -
    • -
      -
    • -
    -Axiom can factor integers, but numbers with small prime factors -
      -
    • -
      -
    • -
    -will factor more rapidly than numbers with large prime factors. -
      -
    • -
      -
    • -
    -
    -Additional topics - - - - - - - - - - - - - - - - - - - - - -
    - General Info - - General information and examples of integers -
    - Factorization - - Primes and factorization -
    - Functions - - Number theoretic functions -
    - Examples - - Examples from number theory -
    - Problems - - Problems from number theory -
    -<> -@ - -\subsection{nummachinefloats.xhtml} -<>= -<> - - - -<> -
    Machine Floats
    -
    -Axiom provides two kinds of floating point numbers. The domain -Float -(abbreviation FLOAT) -implements a model of arbitrary precisions floating point numbers. The -domain -DoubleFloat -(abbreviation DFLOAT) -is intended to make available hardware floating point arithmetic in Axiom. -The actual model of floating point -DoubleFloat that Axiom -provides is system dependent. For example, on the IBM System 370, Axiom -uses IBM double precision which has fourteen hexadecimal digits of -precision or roughly sixteen decimal digits. Arbitrary precision floats -allow the user to specify the precision at which arithmetic operations -are computed. Although this is an attractive facility, it comes at a cost. -Arbitrary precision floating point arithmetic typically takes twenty to -two hundred times more time than hardware floating point. - -By default, floating point numbers that you enter into Axiom are of type -Float. -
      -
    • - -
      -
    • -
    -You must therefore tell Axiom that you want to use -DoubleFloat values and operations. The -following are some conservative guidelines for getting Axiom to use -DoubleFloat. - -To get a value of type DoubleFloat., -use a target with - "@", ... -
      -
    • - -
      -
    • -
    -a conversion,... -
      -
    • - -
      -
    • -
    -or an assignment to a declared variable. It is more efficient if you -use a target rather than an explicit or implicit conversion. -
      -
    • - -
      -
    • -
    -You also need to declare functions that work with -DoubleFloat. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Use package calling for operations from -DoubleFloat -unless the arguments themselves are already of type -DoubleFloat. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -By far, the most common usage of -DoubleFloat -is for functions to be graphied. For more information about Axiom's -numerical and graphical facilities, see -Graphics -in section 7, -Numeric Functions -in section 8.1, and -Float - -The usual arithmetic and elementary functions are available for -DoubleFloat. Use -
      -
    • - -
      -
    • -
    -to get a list of operations. -<> -@ - -\subsection{nummachinesizedintegers.xhtml} -<>= -<> - - - -<> -
    Machine-sized Integers
    -
    -The SingleInteger is intended to -provide support in Axiom for machine integer arithmetic. It is generally -much faster than (bignum) Integer arithmetic -but suffers from a limited range of values. Since Axiom can be implemented -on top of various dialects of Lisp, the actual representation of small -integers may not correspond exactly to the host machines integer -representation. - -You can discover the minimum and maximum values in your implementation by -using min and max -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -To avoid confusion with Integer, which is -the default type for integers, you usually need to work with declared -variables (see Declarations). -
      -
    • - -
      -
    • -
    -or use package calling (see -Package Calling and Target Types). -
      -
    • - -
      -
    • -
    -You can add, multiply, and subtract -SingleInteger objects, and ask for the -greatest common divisor -(gcd). -
      -
    • - -
      -
    • -
    -The least common multiple -(lcm) is also available. -
      -
    • - -
      -
    • -
    -Operations -mulmod, -addmod, -submod, and -invmod -are similar -- they provide arithmetic modulo a given small integer. -Here is 5*6 mod 13. -
      -
    • - -
      -
    • -
    -To reduce a small integer modulo a prime, use -positiveRemainder -
      -
    • - -
      -
    • -
    -Operations And, -Or, -xor, -and Not -provide bit level operations on small integers. -
      -
    • - -
      -
    • -
    -Use shift(int,numToShift) to shift bits, where int is shifted left if -numToShift is positive, right if negative. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Many other operations are available for small integers, including many of -those provided for Integer. -To see other operations use the system command -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{numnumbertheoreticfunctions.xhtml} -<>= -<> - - - -<> -
    Some Number Theoretic Functions
    -
    -Axiom provides several number theoretic operations for integers. -More examples are in -IntegerNumberTheoryFunctions, - -The operation fibonacci computes the -Fibonacci numbers. The algorithm has a running time O(log(n)**3) for -argument n. -
      -
    • - -
      -
    • -
    -The operation legendre computes the -Legendre symbol for its two integer arguments where the second one is -prime. If you know the second argument to be prime, use -jacobi instead where no check is made. -
      -
    • - -
      -
    • -
    -The operation jacobi computes the Jacobi symbol -for its two integer arguments. By convention, 0 is returned if the greatest -common divisor of the numerator and denominator is not 1. -
      -
    • - -
      -
    • -
    -The operation eulerPhi compute the values -of Euler's φ-function where φ(n) equals the number of -positive integers less than or equal to n that are relatively prime to the -positive integer n. -
      -
    • - -
      -
    • -
    -The operation moebiusMu computes the -Moebius μ function. -
      -
    • - -
      -
    • -
    -Although they have somewhat limited utility, Axiom provides Roman numerals. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -<> -@ - -\subsection{numnumericfunctions.xhtml} -<>= -<> - - - -<> -
    Numeric Functions
    -
    -Axiom provides two basic floating point types: -Float and -DoubleFloat. This section -describes how to use numerical operations defined on these types and -the related complex types. As we mentioned in -An Overview of Axiom -in chapter 1., the -Float type is a software implementation of -floating point numbers in which the exponent and the significand may have -any number of digits. See -Float for detailed information about this -domain. The -DoubleFloat is usually a hardware -implementation of floating point numbers, corresponding to machine double -precision. The types -Complex Float and -Complex DoubleFloat are the -corresponding software implementations of complex floating point numbers. -In this section the term floating point type means any of these four -types. The floating point types immplement the basic elementary functions. -These include (where $ means -DoubleFloat, -Float, -Complex Float, -Complex DoubleFloat):
    -exp, -log: $ -> $
    -sin, -cos, -tan, -cot, -sec, -csc: $ -> $
    -asin, -acos, -atan, -acot, -asec, -acsc: $ -> $
    -sinh, -cosh, -tanh, -coth, -sech, -csch: $ -> $
    -asinh, -acosh, -atanh, -acoth, -asech, -acsch: $ -> $
    -pi: () -> $
    -sqrt: $ -> $
    -nthRoot: ($,Integer) -> $
    -**: ($,Fraction Integer) -> $
    -**: ($,$) -> $
    -The handling of roots depends on whether the floating point type is -real or complex: for the real floating point types, -DoubleFloat and -Float, if a real root exists the one with -the same sign as the radicand is returned; for the complex floating -point types, the principal value is returned. Also, for real floating -point types the inverse functions produce errors if the results are not -real. This includes cases such as asin(1.2), log(-3.2), sqrt(-1,1). -The default floating point type is Float -or Complex Float, just use normal -decimal notation. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -To evaluate functions using -DoubleFloat or -Complex DoubleFloat, a -declaration or conversion is required. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -A number of special functions are provided by the package -DoubleFloatSpecialFunctions -for the machine precision floating point types. The special functions -provided are listed below, where F stands for the types -Float -or Complex Float. The real versions -of the functions yield an error if the result is not real. -
      -
    • - Gamma: F -> F
      - Gamma(z) is the Euler gamma - function, Gamma(Z), defined by
      - Gamma(z) = integrate(t^(z-1)*exp(-t),t=0..%infinity) -
    • -
    • - Beta: F -> F
      - Beta(u,v) is the Euler Beta - function B(u,v), defined by
      - Beta(u,v)=integrate(t^(u-1)*(1-t)^(b-1),t=0..1)
      - This is related to Gamma(z) by
      - Beta(u,v)=Gamma(u)*Gamma(v)/Gamma(u+v) -
    • -
    • - logGamma: F -> F
      - logGamma(z) is the natural logarithm of Gamma(z). This can often be - computed even if Gamma(z) cannot. -
    • -
    • - digamma: F -> F
      - digamma(z), also called psi(z), is the function psi(z), defined by
      - psi(z)=Gamma'(z)/Gamma(z) -
    • -
    • - polygamma: (NonNegativeInteger, F) -> F
      - polygamma(n,z) is the n-th derivative of digamma(z) -
    • -
    • - besselJ: (F, F) -> F
      - besselJ(v,z) is the Bessel function of the first kind, J(v,z). This - function satisfies the differential equation
      - z^(2w)''(z)+zw'(z)+(z^2-v^2)w(z)=0 -
    • -
    • - besselY: (F, F) -> F
      - besselY(v,z) is the Bessel function of the second kind, Y(v,z). This - function satisfies the same differential equation as - besselJ. The implementation simply - uses the relation
      - Y(v,z)=(J(v,z)cos(v*%pi)-J(-v,z))/sin(v*%pi) -
    • -
    • - besselI: (F, F) -> F
      - besselI(v,z) if the modifed Bessel function of the first kind, I(v,z). - This function satisfies the differential equation
      - z^2w''(z)+zw'(z)-(z^2+v^2)w(z)=0 -
    • -
    • - besselK: (F, F) -> F
      - besselK(v,z) is the modifed Bessel function of the second kind, K(v,z). - This function satisfies the same differential equation as - besselI. The implementation simply uses - the relation
      - K(v,z)=%pi*(I(v,z)-I(-v,z))/(2sin(v*%pi)) -
    • -
    • - airyAi: F -> F
      - airyAi(z) is the Airy function Ai(z). This function satisfies the - differential equation
      - w''(z)-zw(z)=0
      - The implementation simply uses the relation
      - Ai(-z)=1/3*sqrt(z)*(J(-1/3,2/3*z^(3/2))+J(1/3,2/3*z^(3/2))) -
    • -
    • - airyBi: F -> F
      - airyBi(z) is the Airy function Bi(z). This function satisfies the - same differential equation as airyAi. - The implementation simply uses the relation
      - Bi(-z)=1/3*sqrt(3*z)*(J(-1/3,2/3*z^(3/2))-J(1/3,2/3*z^(3/2))) -
    • -
    • - hypergeometric0F1: (F, F) -> F
      - hypergeometric0F1(c,z) is the hypergeometric function 0F1(;c;z). The above - special functions are defined only for small floating point types. If you - give Float arguments, they are converted to - DoubleFloat by Axiom. -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -A number of additional operations may be used to compute numerical -values. These are special polynomial functions that can be evaluated -for values in any commutative ring R, and in particular for values in -any floating-point type. The following operations are provided by the -package -OrthogonalPolynomialFunctions: -
      -
    • chebyshevT: - (nonNegativeInteger,R) -> R -
      - chebyshevT(n,z) is the nth Chebyshev polynomial of the first kind, - T[n](z). These are defined by -
      - (1-t*z)/(1-2*t*z*t**2)=sum(T[n](z)*t**n,n=0..) -
    • -
    • chebyshevU: - (nonNegativeInteger,R) -> R -
      - chebyshevU(n,z) is the nth Chebyshev polynomial of the second kind, - U[n](z). These are defined by -
      - 1/(1-2*t*z+t**2)=sum(U[n](z)*t**n,n=0..) -
    • -
    • hermiteH: - (NonNegativeInteger,R) -> R -
      - hermiteH(n,z) is the nth Hermite polynomial, H[n](z). These are - defined by -
      - exp(2*t*z-t**2)=sum(H[n](z)*t**n/n!,n=0..) -
    • -
    • laguerreL: - (NonNegativeInteger,R) -> R -
      - laguerreL(n,z) is the nth Laguerre polynomial, L[n](z). These are - defined by -
      - (exp(-t*z/(1-t))/(1-t)=sum(L[n](z)*t**n/n!,n=0..) -
    • -
    • laguerreL: - (NonNegativeInteger,NonNegativeInteger,R) -> R -
      - labuerreL(m,n,2) is the associated Laguerre polynomial, L<m>[n](z). - This is the nth derivative of L[n](z). -
    • -
    • legendreP: - (NonNegativeInteger,R) -> R -
      - legendreP(n,z) is the nth Legendre polynomial, P[n](z). These are - defined by -
      - 1/sqrt(1-2*z*t+t**2)=sum(P[n](z)*t**n,n=0..) -
    • -
    -
    -
    -These operations require non-negative integers for the indices, -but otherwise the argument can be given as desired. -
      -
    • - -
      -
    • -
    -The expression chebyshevT(n,z) evaluates to the nth Chebyshev polynomial -of the first kind. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The expression chebyshevU(n,z) evaluates to the nth Chebyshev polynomial -of the second kind. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The expression hermiteH(n,z) evaluates to the nth Hermite polynomial. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The expression laguerreL(n,z) evaluates to the nth Laguerre polynomial. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -The expression legendreP(n,z) evaluates to the nth Legendre polynomial. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -
    -
    -Finally, three number-theoretic polynomial operations may be evaluated. -The following operations are provided by the package - -NumberTheoreticPolynomialFunctions. -
      -
    • bernoulliB: - (NonNegativeInteger,R) -> R -
      - bernoulliB(n,z) is the nth Bernoulli polynomial, B[n](z). These are - defined by -
      - t*exp(z*t)/(exp t - 1)=sum(B[n](z)*t**n/n! for n=0..) -
    • -
    • eulerE: - (NonNegativeInteger,R) -> R -
      - eulerE(n,z) is the nth Euler polynomial, E[n](z). These are defined by -
      - 2*exp(z*t)/(exp t + 1)=sum(E[n](z)*t**n/n! for n=0..) -
    • -
    • cyclotomic: - (NonNegativeInteger,R) -> R -
      - cyclotomic(n,z) is the nth cyclotomic polynomial φ(n,z). - This is the polynomial whose roots are precisely the primitive nth - roots of unity. This polynomial has degree given by the Euler - totient function φ(n). -
    • -
    - -The expression bernoulliB(n,z) evaluates to the nth Bernoulli polynomial. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The expression eulerE(n,z) evaluates to the nth Euler polynomial. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The expression cyclotomic(n,z) evaluates to the nth cyclotomic polynomial. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -
    -
    -Drawing complex functions in Axiom is presently somewhat awkward compared -to drawing real functions. It is necessary to use the -draw operations that operate on functions -rather than expressions. - -This is the complex exponential function. When this is displayed in color, -the height is the value of the real part of the function and the color is -the imaginary part. Red indicates large negative imaginary values, green -indicates imaginary values near zero and blue/violet indicates large -positive imaginary values. -
      -
    • - -
      -
    • -
    -This is the complex arctangent function. Again, the height is the real part -of the function value but here the color indicates the function value's phase. -The position of the branch cuts are clearly visible and one can see that the -function is real only for a real argument. -
      -
    • - -
      -
    • -
    -This is the complex Gamma function. -
      -
    • - -
      -
    • -
    -This shows the real Beta function near the origin. -
      -
    • - -
      -
    • -
    -This is the Bessel function J(alpha,x) for index alpha in the range -6..4 and -argument x in the range 2..14. -
      -
    • - -
      -
    • -
    -This is the modified Bessel function I(alpha,x) evaluated for various real -values of the index alpha and fixed argument x=5. -
      -
    • - -
      -
    • -
    -This is similar to the last example except the index alpha takes on complex -values in a 6x6 rectangle centered on the origin. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{numoctonions.xhtml} -<>= -<> - - - -<> -
    Octonions
    -
    -The Octonions, also called the Cayley-Dixon algebra, defined over a -commutative ring are an eight-dimensional non-associative algebra. Their -construction from quaternions is similar to the construction of quaternions -from complex numbers (see Quaternion). -As Octonion creates an eight-dimensional -algebra, you have to give eight components to construct an octonion. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Or you can use two quaternions to create an octonion. -
      -
    • - -
      -
    • -
    -You can easily demonstrate the non-associativity of multiplication. -
      -
    • - -
      -
    • -
    -As with the quaternions, we have a real part, the imaginary parts i, j, -k, and four additional imaginary parts E, I, J, and K. These parts -correspond to the canonical basis (1,i,j,k,E,I,J,K). For each basis -element there is a component operation to extract the coefficient of -the basis element for a given octonion. -
      -
    • - -
      -
    • -
    -A basis with respect to the quaternions is given by (1,E). However, you -might ask, what then are the commuting rules? To answer this, we create -some generic elements. We do this in Axim by simply changing the ground -ring from -Integer to -Polynomial Integer. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Note that quaternions are automatically converted to octonions in the -obvious way. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Finally, we check that the norm, defined as -the sum of the squares of the coefficients, is a multiplicative map. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Since the result is 0, the norm is multiplicative -
      -
    • - -
      -
    • -
    -Issue the system command -
      -
    • - -
      -
    • -
    -to display the list of operations defined by -Octonion. -<> -@ - -\subsection{numotherbases.xhtml} -<>= -<> - - - -<> -
    Expansions in other Bases
    -
    -It is possible to expand numbers in general bases. Here we expand -111 in base 5. This means -
    -    2   1   0      2    1  -
    -  10 +10 +10  = 4*5 +2*5 +5
    -
    -
      -
    • - -
      -
    • -
    -You can expand fractions to form repeating expansions. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -For bases from 11 to 36 the letters A through Z are used. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -For bases greater than 36, the ragits are separated by blanks. -
      -
    • - -
      -
    • -
    -The RadixExpansion type provides -operations to obtain the individual ragits. Here is a rational number -in base 8. -
      -
    • - -
      -
    • -
    -The operation wholeRagits returns -a list of the ragits for the integral part of the number. -
      -
    • - -
      -
    • -
    -The operations prefixRagits and -cycleRagits returns lists of the -initial and repeating ragist in the fractional part of the number. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -You can construct any radix expansion by giving the whole, prefix, and -cycle parts. The declaration is necessary to let Axiom know the base -of the ragits. -
      -
    • - -
      -
    • -
    -If there is no repeating part, then the list [0] should be used. -
      -
    • - -
      -
    • -
    -If you are not interested in the repeating nature of the expansion, -an infinite stream of ragits can be obtained using -fractRagits -
      -
    • - -
      -
    • -
    -Of course, it's possible to recover the fraction representation:n -
      -
    • - -
      -
    • -
    -Issue the system command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by -RadixExpansion. More examples of -expansions are available in -DecimalExpansion, -BinaryExpansion, and -HexadecimalExpansion -<> -@ - -\subsection{numpartialfractions.xhtml} -<>= -<> - - - -<> -
    Partial Fractions
    -
    -A partial fraction is a decomposition of a quotient into a sum of quotients -where the denominators of the summand are powers of primes. (Most people -first encounter partial fractions when they are learning integral calculus. -For a technical discussion of partial fractions see, for example, Lang's -Algebra.) For example, the rational number 1/6 is decomposed into 1/2-1/3. -You can compute partial fractions of quotients of objects from domains -belonging to the category -EuclideanDomain. For example, -Integer, -Complex Integer, and - -UnivariatePolynomial(x,Fraction Integer) -all belong to -EuclideanDomain. -In the examples following, we demonstrate how to decompose quotients of -each of these kinds of objects into partial fractions. - -It is necessary that we know how to factor the denominator when we want to -compute a partial fraction. Although the interpreter can often do this -automatically, it may be necessary for you to include a call to -factor. In these examples, it is not -necessary to factor the denominators explicitly. The main operation for -computing partial fractions is called -partialFraction and we use this -to compute a decomposition of 1/10!. The first argument top -partialFraction is the numerator -of the quotient and the second argument is the factored denominator. -
      -
    • - -
      -
    • -
    -Since the denominators are powers of primes, it may be possible to expand -the numerators further with respect to those primes. Use the operation -padicFraction to do this. -
      -
    • - -
      -
    • -
    -The operation compactFraction -returns an expanded fraction into the usual form. The compacted version -is used internally for computational efficiency. -
      -
    • - -
      -
    • -
    -You can add, subtract, multiply, and divide partial fractions. In addition, -you can extract the parts of the decomposition. -numberOfFractionalTerms -computes the number of terms in the fractional part. This does not include -the whole part of the fraction, which you get by calling -wholePart. In this example, the whole part -is 0. -
      -
    • - -
      -
    • -
    -The operation -nthFractionalTerm -returns the individual terms in the decomposition. Notice that the object -returned is a partial fraction itself. -firstNumer and -firstDenom extract the numerator and -denominator of the first term of the fraction. -
      -
    • - -
      -
    • -
    -Given two gaussian integers (see Complex), -you can decompose their quotient into a partial fraction. -
      -
    • - -
      -
    • -
    -To convert back to a quotient, simply use the conversion -
      -
    • - -
      -
    • -
    -To conclude this section, we compute the decomposition of -
    -                   1
    -     -------------------------------
    -                   2       3       4
    -     (x + 1)(x + 2) (a + 3) (x + 4)
    -
    -The polynomials in this object have type - -UnivariatePolynomial(x,Fraction Integer). -We use the primeFactor operation -(see Factored) to create the denominator -in factored form directly. -
      -
    • - -
      -
    • -
    -These are the compact and expanded partial fractions for the quotient. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Also see - -FullPartialFractionExpansion for examples of factor-free conversion of -quotients to full partial fractions. - -Issue the system -command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by -PartialFraction. - -<> -@ - -\subsection{numproblems.xhtml} -<>= -<> - - - -<> -
    Problems
    -
    -One can show that if an integer of the form 2**k-1 is prime then -k must be prime. -
    -Proof -Suppose that k=m*n is a non-trivial factorization. Then -
    -       2^m = 1 (mod (2^m-1))
    -   2^(m*n) = 1 (mod (2^m-1))
    -  so 2^m-1 is a non-trivial factor of 2^k-1
    -
    - -Problem Find the smallest prime p such that 2**p-1 is not prime -
    -Answer -
    -First, define a function: -
      -
    • - -
      -
    • -
    -You can try factoring f(p) as p ranges through the set of primes. -For example, -
      -
    • - -
      -
    • -
    -This gets tedious after a while, so let's use Axiom's stream facility. -A streamm is essentially an infinite sequence. First, we create a stream -consisting of the positive integers: -
      -
    • - -
      -
    • -
    -Now, we create a stream consisting of the primes: -
      -
    • - -
      -
    • -
    -Here is the 25th prime: -
      -
    • - -
      -
    • -
    -Next, create the stream of numbers of the form 2**p-1 with p prime: -
      -
    • - -
      -
    • -
    -Finally, form the stream of factorizations of the elements of numbers: -
      -
    • - -
      -
    • -
    -You can see that the fifth number in the stream (2047=23*89) is the first -one that has a non-trivial factorization. Since 2**11=2048, the solution -to the problem is 11. - -Here is another way to see that 2047 is the first number in the stream -that is composite: -
      -
    • - -
      -
    • -
    -

    -Problem: Find the smallest positive integer n such that -n**2-n+41 is not prime. -
    -Answer: When n=41, n**2-n+41=41**2, which certainly isn't prime. -Is there any smaller integer that works? Here are the first 40 values: -
      -
    • - -
      -
    • -
    -Now have Axiom factor the numbers on this list: -
      -
    • - -
      -
    • -
    -You can see that 41 is the smallest positive integer n such that -n**2-n+41 is not prime. -<> -@ - -\subsection{numquaternions.xhtml} -<>= -<> - - - -<> -
    Quaternions
    -
    -The domain contructor Quaternion -implements quaternions over commutative rings. - -The basic operation for creating quaternions is -quatern. This is a quaternion -over the rational numbers. -
      -
    • - -
      -
    • -
    -The four arguments are the real part, the i imaginary part, -the j imaginary part, and the k imaginary part, respectively. -
      -
    • - -
      -
    • -
    -Because q is over the rationals (and nonzero), you can invert it. -
      -
    • - -
      -
    • -
    -The usual arithmetic (ring) operations are available. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -In general, multiplication is not commutative. -
      -
    • - -
      -
    • -
    -There are no predefined constants for the imaginary i, j, and k parts, -but you can easily define them -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -These satisfy the normal identities. -
      -
    • - -
      -
    • -
    -The norm is the quaternion times its conjugate. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -For information on -related topics, see Complex and -Octonion. You can also issue the -system command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by -Quaternion. -<> -@ - -\subsection{numquotientfields.xhtml} -<>= -<> - - - -<> -
    Quotient Fields
    -
    -The Fraction domain implements quotients. -The elements must belong to a domain of category -IntegralDomain: multiplication -must be commutative and the product of two non-zero elements must not be -zero. This allows you to make fractions of most things you would think of, -but don't expect to create a fraction of two matrices. The abbreviation for -Fraction is -FRAC. - -Use / to create a fraction. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The standard arithmetic operations are available. -
      -
    • - -
      -
    • -
    -Extract the numerator and denominator by using -numer and denom, -respectively. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Operations like -max, min, -negative?, -positive?, and -zero? are all available if they are -provided for the numerators and denominators. See -Integer for examples. - -Don't expect a useful answer from -factor, -gcd, or -lcm if you apply them to fractions. -
      -
    • - -
      -
    • -
    -Since all non-zero fractions are invertible, these operations have -trivial definitions. -
      -
    • - -
      -
    • -
    -Use map to apply -factor to the numerator and denominator, -which is probably what you mean. -
      -
    • - -
      -
    • -
    - -Other forms of fractions are available, Use -continuedFraction -to create a continued fraction. -
      -
    • - -
      -
    • -
    -Use partialFraction to create a -partial fraction. -See continuedFraction -and PartialFraction for -additional information and examples. -
      -
    • - -
      -
    • -
    -Use conversion to create alternative views of fractions with objects -moved in and out of the numerator and denominator. -
      -
    • - -
      -
    • -
    -Conversion is discussed in detail in -Conversion. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{numrationalnumbers.xhtml} -<>= -<> - - - -<> -
    Rational Numbers
    -
    -Like integers, rational numbers can be arbitrarily large. For example: -
      -
    • - -
      -
    • -
    -Rational numbers will not be converted to decimals unless you explicitly -ask Axiom to do so. To convert a rational number to a decimal, use the -function numeric. Here's an example: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -You can find the numerator and denominator of rational numbers using the -functions numer and -denom, respectively. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -To factor the numerator and denominator of a fraction, use the following -command: -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{numrepeatingbinaryexpansions.xhtml} -<>= -<> - - - -<> -
    Repeating Binary Expansions
    -
    -All rational numbers have repeating binary expansions. Operations to -access the individual bits of a binary expansion can be obtained by -converting the value to -RadixExpansion(2). More examples -of expansions are available in -DecimalExpansion, -HexadecimalExpansion, and -RadixExpansion. - -The expansion (of type -BinaryExpansion) -of a rational number is returned by the -binary operation. -
      -
    • - -
      -
    • -
    -Arithmetic is exact. -
      -
    • - -
      -
    • -
    -The period of the expansion can be short or long... -
      -
    • - -
      -
    • -
    -or very long -
      -
    • - -
      -
    • -
    -These numbers are bona fide algebraic objects. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -<> -@ - -\subsection{numrepeatingdecimals.xhtml} -<>= -<> - - - -<> -
    Repeating Decimals
    -
    -All rationals have repeating decimal expansions. Operations to access -the individual digits of a decimal expansion can be obtained by converting -the value to RadixExpansion(10). - -The operation decimal is used to create -this expansion of type -DecimalExpansion. -
      -
    • - -
      -
    • -
    -Arithmetic is exact. -
      -
    • - -
      -
    • -
    -The period of the expansion can be short or long... -
      -
    • - -
      -
    • -
    -or very long -
      -
    • - -
      -
    • -
    -These numbers are bona fide algebraic objects. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -More examples of expansions are available in -BinaryExpansion, -HexadecimalExpansion, and -RadixExpansion. Issue the system -command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by -RadixExpansion. -<> -@ - -\subsection{numrepeatinghexexpansions.xhtml} -<>= -<> - - - -<> -
    Repeating Hexadecimal Expansions
    -
    -All rationals have repeating hexadecimals expansions. The operation -hex returns these expansions of type -HexadecimalExpansion. -Operations to access the individual numerals of a hexadecimal expansion -can be obtained by converting the value to -RadixExpansion(16). More examples of -expansions are available in -DecimalExpansion, -BinaryExpansion, and -RadixExpansion. - -This is a hexadecimal expansion of a rational number. -
      -
    • - -
      -
    • -
    -Arithmetic is exact. -
      -
    • - -
      -
    • -
    -The period of the expansion can be short or long... -
      -
    • - -
      -
    • -
    -or very long. -.
      -
    • - -
      -
    • -
    -These numbers are bona fide algebraic objects. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Issue the system command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by -HexadecimalExpansion. - -<> -@ - -\subsection{numromannumerals.xhtml} -<>= -<> - - - -<> -
    Roman Numerals
    -
    -The Roman numeral package was added to Axiom in MCMLXXXVI for use in -denoting higher order derivatives. - -For example, let f be a symbolic operator. -
      -
    • - -
      -
    • -
    -This is the seventh derivative of f with respect to x -
      -
    • - -
      -
    • -
    -You can have integers printed as Roman numerals by declaring variables -to be of type -RomanNumeral -(abbreviation ROMAN). -
      -
    • - -
      -
    • -
    -This package now has a small but devoted group of followers that claim -this domain has shown its efficacy in many other contexts. They claim -that Roman numerals are every bit as useful as ordinary integers. -In a sense, they are correct, because Roman numerals form a ring and -you can therefore construct polynomials with Roman numeral -coefficients, matrices over Roman numerals,etc.. -
      -
    • - -
      -
    • -
    -Was Fibonacci Italian or ROMAN? -
      -
    • - -
      -
    • -
    -You can also construct fractions with Roman numeral numerators and -denominators, as this matrix Hilberticus illustrates. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Note that the inverse of the matrix has integral -ROMAN entries. -
      -
    • - -
      -
    • -
    -Unfortunately, the spoil-sports say that the fun stops when the -numbers get big -- mostly because the Romans didn't establish -conventions about representing very large numbers. -
      -
    • - -
      -
    • -
    -You work it out! -
      -
    • - -
      -
    • -
    -Issue the system command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by -RomanNumeral). -<> -@ - -%%O -\subsection{ocwmit18085.xhtml} -<>= -<> - - -<> -18.085 Mathematical Methods for Engineers I Course Notes -
    -These are course notes based on the - - M.I.T. Open Courseware lectures by Gilbert Strang. - - -<> -@ - -\subsection{ocwmit18085lecture1.xhtml} -<>= -<> - - -<> - Positive Definite Matrices K=A'CA -
    -In applied mathematics we have 2 basic tasks: -
      -
    • Find the equations
    • -
    • Solve the equations
    • -
    -

    Positive Definite Matrices

    -Certain matrices occur frequently in applied math. These three -matrices (K,T,and M) are canonical examples. -We have 3 3x3 matrices, -
    -K:Matrix(Integer):=[[2,-1,0],[-1,2,-1],[0,-1,2]]
    -
    -        + 2   - 1   0 +
    -        |             |
    -        |- 1   2   - 1|
    -        |             |
    -        + 0   - 1   2 +
    -               Type: Matrix Integer
    -T:Matrix(Integer):=[[1,-1,0],[-1,2,-1],[0,-1,2]]
    -
    -        + 1   - 1   0 +
    -        |             |
    -        |- 1   2   - 1|
    -        |             |
    -        + 0   - 1   2 +
    -               Type: Matrix Integer
    -B:Matrix(Integer):=[[1,-1,0],[-1,2,-1],[0,-1,1]]
    -
    -        + 1   - 1   0 +
    -        |             |
    -        |- 1   2   - 1|
    -        |             |
    -        + 0   - 1   1 +
    -               Type: Matrix Integer
    -
    -These matrices are similar and can be generalized to square matrices -of order N, with n x n elements. All of these matrices have the same -element along the diagonal. T (aka Top) differs from K in the first row. -B (aka Both) differs from K in the first and last row. These represent -different boundary conditions in the problem. - -We can create K(n), T(n) and B(n) with the following commands: -
    -k(n) == 
    - M := diagonalMatrix([2 for i in 1..n]) 
    - for i in 1..n-1 repeat M(i,i+1):=-1 
    - for i in 1..n-1 repeat M(i+1,i):=-1 
    - M::SquareMatrix(n,Fraction(Integer))
    -
    -
    -t(n) == 
    - M:=k(n)
    - N:=M::Matrix(Fraction(Integer)) 
    - qsetelt!(N,1,1,1) 
    - N::SquareMatrix(n,Fraction(Integer))
    -
    -
    -b(n) == 
    - M:=k(n)
    - N:=M::Matrix(Fraction(Integer)) 
    - qsetelt!(N,1,1,1) 
    - qsetelt!(N,n,n,1)
    - N::SquareMatrix(n,Fraction(Integer))
    -
    - -K:=k(n) has a few key properties: -
      -
    • K is symmetric, that is K=K^T
    • -
    • K might be nonsingular, that is, it is invertible
    • -
    • K has a non-zero determinant
    • -
    • K is banded (main diagonal and neighbors)
    • -
    • K is tri-diagonal (main diagonal and nearest neighbors
    • -
    • K is extremely sparse
    • -
    • K has constant diagonals, (shift invariant, time invariant)
    • -
    • K is Toeplitz (constant diagonal, shows up in filters)
    • -
    • K is good for Fourier analysis
    • -
    - -
    The inverse of T
    -If we look at the inverse of the T matrix we see: -
    -T^-1
    -
    -        +3  2  1+
    -        |       |
    -        |2  2  1|
    -        |       |
    -        +1  1  1+
    -               Type: Matrix Fraction Integer
    -
    -Notice that these are all integers because the determinant of -this matrix is 1 -
    -determinant T
    -
    -     1
    -               Type: Fraction Integer
    -
    -
    -We can check that this matrix is the inverse of T. - -When computing the inverse the row pattern [-1 2 -1] is a -``second difference''. The first column of the inverse matrix -is [3 2 1] which is linear. When we take the second difference -of a linear object we should get 0. Thus, -
    -[[-1,2,-1]]::MATRIX(INT)*[[3],[2],[1]]
    -
    -     [0]
    -               Type: Matrix Integer
    -
    -
    -The third column of the T matrix is linear and constant. If we -take the second difference of that we also find it is zero: -
    - [[-1,2,-1]]::MATRIX(INT)*[[1],[1],[1]]
    -
    -    [0]
    -               Type: Matrix Integer
    -
    -and the diagonal element of the unit matrix must be one. So -the second difference of the second column is: -
    - [[-1,2,-1]]::MATRIX(INT)*[[2],[2],[1]]
    -
    -    [1]
    -               Type: Matrix Integer
    -
    -So these simple checks show that we're getting the correct -row and column values for the identity matrix by multiplying -T times its inverse. - -
    -
    The inverse of B
    -If we look for the inverse of the B matrix we can observe -that the rows sum to zero which implies that it is not -invertible. Thus it is singular. - -K and T are positive definite. B is only positive semi-definite. - -If we can find a vector that it takes to zero, that is if we can -solve for x,y,z in: -
    -        + 1   - 1   0 + + x +    + 0 +
    -        |             | |   |    |   |
    -        |- 1   2   - 1| | y | =  | 0 |
    -        |             | |   |    |   |
    -        + 0   - 1   1 + + z +    + 0 +
    -
    -
    -The constant vector [1 1 1] solves this equation. When -the rows sum to zero we are adding each row by a constant -and thus we add each row times the constant one and we -get zeros. If the matrix takes some vector to zero it -cannot have an inverse since if -
    -   B x = 0
    -
    -and x is not zero. If B had an inverse only x=0 would -solve the equation. Since x=1 solves the equation B has -no inverse. The vector x is in the nullspace of B. In -fact any constant vector, e.g. [3 3 3] is in the nullspace. -Thus the nullspace of B is cx for any constant c. - -When doing matrix multiplication one way to think about the -work is to consider the problem by columns. Thus in the -multiplication -
    -        + 1   - 1   0 + + x +    + 0 +
    -        |             | |   |    |   |
    -        |- 1   2   - 1| | y | =  | 0 |
    -        |             | |   |    |   |
    -        + 0   - 1   1 + + z +    + 0 +
    -
    -
    -we can think about this as -
    -x*(first column) + y*(second column) + z*(third column).
    -
    -and for the constant vector [1 1 1] this means that we -just need to sum the columns. - -Alternatively this can be computed by thinking of the -multiplication as -
    - (first row)*(vector)
    - (second row)*(vector)
    - (third row)*(vector)
    -
    - -
    -
    The inverse of K
    -Now we consider the K matrix we see the inverse -
    -K
    -
    -         + 2   - 1   0 +
    -         |             |
    -         |- 1   2   - 1|
    -         |             |
    -         + 0   - 1   2 +
    -               Type: SquareMatrix(3,Fraction Integer)
    -kinv:=K^-1
    -
    -         +3  1  1+
    -         |-  -  -|
    -         |4  2  4|
    -         |       |
    -         |1     1|
    -         |-  1  -|
    -         |2     2|
    -         |       |
    -         |1  1  3|
    -         |-  -  -|
    -         +4  2  4+
    -               Type: SquareMatrix(3,Fraction Integer)
    -
    -We can take the determinant of k -
    -determinant K
    -
    -    4
    -               Type: Fraction Integer
    -
    -Thus there is a constant 1/4 which can be factored out -
    -4*kinv
    -
    -         +3  2  1+
    -         |       |
    -         |2  4  2|
    -         |       |
    -         +1  2  3+
    -               Type: SquareMatrix(3,Fraction Integer)
    -
    -Notice that the inverse is a symmetric matrix but not tri-diagonal. -The inverse is not a sparse matrix so much more computation would -be involved when using the inverse. - -In order to solve the system -
    - K u = f
    -
    -by elimination which implies multiplying and subtracting rows. -
    -       K    u  =  f    ==>   U     u  =    f
    -
    -For the 2x2 case we see: -
    -                             +2  -1+        +  f1  +
    -    +2  -1+  +x+   +f1+      |     |  +x+   |      |
    -    |     |  | | = |  |  ==> |    3|  | | = |   1  |
    -    +-1  2+  +y+   +f2+      |0   -|  +y+   |f2+-f1|
    -                             +    2+        +   2  +
    -
    -
    -
    -By multiplying row1 by 1/2 and adding it to row2 we create an -upper triangular matrix U. Since we chose K(1,1), the number 2 -is called the first pivot. K(2,2), the number 3/2, is called -the second pivot. - -For K 2x2 above is symmetric and invertible (since the pivots -are all non-zero). - -For the K 3x3 case the pivots are 2, 3/2, and 4/3. (The next pivots -would be 5/4, 6/5, etc. for larger matrices). - -For the T 3x3 case the pivots are 1, 1, and 1. - -For the B 3x3 case the third pivot would be zero. - -
    -
    Generalizing the matrix pivot operations
    -For the 2x2 case we see contruct an elimination matrix E which we can use -to pre-multipy by K to give us the upper triangular matrix U -
    -      E     K    =   U
    -
    -In detail we see -
    -
    -    +1  0+            +2  -1+
    -    |    |  +2  -1+   |     |
    -    |1   |  |     | = |    3|
    -    |-  1|  +-1  2+   |0   -|
    -    +2   +            +    2+
    -
    -
    -We wish to rewrite this as -
    -       K = L U 
    -
    - -
    -
    The big 4 solve operations in Linear Algebra
    -
      -
    1. Elimination
    2. -
    3. Gram-Schmidt Orthoginalization
    4. -
    5. Eigenvalues
    6. -
    7. Singular Value Decomposition
    8. -
    -Each of these operations is described by a factorization of K. -Elimination is written -
    -  K = L U
    -
    -where L is lower triangular and U is upper triangular. -Thus we need a matrix L which when multiplied by U gives K. -The required matrix is the inverse of the E matrix above since -
    -
    -1)      E K =     U
    -
    -     -1        -1
    -2)  E   E K = E   U
    -
    -               -1
    -3)      I K = E   U
    -
    -               -1
    -4)  but   L = E
    -
    -5)  so    K = L U
    -
    -Given the matrix operations above we had -
    -      E       K   =   U
    -
    -    +1  0+            +2  -1+
    -    |    |  +2  -1+   |     |
    -    |1   |  |     | = |    3|
    -    |-  1|  +-1  2+   |0   -|
    -    +2   +            +    2+
    -
    -
    -and the inverse of E is the same matrix with a minus sign in -the second row, thus: -
    -        +  1  0+ 
    -   -1   |      | 
    -  E   = |  1   | = L 
    -        |- -  1| 
    -        +  2   + 
    -
    -
    - -
    -
    Making the matrices symmetric
    -We would like to preserve the symmetry property which we can -do with a further decomposition of LU as follows: -
    -      L        U     =     L        D       U'
    -
    -  +  1  0+  +2  -1+    +  1  0+  +2  0+  +1   1+
    -  |      |  |     |    |      |  |    |  |  - -|
    -  |  1   |  |    3|  = |  1   |  |   3|  |    2|
    -  |- -  1|  |0   -|    |- -  1|  |0  -|  |     |
    -  +  2   +  +    2+    +  2   +  +   2+  +0   1+
    -
    -
    -So now we have 3 matrices; L is the lower triangular, -D is symmetric and contains the pivots, and U' is upper triangular and -is the transpose of the lower. So the real form we have is -
    -           T
    -    L  D  L
    -
    -This result will always be symmetric. We can check this by taking -its transpose. If we get the same matrix we must have a symmetric -matrix. So the transpose of -
    -            T  T     TT  T   T        T T        T
    -  (  L  D  L  )   = L   D   L   =  L D L  = L D L
    -
    -
    -
    Positive Definite Matrices
    -There are several ways to recognize a positive definite matrix. -First, it must be symmetric. The "positive" aspect comes from -the pivots, all of which must be positive. Note that T is also -positive definite. B is positive semi-definite because one of -the pivots is zero. So -
    -   positive definite      == all pivots >  0
    -   positive semi-definite == all pivots >= 0
    -
    -When all the pivots are positive then all the eigenvalues are positive. - -So a positive definite matrix K and any non-zero vector X -
    -    T
    -   X  K X  > 0
    -
    -X transpose is just a row and X is just a column. - -<> -@ - -\subsection{ocwmit18085lecture2.xhtml} -<>= -<> - - -<> - One-dimensional Applications: A = Difference Matrix -
    -
    Difference Matrices
    -
    -
    Second Differences
    -
    -
    Stiffness Matrix
    -
    -
    Boundary Conditions
    -<> -@ - -\subsection{operations.xhtml} -<>= -<> - - -<> - operations not implemented -<> -@ - -\subsection{outputfunctions.xhtml} -<>= -<> - - - -<> -
    Output Functions
    -
    -A number of operations exist for specifying how numbers of type -Float are to be displayed. By default, -spaces are inserted every ten digits in the output for readability. -(Not that you cannot include spaces in the input form of a floating -point number, though you can use underscores.) - -Output spacing can be modified with the -outputSpacing operation. This -inserts no spaces and then displays the value of x. -
      -
    • - -
      -
    • -
    -Issue this to have the spaces inserted every 5 digits. -
      -
    • - -
      -
    • -
    -By default, the system displays floats in either fixed format or -scientific format, depending on the magnitude of the number. -
      -
    • - -
      -
    • -
    -A particular format may be requested with the operations -outputFloating and -outputFixed. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Additionally, you can ask for n digits to be displayed after the -decimal point. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The outputGeneral function resets -the output printing to the default behavior. -
      -
    • - -
      -
    • -
    -<> -@ - -%%P -\subsection{pagelist.xhtml} -<>= -<> - - -<> - pagelist not implemented -<> -@ - -\subsection{pagematrix.xhtml} -<>= -<> - - -<> - pagematrix not implemented -<> -@ - -\subsection{pageonedimensionalarray.xhtml} -<>= -<> - - -<> - pageonedimensionalarray not implemented -<> -@ - -\subsection{pageset.xhtml} -<>= -<> - - -<> - pageset not implemented -<> -@ - -\subsection{pagetable.xhtml} -<>= -<> - - -<> - pagetable not implemented -<> -@ - -\subsection{pagepermanent.xhtml} -<>= -<> - - -<> - pagepermanent not implemented -<> -@ - -\subsection{pagesquarematrix.xhtml} -<>= -<> - - -<> - pagesquarematrix not implemented -<> -@ - -\subsection{pagetwodimensionalarray.xhtml} -<>= -<> - - - -<> -
    TwoDimensionalArray
    -
    -The TwoDimensionalArray is used for -storing data in a two-dimensional data structure indexed by row and column. -Such an array is a homogeneous data structure in that all the entries of the -array must belong to the same Axiom domain (although see -The Any Domain). Each array has a fixed -number of rows and columns specified by the user and arrays are not -extensible. In Axiom, the indexing of two-dimensional arrays is one-based. -This means that both the "first" row of an array and the "first" column of -an array are given the index 1. Thus, the entry in the upper left corner -of an array is in position (1,1). - -The operation new creates an array with a -specified number of rows and columns and fills the components of that array -with a specified entry. The arguments of this operation specify the number -of rows, the number of columns, and the entry. This creates a five-by-four -array of integers, all of whose entries are zero. -
      -
    • - -
      -
    • -
    -The entries of this array can be set to other integers using the operation -setelt. - -Issue this to set the element in the upper left corner of this array to 17. -
      -
    • - -
      -
    • -
    -Now the first element of the array is 17. -
      -
    • - -
      -
    • -
    -Likewise, elements of an array are extracted using the operation -elt. -
      -
    • - -
      -
    • -
    -Another way to use these two operations is as follows. This sets the -element in position (3,2) of the array to 15. -
      -
    • - -
      -
    • -
    -This extracts the element in position (3,2) of the array. -
      -
    • - -
      -
    • -
    -The operation elt and -setelt come equipped with an error check -which verifies that the indices are in the proper ranges. For example, -the above array has five rows and four columns, so if you ask for the -entry in position (6,2) with arr(6,2) Axiom displays an error message. -If there is no need for an error check, you can call the operations -qelt and -qsetelt! -which provide the same functionality -but without the error check. Typically, these operations are called in -well-tested programs. - -The operations row and -column extract rows and columns, respectively, -and return objects of -OneDimensionalArray with the -same underlying element type. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -You can determine the dimensions of an array by calling the operations -nrows and -ncols, which return the number of rows -and columns, respectively. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -To apply an operation to every element of an array, use -map. This creates a new array. This -expression negates every element. -
      -
    • - -
      -
    • -
    -This creates an array where all the elements are doubled. -
      -
    • - -
      -
    • -
    -To change the array destructively, use -map! instead of -map. -If you need to make a copy of an array, -use copy. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Use member? to see if a given element is in -an array. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -To see how many times an element appears in an array, use -count. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -For more information about the operations available for -TwoDimensionalArray, issue -
      -
    • - -
      -
    • -
    -For more information on related topics, see -Matrix and -OneDimensionalArray. -<> -@ - -\subsection{pagevector.xhtml} -<>= -<> - - -<> - pagevector not implemented -<> -@ - - -\subsection{polybasicfunctions.xhtml} -<>= -<> - - - -<> -
    Basic Operations on Polynomials
    -
    -You create polynomials using the usual operations of -+, --, -* -(for multiplication), and -** (or -^. Here are two examples: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -These operations can also be used to combine polynomials. Try the following: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -As you can see from the above examples, the variables are ordered by defaults -
    -  z > y > x > c > b > a
    -
    -That is, z is the main variable, then y and so on in reverse alphabetical -order. You can redefine this ordering (for display purposes) with the -setVariableOrder. For example, the -following makes a the main variable, then b, and so on: -
      -
    • - -
      -
    • -
    -Now compare the way polynomials are displayed: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -To return to the system's default ordering, use -resetVariableOrder. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Polynomial coefficients can be pulled out using the function -coefficient. For example: -
      -
    • - -
      -
    • -
    -will give you the coefficient of x**2 in the polynomial q. Try these -commands: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Coefficients of monomials can be obtained as follows: -
      -
    • - -
      -
    • -
    -This will return the coefficient of x**2*z in the polynomial q**2. Also, -
      -
    • - -
      -
    • -
    -will return the coefficient of x**2*y**2 in the polynomial r(x,y). -<> -@ - -\subsection{polyfactorization.xhtml} -<>= -<> - - -<> -
    Polynomial Factorization
    -
    -The Axiom polynomial factorization facilities are available for all -polynomial types and a wide variety of coefficient domains. Here are -some examples. - -<> -@ - -\subsection{polyfactorization1.xhtml} -<>= -<> - - - -<> -
    Integer and Rational Number Coefficients
    -
    -Polynomials with integer coefficients can be factored. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Also, Axiom can factor polynomials with rational number coefficients -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -<> -@ - -\subsection{polyfactorization2.xhtml} -<>= -<> - - - -<> -
    Finite Field Coefficients
    -
    -Polynomials with coefficients in a finite filed can also be factored. -
      -
    • - -
      -
    • -
    -These include the integers mod p, where p is prime, and extensions of these -fields. -
      -
    • - -
      -
    • -
    -Convert this to have coefficients in the finite field with -19**3 elements. See -FiniteFields for more information -about finite fields. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{polyfactorization3.xhtml} -<>= -<> - - - -<> -
    Simple Algebraic Extension Field Coefficients
    -
    -Polynomials with coefficients in simple algebraic extensions of the -rational numbers can be factored. - -Here, aa and bb are symbolic roots of polynomials. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Note that the second argument to factor can be a list of algebraic -extensions to factor over. -
      -
    • - -
      -
    • -
    -This factors x^2+3 over the integers. -
      -
    • - -
      -
    • -
    -Factor the same polynomial over the field obtained by adjoining aa to the -rational numbers. -
      -
    • - -
      -
    • -
    -Factor x^6+108 over the same field. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Factor again over the field obtained by adjoining both aa and bb to the -rational numbers. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{polyfactorization4.xhtml} -<>= -<> - - - -<> -
    Factoring Rational Functions
    -
    -Since fractions of polynomials form a field, every element (other than zero) -divides any other, so there is no useful notion of irreducible factors. -Thus the factor operation is not very useful -for fractions of polynomials. - -Instead, there is a specific operation -factorFraction that separately -factors the numerator and denominator and returns a fraction of the -factored results. -
      -
    • - -
      -
    • -
    -You can also use map. This expression applies -the factor operation to the numerator and -denominator. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{polygcdandfriends.xhtml} -<>= -<> - - - -<> -
    - Greatest Common Divisors, Resultants, and Discriminants -
    -
    -You can compute the greatest common divisor of two polynomials using the -function gcd. Here's an example: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -You could also see that p and q have a factor in common by using the -function resultant: -
      -
    • - -
      -
    • -
    -The resultant of two polynomials vanishes precisely when they have a -factor in common. (In the example above we specified the variable with which -we wanted to compute the resultant because the polynomials could have -involved variables other than x.) -<> -@ - -\subsection{polynomialpage.xhtml} -<>= -<> - - -<> -
    Polynomials
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Basic Functions - - Create and manipulate polynomials -
    - Substitutions - - Evaluate Polynomials -
    - Factorization - - Factor in different contexts -
    - GCD and Friends - - Greatest Common Divisors, Resultants, and Discriminants -
    - Roots - - Work with and solve for roots -
    - Specific Types - - More specific information -
    -<> -@ - -\subsection{polyroots.xhtml} -<>= -<> - - -<> -
    Roots of Polynomials
    -
    - - - - - - - - - - - - - - - - - -
    - - Using a Single Root of a Polynomial - - - Working with a single root of a polynomial -
    - - Using All Roots of a Polynomial - - - Working with all the roots of a polynomial -
    - - Solution of a Single Polynomial Equation - - - Finding the roots of one polynomial -
    - - Solution of Systems of Polynomial Equations - - - Finding the roots of a system of polynomials -
    -<> -@ - -\subsection{polyroots1.xhtml} -<>= -<> - - - -<> -
    Using a Single Root of a Polynomial
    -
    -Use rootOf to get a symbolic root of a -polynomial. The call rootOf(p,x) returns a root of p(x). - -This creates an algebraic number a, which is a root of the polynomial -returned in symbolic form. -
      -
    • - -
      -
    • -
    -To find the algebraic relation that defines a, use -definingPolynomial -
      -
    • - -
      -
    • -
    -You can use a in any further expression, including a nested -rootOf. -
      -
    • - -
      -
    • -
    -Higher powers of the roots are automatically reduced during calculations. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The operation zeroOf is similar to -rootOf, except that it may express the -root using radicals in some cases. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -<> -@ - -\subsection{polyroots2.xhtml} -<>= -<> - - - -<> -
    Using All Roots of a Polynomial
    -
    -Use rootsOf to get all symbolic roots -of a polynomial. The call rootsOf(p,x) returns a list of all the roots -of p(x). If p(x) has a multiple root of order n, then that root appears -n times in the list. - -Compute all the roots of x^4+1. -
      -
    • - -
      -
    • -
    -As a side effect, the variables %x0, %x1, and %x2 are bound to the first -three roots of x^4+1. -
      -
    • - -
      -
    • -
    -Although they all satisfy x^4+1=0, %x0, %x1, and %x2 are different -algebraic numbers. To find the algebraic relation that defines each of -them, use definingPolynomial. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -We can check that the sum and product of the roots of x^4+1 are its -trace and norm. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Corresponding to the pair of operations -rootOf and -zeroOf in - -Solution of a Single Polynomial Equation -there is an operations zerosOf that, like -rootsOf, computes all the roots of a given -polynomial, but which expresses some of them in terms of radicals. -
      -
    • - -
      -
    • -
    -As you see, only one implicit algebraic number was created (%y1), and its -defining equation is this. The other three roots are expressed in radicals. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{polyroots3.xhtml} -<>= -<> - - - -<> -
    Solution of a Single Polynomial Equation
    -
    -Axiom can solve polynomial equations producing either approximate or exact -solutions. Exact solutions are either members of the ground field or can -be presented symbolically as roots of irreducible polynomials. - -This returns one rational root along with an irreducible polynomial -describing the other solutions -
      -
    • - -
      -
    • -
    -If you want solutions expressed in terms of radicals you would use this -instead. -
      -
    • - -
      -
    • -
    -The solve command always returns a value but -radicalSolve returns only the solutions -that it is able to express in terms of radicals. - -If the polynomial equation has rational coefficients you can ask for -approximations to its real roots by calling solve with a second argument -that specifies the "precision" epsilon. This means that each approximation -will be within plus or minus epsilon of the actual result. - -Notice that the type of second argument controls the type of the result. -
      -
    • - -
      -
    • -
    -If you give a floating point precision you get a floating point result. -If you give the precision as a ration number you get a rational result. -
      -
    • - -
      -
    • -
    -If you want approximate complex results you should use the command -complexSolve that takes the same -precision argument epsilon. -
      -
    • - -
      -
    • -
    -Each approximation will be within plus or minus epsilon of the actual result -in each of the real and imaginary parts. -
      -
    • - -
      -
    • -
    -Note that if you omit the = from the first argument Axiom generates -an equation by equating the first argument to zero. Also, when only one -variable is present in the equation, you do not need to specify the -variable to be solved for, that is, you can omit the second argument. - -Axiom can also solve equations involving rational functions. Solutions -where the denominator vanishes are discarded. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{polyroots4.xhtml} -<>= -<> - - - -<> -
    Solution of Systems of Polynomial Equations
    -
    -Given a system of equations of rational functions with exact coefficients -
    -     p1(x1,...,xn)
    -         .
    -         .
    -     pm(x1,...,xn)
    -
    -Axiom can find numeric or symbolic solutions. The system is first split -into irreducible components, then for each component, a triangular system -of equations is found that reduces the problem to sequential solutions of -univariate polynomials resulting from substitution of partial solutions -from the previous stage. -
    -     q1(x1,...,xn)
    -         .
    -         .
    -     qm(xn)
    -
    -Symbolic solutions can be presented using "implicit" algebraic numbers -defined as roots of irreducible polynomials or in terms of radicals. Axiom -can also find approximations to the real or complex roots of a system of -polynomial equations to any user specified accuracy. - -The operation solve for systems is used in -a way similar to solve for single equations. -Instead of a polynomial equation, one has to give a list of equations and -instead of a single variable to solve for, a list of variables. For -solutions of single equations see - -Solution of a Single Polynomial Equation - -Use the operation solve if you want -implicitly presented solutions. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Use radicalSolve if you want your -solutions expressed in terms of radicals. -
      -
    • - -
      -
    • -
    -To get numeric solutions you only need to give the list of equations and -the precision desired. The list of variables would be redundant information -since there can be no parameters for the numerical solver. - -If the precision is expressed as a floating point number you get results -expressed as floats. -
      -
    • - -
      -
    • -
    -To get complex numeric solutions, use the operation -complexSolve, which takes the same -arguments as in the real case. -
      -
    • - -
      -
    • -
    -It is also possible to solve systems of equations in rational functions -over the rational numbers. Note that [x=0.0,a=0.0] is not returned as -a solution since the denominator vanishes there. -
      -
    • - -
      -
    • -
    -When solving equations with denominators, all solutions where the -denominator vanishes are discarded. -
      -
    • - -
      -
    • -
    -<> -@ - -\subsection{polyspecifictypes.xhtml} -<>= -<> - - -<> -
    The Specific Polynomial Types
    -
    - - - - - - - - - - - - - - - - Multiple variable polynomials, non-recursive structure - - -
    - - Polynomial - - - The general type -
    - - UnivariatePolynomial - - - One variable polynomials -
    - - MultivariatePolynomial - - - Multiple variable polynomials, recursive structure -
    - - DistributedMultivariatePolynomial - - -
    -<> -@ - -\subsection{polyspecifictypes1.xhtml} -<>= -<> - - - -<> -
    Polynomial
    -
    -The domain constructor Polynomial -(abbreviation: POLY) provides polynomials -with an arbitrary number of unspecified variables. - -It is used to create the default polynomial domains in Axiom. Here the -coefficients are integers. -
      -
    • - -
      -
    • -
    -Here the coefficients have type Float. -
      -
    • - -
      -
    • -
    -And here we have a polynomial in two variables with coefficients which -have type Fraction Integer -
      -
    • - -
      -
    • -
    -The representation of objects of domains created by -Polynomial is that of recursive univariate -polynomials. (The term univariate means "one variable". The term -multivariate means "possibly more than one variable".) This recursive -structure is sometimes obvious from the display of a polynomial. -
      -
    • - -
      -
    • -
    -In this example, you see that the polynomial is stored as a polynomial in y -with coefficients that are polynomials in x with integer coefficients. In -fact, you really don't need to worry about the representation unless you are -working on an advanced application where it is critical. The polynomial -types created from - -DistributedMultivariatePolynomial and -XDistributedPolynomial -(discussed in -"DistributedMultivariatePolynomial" -are stored and displayed in a -non-recursive manner. You see a "flat" display of the above polynomial by -converting to one of those types. -
      -
    • - -
      -
    • -
    -We will demonstrate many of the polynomial facilities by using two -polynomials with integer coefficients. By default, the interpreter -expands polynomial expressions, even if they are written in a factored -format. -
      -
    • - -
      -
    • -
    -See Factored -to see how to create objects in factored form directly. -
      -
    • - -
      -
    • -
    -The fully factored form can be recovered by using -factor -
      -
    • - -
      -
    • -
    -This is the same name used for the operation to factor integer. -Such reuse of names is called -overloading and makes it much -easier to think of solving problems in general ways. Axiom facilities -for factoring polynomials created with -Polynomial -are currently restricted to the integer and rational number coefficients -cases. There are more complete facilities for factoring univariate -polynomials (see -Polynomial Factorization) - -The standard arithmetic operations are available for polynomials. -
      -
    • - -
      -
    • -
    -The operation gcd is used to compute the -greated common divisor of two polynomials. -
      -
    • - -
      -
    • -
    -In the case of p and q, the gcd is obvious from their definitions. -We factor the gcd to show this relationship better. -
      -
    • - -
      -
    • -
    -The least common multiple is computed by using -lcm. -
      -
    • - -
      -
    • -
    -Use content to compute the greatest common -divisor of the coefficients of the polynomial. -
      -
    • - -
      -
    • -
    -Many of the operations on polynomials require you to specify a variable. -For example, resultant requires you to -give the variable in which the polynomials should be expressed. This -computes the resultant of the values of p and q, considering them as -polynomials in the variable z. They do not share a root when thought -of as polynomials in z. -
      -
    • - -
      -
    • -
    -This value is 0 because as polynomials in x the polynomials have a -common root. -
      -
    • - -
      -
    • -
    -The data type used for the variables created by -Polynomial is -Symbol. As mentioned above, the representation -used by Polynomial is recursive and so -there is a main variable for nonconstant polynomials. The operation -makeVariable returns this variable. -The return type is actually a union of Symbol -and "failed". -
      -
    • - -
      -
    • -
    -The latter branch of the union is used if the polynomial has no -variables, that is, is a constant. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -The complete list of variables actually used in a particular polynomial -is returned by variables. For constant -polynomials, this list is empty. -
      -
    • - -
      -
    • -
    -The degree operation returns the degree -of a polynomial in a specific variable. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -If you give a list of variables for the second argument, a list of the -degrees in those variables is returned. -
      -
    • - -
      -
    • -
    -The minimum degree of a variable in a polynomial is computed using -minimumDegree. -
      -
    • - -
      -
    • -
    -The total degree of a polynomial is returned by -totalDegree. -
      -
    • - -
      -
    • -
    -It is often convenient to think of a polynomial as a leading monomial -plus the remaining terms, using the operation -leadingMonomial -
      -
    • - -
      -
    • -
    -The reductum operation returns a polynomial -consisting of the sum of the monomials after the first. -
      -
    • - -
      -
    • -
    -These have the obvious relationship that the original polynomial is equal -to the leading monomial plus the reductum. -
      -
    • - -
      -
    • -
    -The value returned by leadingMonomial -includes the coefficient of that term. This is extracted by using -leadingCoefficient on the -original polynomial. -
      -
    • - -
      -
    • -
    -The operation eval is used to substitute a -value for a varialbe in a polynomial. -
      -
    • - -
      -
    • -
    -This value may be another variable, a constant or a polynomial. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Actually, all the things being substituted are just polynomials, some -more trivial than others. -
      -
    • - -
      -
    • -
    -Derivatives are computed using the D operation. -
      -
    • - -
      -
    • -
    -The first argument is the polynomial and the second is the variable. -
      -
    • - -
      -
    • -
    -Even if the polynomial has only one variable, you must specify it. -
      -
    • - -
      -
    • -
    -Integration of polynomials is similar and the -integrate operation is used. - -Integration requires that the coefficients support division. -Consequently, Axiom converts polynomials over the integers to polynomials -over the rational numbers before integrating them. -
      -
    • - -
      -
    • -
    -It is not possible, in general, to divide two polynomials. In our example -using polynomials over the integers, the operation -monicDivide divides a polynomial by a -monic polynomial (that is, a polynomial with leading coefficient equal to -1). The result is a record of the quotient and remainder of the division. -You must specify the variable in which to express the polynomial. -
      -
    • - -
      -
    • -
    -The selectors of the components of the record are quotient and -remainder. Issue this to extract the remainder: -
      -
    • - -
      -
    • -
    -Now that we can extract the components, we can demonstrate the -relationship among them and the arguments to our original expression -
    -  qr:=monicDivide(p,x+1,x)
    -
    -
      -
    • - -
      -
    • -
    -If the / operator is used with polynomials, -a fraction object is created. In this example, the result is an object of -type -Fraction Polynomial Integer. -
      -
    • - -
      -
    • -
    -If you use rational numbers as polynomial coefficients, the resulting -object is of type -Polynomial Fraction Integer -
      -
    • - -
      -
    • -
    -This can be converted to a fraction of polynomials and back again, if -required. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -To convert the coefficients to floating point, map the -numeric operation on the coefficients -of the polynomial. -
      -
    • - -
      -
    • -
    -For more information on related topcis, see -UnivariatePolynomial, -MultivariatePolynomial, and -DistributedMultivariatePolynomial. -You can also issue the system command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by -Polynomial. -<> -@ - -\subsection{polyspecifictypes2.xhtml} -<>= -<> - - - -<> -
    UnivariatePolynomial
    -
    -The domain constructor -UnivariatePolynomial -(abbreviated UP) -creates domains of univariate polynomials in a specified variable. -For example, the domain UP(a1,POLY FRAC INT) provides polynomials in -the single variable a1 whose coefficients are general polynomials with -rational number coefficients. -
    -Restriction:
    -Axiom does not allow you to create types where -UnivariatePolynomial -is contained in the coefficient type of -Polynomial. -Therefore, UP(x,POLY INT) is legal but POLY UP(x,INT) is not. -
    -UP(x,INT) is the domain of polynomials in the single variable x with -integer coefficients. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -The usual arithmetic operations are available for univariate polynomials. -
      -
    • - -
      -
    • -
    -The operation -leadingCoefficient -extracts the coefficient of the term of highest degree. -
      -
    • - -
      -
    • -
    -The operation degree returns the degree of -the polynomial. Since the polynomial has only one variable, the variable -is not supplied to operations like degree. -
      -
    • - -
      -
    • -
    -The reductum of the polynomial, the polynomial obtained by subtracting -the term of highest order, is returned by -reductum. -
      -
    • - -
      -
    • -
    -The operation gcd computes the greatest common -divisor of two polynomials. -
      -
    • - -
      -
    • -
    -The operation lcm computes the least common -multiple. -
      -
    • - -
      -
    • -
    -The operation resultant computes the -resultant of two univariate polynomials. In the case of p and q, the -resultant is 0 because they share a common root. -
      -
    • - -
      -
    • -
    -To compute the derivative of a univariate polynomial with respect to -its variable, use D. -
      -
    • - -
      -
    • -
    -Univariate polynomials can also be used as if they were functions. -To evaluate a univariate polynomial at some point, apply the polynomial -to the point. -
      -
    • - -
      -
    • -
    -The same syntax is used for composing two univariate polynomials, i.e. -substituting one polynomial for the variable in another. This substitutes q -for the variable in p. -
      -
    • - -
      -
    • -
    -This substitutes p for the variable in q. -
      -
    • - -
      -
    • -
    -To obtain a list of coefficients of the polynomial, use -coefficients. -
      -
    • - -
      -
    • -
    -From this you can use gcd and -reduce to compute the contents of the -polynomial. -
      -
    • - -
      -
    • -
    -Alternatively (and more easily), you can just call -content -
      -
    • - -
      -
    • -
    -Note that the operation coefficients -omits the zero coefficients from the list. Sometimes it is useful to -convert a univariate polynomial to a vector whose i-th position contains -the degree i-1 coefficient of the polynomial. -
      -
    • - -
      -
    • -
    -To get a complete vector of coefficients, use the operation -vectorise, which takes a univariate -polynomial and an integer denoting the length of the desired vector. -
      -
    • - -
      -
    • -
    -It is common to want to do something to every term of a polynomial, -creating a new polynomial in the process. This is a function for -iterating across the terms of a polynomial, squaring each term. -
      -
    • - -
      -
    • -
    -Recall what p looked like. -
      -
    • - -
      -
    • -
    -We can demonstrate squareTerms on p. -
      -
    • - -
      -
    • -
    -When the coefficients of the univariate polynomial belong to a field, -(for example, when the coefficients are rational numbers, as opposed to -integers. The important property of a field is that non-zero elements can -be divided and produce another element. The quotient of the integers 2 and 3 -is not another integer.) It is possible to compute quotients and remainders. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -When the coefficients are rational numbers or rational expressions, the -operation quo computes the quotient of two -polynomials. -
      -
    • - -
      -
    • -
    -The operation rem computes the remainder. -
      -
    • - -
      -
    • -
    -The operation divide can be used to return -a record of both components. -
      -
    • - -
      -
    • -
    -Now we check the arithmetic. -
      -
    • - -
      -
    • -
    -It is also possible to integrate univariate polynomials when the -coefficients belong to a field. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -One application of univariate polynomials is to see expressions in terms of -a specific variable. We start with a polynomial in a1 whose coefficients are -quotients of polynomials in b1 and b2. -
      -
    • - -
      -
    • -
    -Since in this case we are not talking about using multivariate polynomials -in only two variables, we use Polynomial. -We also use Fraction because we want fractions. -
      -
    • - -
      -
    • -
    -We push all the variables into a single quotient of polynomials. -
      -
    • - -
      -
    • -
    -Alternatively, we can view this as a polynomial in the variable. This is a -mode-directed conversion: You indicate as much of the structure as you care -about and let Axiom decide on the full type and how to do the transformation. -
      -
    • - -
      -
    • -
    -See Polynomial Factorization for a -discussion of the factorization facilities in Axiom for univariate -polynomials. For more information on related topics, see -Polynomials, -Conversion, -Polynomial, -MultivariatePolynomial, and -DistributedMultivariatePolynomial. -Issue the system command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by -UnivariatePolynomial. -<> -@ - -\subsection{polyspecifictypes3.xhtml} -<>= -<> - - - -<> -
    MultivariatePolynomial
    -
    -The domain constructor -MultivariatePolynomial is -similar to Polynomial except that it -specifies the variables to be used. -Polynomial are available for -MultivariatePolynomial. -The abbreviation for -MultivariatePolynomial is -MPOLY. The type expressions -
    -   MultivariatePolynomial([x,y],Integer)
    -
    -and -
    -         MPOLY([x,y],INT)
    -
    -refer to the domain of multivariate polynomials in the variables x and y -where the coefficients are restricted to be integers. The first variable -specified is the main variable and the display of the polynomial reflects -this. This polynomial appears with terms in descending powers of the -variable x. -
      -
    • - -
      -
    • -
    -It is easy to see a different variable ordering by doing a conversion. -
      -
    • - -
      -
    • -
    -You can use other, unspecified variables, by using -Polynomial in the coefficient type of -MPOLY. -
      -
    • - -
      -
    • -
    -Conversions can be used to re-express such polynomials in terms of the -other variables. For example, you can first push all the variables into a -polynomial with integer coefficients. -
      -
    • - -
      -
    • -
    -Now pull out the variables of interest. -
      -
    • - -
      -
    • -
    -
    -Restriction: Axiom does not allow you to create types where -MultivariatePolynomial is -contained in the coefficient type of -Polynomial. Therefore, -
    -     MPOLY([x,y],POLY INT)
    -
    -is legal but this is not: -
    -     POLY MPOLY([x,y],INT)n
    -
    -
    -Multivariate polynomials may be combined with univariate polynomials to -create types with special structures. -
      -
    • - -
      -
    • -
    -This is a polynomial in x whose coefficients are quotients of polynomials -in y and z. Use conversions for the structural rearrangements. z does not -appear in a denominator and so it can be made the main variable. -
      -
    • - -
      -
    • -
    -Or you can make a multivariate polynomial in x and z whose coefficients -are fractions in polynomials in y -
      -
    • - -
      -
    • -
    -A conversion like -
    -  q::MPOLY([x,y],FRAC UP(z,INT))
    -
    -is not possible in this example because y appears in the denominator of -a fraction. As you can see, Axiom provides extraordinary flexibility in -the manipulation and display of expressions via its conversion facility. - -For more information on related topics, see -Polynomial, -UnivariatePolynomial, and -DistributedMultivariatePolynomial. -Issue the system command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by -MultivariatePolynomial. -<> -@ - -\subsection{polyspecifictypes4.xhtml} -<>= -<> - - - -<> -
    DistributedMultivariatePolynomial
    -
    - -DistributedMultivariatePolynomial and - -HomogeneousDistributedMultivariatePolynomial, abbreviated -DMP and -HDMP -repspectively, are very similar to -MultivariatePolynomial -except that they are represented and displayed in a non-recursive manner. -
      -
    • - -
      -
    • -
    -The construction -DMP orders its -monomials lexicographically while -HDMP -orders them by total order refined by reverse lexicographic order. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -These constructors are mostly used in Groebner basis calculations. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    • - -
      -
    • -
    -Note that we get a different Groebner basis when we use the -HDMP -polynomials, as expected. -
      -
    • - -
      -
    • -
    - -GeneralDistributedMultivariatePolynomial is somewhat more flexible in -the sense that as well as accepting a list of variables to specify the -variable ordering, it also takes a predicate on exponent vectors to specify -the term ordering. With this polynomial type the user can experiment with -the effect of using completely arbitrary term orderings. This flexibility -is mostly important for algorithms such as Groebner basis calculations -which can be very sensitive to term orderings. - -For more information on related topics, see -Polynomials, -Conversion, -Polynomial, -UnivariatePolynomial. and -MultivariatePolynomial, -Issue the system command -
      -
    • - -
      -
    • -
    -to display the full list of operations defined by - -DistributedMultivariatePolynomial and -<> -@ - -\subsection{polysubstitutions.xhtml} -<>= -<> - - - -<> -
    Polynomial Evaluation and Substitution
    -
    -The function eval is used to substitute values -into polynomials. Here's an example of how to use it: -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -This example would give you the value of the polynomial p at 5. You can -also substitute into polynomials with several variables. First, specify -the polynomial, then give a list of the bindings of the form -
    -  variable = value
    -
    -For examples: -
      -
    • - -
      -
    • -
    -Here x was replaced by a+b, and y was replaced by c+d. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -Substitution is done "in parallel". That is, Axiom takes q(x,y) and -returns q(y,x). - -You can also substitute numerical values for some or all of the variables. -
      -
    • - -
      -
    • -
    • - -
      -
    • -
    -<> -@ - - -\subsection{puiseuxseries.xhtml} -<>= -<> - - - -<> - - - - - - - - - - - - - - - - -
    - Enter the formula for the general coefficient of the series: -
    - -
    - Enter the index variable for your formula: - -
    - Enter the power series variable: - -
    - Enter the point about which to expand: - -
    -For Puiseux Series, the exponent of the power series variable ranges -from an initial value, an arbitrary rational number, to plus -infinity; the step size is any positive rational number. - - - - - - - -
    - Enter the initial value of the index (a rational number): - -
    - Enter the step size (a positive rational number): - -
    -<> -<> -<> - -@ - -%%Q -%%R -\subsection{reallimit.xhtml} -<>= -<> - - - -<> -
    - Enter the function you want to compute the limit of:
    -
    - Enter the name of the variable:
    -
    - - A finite point -
    - - %plusInfinity
    - - %minusInfinity


    - Compute the limit from:
    - - both directions
    - - the right
    - - the left
    -
    -<> -<> -<> - -@ -\subsection{refsearchpage.xhtml} -<>= -<> - - -<> - refsearchpage not implemented -<> -@ - -\subsection{releasenotes.xhtml} -<>= -<> - - -<> -The November 2007 release of Axiom contains -
      -
    • - New MathML output mode. This mode allows Axiom to output expressions - using standard MathML format. This complements the existing ability - to output Fortran, IBM script, Latex, OpenMath, and algebra formats. -
    • -
    • - Ninety-five domains have been documented for the )help command. - Type )help to see the list. -
    • -
    • - New regression tests were added to improve the release testing. -
    • -
    • - Hyperdoc can now be restarted. Type )hd -
    • -
    • - Testing has begun against Spiegel's Mathematical Handbook from the - Schaum's Outline Series. These tests include Axiom's solutions and - have uncovered mistakes in the published text. -
    • -
    -Bug fixes -
      -
    • - Bug100 integrate((z^a+1)^b,z) no longer loops infinitely. -
    • -
    • - Bug101 laplace(log(z),z,w) returns "failed" instead of crashing. -
    • -
    • - Bug103 solve(z=z,z) returns the correct answer -
    • -
    -Additional information sources: - - - - - - - -
    - - Online information is available here - -
    - - The changelog file contains specific file-by-file changes. - -
    -<> -@ - -\subsection{rootpage.xhtml} -\begin{verbatim} - notangle -R"rootpage.xhtml" bookvol11.pamphlet > rootpage.xhtml -\end{verbatim} -<>= -<> - - - -
    - What would you like to do?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - Any Command - - Try command line input
    - - Basic Commands - - Solve problems by filling in templates
    - - Axiom Textbook - - Read Volume 0 -- The Jenks/Sutor Book
    - - Axiom Tutorial - - Read Volume 1 -- The Tutorial
    - - Reference - - Scan on-line documentation for AXIOM
    - - Topics - - Learn how to use Axiom, by topic
    - - Browser - - Browse through the AXIOM library
    - - Examples - - See examples of use of the library
    - - Settings - - Display and change the system environment
    - - What's New - - Enhancements in this version of Axiom
    - - Fonts - - Test Axiom Fonts in your Browser
    -<> -@ - -%%S -\subsection{series.xhtml} -<>= -<> - - -<> - Create a series by - - - - - - - - - - - - - - - - - -
    - - Expansion - - - Expand a function in a series around a point -
    - - Taylor Series - -
    - Series where the exponent ranges over the integers from a - non-negative integer value to plus infinity by an arbitrary - positive integer step size. -
    - - Laurent Series - -
    - Series where the exponent ranges from an arbitrary integer value - to plus infinity by an arbitrary positive integer step size. -
    - - Puiseux Series - -
    - Series where the exponent ranges from an arbitrary rational value - to plus infinity by an arbitrary positive rational number step size. -
    -<> -@ - -\subsection{seriesexpand.xhtml} -<>= -<> - - - -<> - - - - - - - - - - - - - -
    - What function would you like to expand in a power series? -
    - -
    - Enter the power series variable: - -
    - Expand around the point: - -
    -<> -<> -<> - -@ - -\subsection{solve.xhtml} -<>= -<> - - -<> - What do you want to solve? - - - - - - - - - - - - - -
    - - A System of Linear Equations in equation form - -
    - - A System of Linear Equations in matrix form - -
    - - A System of Polynomial Equations - -
    - - A Single Polynomial Equation - -
    -<> -@ - - -\subsection{solvelinearequations.xhtml} -<>= -<> - - - -<> - - - - -
    - Enter the number of equations: - -
    -
    -
    -
    - -
    -
    -
    -<> -<> -@ - -\subsection{solvelinearmatrix.xhtml} -<>= -<> - - - -<> -Enter the size of the matrix: - - - - - - - - - -
    Rows
    Columns
    -
    -
    - How would you like to enter the matrix elements? -
    - - -
    -
    -
    -<> -<> -@ - - -@ - -\subsection{solvesinglepolynomial.xhtml} -<>= -<> - - -<> - solvesinglepolynomial.xhtml not implemented -<> - -@ - -\subsection{solvesystempolynomials.xhtml} -<>= -<> - - -<> - solvesystempolynomials.xhtml not implemented -<> - -@ - -\subsection{summation.xhtml} -<>= -<> - - - -<> -
    - Enter the function you want to sum:
    -
    - Enter the summation index: -
    - Enter the limits of the sum: From: - - To: -
    -
    -<> -<> -<> -@ - -\subsection{systemvariables.xhtml} -<>= -<> - - -<> - systemvariables not implemented -<> -@ - - -%%T - -\subsection{taylorseries.xhtml} -<>= -<> - - - -<> - - - - - - - - - - - - - - - - -
    - Enter the formula for the general coefficient of the series: -
    - -
    - Enter the index variable for your formula: - -
    - Enter the power series variable: - -
    - Enter the point about which to expand: - -
    -For Taylor Series, the exponent of the power series variable ranges -from an initial value, an arbitrary non-negative integer, to plus -infinity; the step size is any positive integer. - - - - - - - -
    - Enter the initial value of the index (an integer): - -
    - Enter the step size (a positive integer): - -
    -<> -<> -<> - -@ - -\subsection{topexamplepage.xhtml} -<>= -<> - - -<> - - - - - - - - - - - - - -
    GraphicsExamples of Axiom Graphics
    DomainsExamples of use of Axiom domains and packages
    OperationsExamples of Axiom Operations, by topic
    -<> -@ - -\subsection{topicspage.xhtml} -<>= -<> - - -<> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NumbersA look at different types of numbers
    PolynomialsPolynomials in Axiom
    FunctionsBuilt-in and user-defined functions
    Solving EquationsFacilities for solving equations
    CalculusUsing Axiom to do calculus
    Linear AlgebraAxiom's linear algebra facilities
    GraphicsAxiom's graphics facilities
    AlgebraAxiom's abstract algebra facilities
    CryptographyAlasdair McAndrew's Crytography Course Notes
    Mathematical MethodsMIT 18-08 Mathematical Methods for Engineers Course Notes
    CATSComputer Algebra Test Suite
    -<> -@ - -\subsection{topreferencepage.xhtml} -<>= -<> - - -<> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    AXIOM BookThe on-line version of the Jenks/Sutor book.
    Aldor GuideThe on-line Aldor Users Guide.
    NAG LibraryThe on-line NAG Library documentation.
    TopicsLearn how to use Axiom, by topic.
    LanguageIntroduction to the Axiom language.
    ExamplesExamples for exposed domains and packages
    CommandsSystem commands that control your workspace.
    OperationsA guide to useful operations
    System VariablesView and change a system-defined variable
    GlossaryA glossary of Axiom terms.
    HyperDocHow to write your own HyperDoc pages.
    SearchReference pages for occurrences of a string.
    -<> -@ - -\subsection{topsettingspage.xhtml} -<>= -<> - - -<> -System commands are used to perform Axiom environment -management and change Axiom system variables. -
    - - - - - - - - - -
    CommandsSystem commands that control your environment.
    SettingsChange an Axiom variable.
    -<> -@ - -\subsection{tutorial.xhtml} -<>= -<> - - -<> - tutorial not implemented -<> -@ - -%%U -\subsection{uglangpage.xhtml} -<>= -<> - - -<> - uglangpage not implemented -<> -@ - -\subsection{ugsyscmdpage.xhtml} -<>= -<> - - -<> - ugsyscmdpage not implemented -<> -@ - - -\subsection{usersguidepage.xhtml} -<>= -<> - - -<> - usersguidepage not implemented -<> -@ - - -%%V -%%W -%%X -%%Y -%%Z -\subsection{rcm3720.input} -<>= -str2lst(str) == [ord(str.i)-65 for i in 1..#str] - -lst2str(lst) == concat [char(lst.i+65)::String for i in 1..#lst] - -str2num(str) == - local strlst - strlst:=[ord(str.i) for i in 1..#str] - return wholeRadix(strlst)$RadixExpansion(256)::INT - -num2str(n) == - local tmp - tmp:=wholeRagits(n::RadixExpansion(256)) - return concat [char(tmp.i)::String for i in 1..#tmp] - -superIncreasing?(lst) == - reduce(/\,[lst.i>reduce(+,[lst.j for j in 1..i-1]) for i in 2..#lst]) - -siSolve(lst,n) == - local res,m,i - if not superIncreasing?(lst) then error "The list is not super-increasing" - m := n - res := [0 for i in 1..#lst] - for i in #lst..1 by -1 repeat - if lst.i <= m then - res.i := 1 - m := m - lst.i - if m = 0 then return res - error "Unsolvable" - -subsetsum(L:List(INT),N:INT):List(INT) == - local x,Y - if N=0 then return([]) - if N<0 or #L=0 then return([-1]) - for x in L repeat - Y:=subsetsum(remove(x,L),N) - if Y~=[-1] then return(Y) - Y:=subsetsum(remove(x,L),N-x) - if Y~=[-1] then return(cons(x,Y)) - return([-1]) -@ - -\subsection{signatures.txt} -<>= -RSA --- -n = 2^137-1 e = 17 -message = "This is my text." -signature = 68767027465671577191073128495082795700768 -n = (6^67-1)/5 e = 17 -message = "Please feed my dog!" -signature = 1703215098456351993605104919259566435843590978852633 - -Rabin ----- -n = (3^59-1)/2 -message = "Leave now." -signature = -n = (7^47-1)/6 -message = "Arrive Thursday." -signature = 189479723122534414019783447271411895509 - -El Gamal -------- -p = next prime after 2^150 -a = 2 -B = 1369851585774063312693119161120024351761244461 -message = "Leave AT ONCE!" -signature r = 1389080525305754392111976715361069425353578198 -s = 1141326468070168229982976133801721430306004477 - -DSS --- -p = next prime after 2^170 -q = 143441505468590696209 -g = 672396402136852996799074813867123583326389281120278 -B = 1394256880659595564848116770226045673904445792389839 -message = "Now's your chance!" -signature r = 64609209464638355801 -s = 13824808741200493330 -@ - -\subsection{strang.input} -<>= -rowmatrix(r:List(Fraction(Integer))):Matrix(Fraction(Integer)) == - [r]::Matrix(Fraction(Integer)) - -columnmatrix(c:List(Fraction(Integer))):Matrix(Fraction(Integer)) == - [[i] for i in c]::Matrix(Fraction(Integer)) - -k(n) == - M := diagonalMatrix([2 for i in 1..n]) - for i in 1..n-1 repeat M(i,i+1):=-1 - for i in 1..n-1 repeat M(i+1,i):=-1 - M::SquareMatrix(n,Fraction(Integer)) - -t(n) == - M:=k(n) - N:=M::Matrix(Fraction(Integer)) - qsetelt!(N,1,1,1) - N::SquareMatrix(n,Fraction(Integer)) - -b(n) == - M:=k(n) - N:=M::Matrix(Fraction(Integer)) - qsetelt!(N,1,1,1) - qsetelt!(N,n,n,1) - N::SquareMatrix(n,Fraction(Integer)) - -K:=k(3) -T:=t(3) -B:=b(3) - - -@ -\subsection{bitmaps/axiom1.bitmap} -<>= -#define axiom_width 270 -#define axiom_height 100 -static char axiom_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, - 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x3f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x92, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x02, - 0x00, 0xe0, 0x01, 0xf0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xe0, 0xff, 0x01, 0x00, 0x00, 0xe0, - 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0xd2, 0x02, 0x00, 0xe0, - 0xff, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0xff, 0x03, 0xf8, 0xff, 0xff, 0x03, - 0xe0, 0x07, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0xf8, 0x01, 0xf8, - 0xff, 0x03, 0x00, 0xf8, 0xff, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, - 0xff, 0x3f, 0xff, 0xff, 0xff, 0x03, 0xf8, 0xff, 0xff, 0x01, 0xf8, 0x07, - 0x00, 0x80, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xff, 0x01, 0xfe, 0xff, 0x07, - 0x00, 0xfe, 0xff, 0x03, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x7f, - 0xff, 0xff, 0xff, 0x01, 0xf8, 0xff, 0xff, 0xfd, 0xff, 0x07, 0x00, 0xe0, - 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x0f, 0x00, 0xff, - 0xff, 0x03, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x8f, 0xff, 0xff, 0xe0, 0xff, - 0x7f, 0x00, 0x80, 0xff, 0x3f, 0xfe, 0xff, 0x07, 0x00, 0xf0, 0xff, 0xff, - 0xff, 0x80, 0xff, 0xff, 0xc0, 0xff, 0xff, 0x1f, 0xc0, 0xff, 0xff, 0x07, - 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0xf0, 0xff, 0x81, 0xff, 0x3f, 0x00, - 0x00, 0xff, 0x07, 0xff, 0xff, 0x03, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xc3, - 0xff, 0xff, 0xf0, 0xff, 0xff, 0x3f, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00, - 0x00, 0xf0, 0x1f, 0x00, 0xe0, 0xff, 0x01, 0xff, 0x3f, 0x00, 0x00, 0xfe, - 0x03, 0xe0, 0xff, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, - 0xf8, 0xff, 0xff, 0x3f, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xf0, - 0x0f, 0x00, 0xc0, 0xff, 0x01, 0xfe, 0x3f, 0x00, 0x00, 0xfe, 0x01, 0xc0, - 0xff, 0x03, 0x80, 0xff, 0x00, 0xfc, 0xff, 0x07, 0xf8, 0xff, 0xfc, 0x01, - 0xff, 0x3f, 0xfe, 0x80, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0xc0, 0xff, 0x03, 0xfe, 0x3f, 0x00, 0x00, 0xff, 0x00, 0x80, 0xff, 0x03, - 0xc0, 0x3f, 0x00, 0xe0, 0xff, 0x0f, 0xe0, 0xff, 0x3f, 0x00, 0xfe, 0xbf, - 0x3f, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x80, 0xff, - 0x03, 0xf8, 0x3f, 0x00, 0x80, 0x7f, 0x00, 0x80, 0xff, 0x03, 0xe0, 0x0f, - 0x00, 0x80, 0xff, 0x1f, 0xe0, 0xff, 0x0f, 0x00, 0xf8, 0xff, 0x0f, 0x00, - 0xfc, 0x1f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xff, 0x03, 0xf8, - 0x7f, 0x00, 0x80, 0x3f, 0x00, 0x80, 0xff, 0x03, 0xf0, 0x0f, 0x00, 0x00, - 0xff, 0x1f, 0xe0, 0xff, 0x07, 0x00, 0xf8, 0xff, 0x07, 0x00, 0xfc, 0x1f, - 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xff, 0x03, 0xf0, 0xff, 0x00, - 0xc0, 0x1f, 0x00, 0x80, 0xff, 0x03, 0xf8, 0x07, 0x00, 0x00, 0xfe, 0x3f, - 0xe0, 0xff, 0x07, 0x00, 0xf8, 0xff, 0x03, 0x00, 0xf8, 0x3f, 0x00, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x00, 0xff, 0x03, 0xe0, 0xff, 0x00, 0xc0, 0x0f, - 0x00, 0x80, 0xff, 0x03, 0xfc, 0x03, 0x00, 0x00, 0xfc, 0x3f, 0xe0, 0xff, - 0x03, 0x00, 0xf0, 0xff, 0x01, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x00, 0xff, 0x03, 0xc0, 0xff, 0x01, 0xe0, 0x0f, 0x00, 0x80, - 0xff, 0x03, 0xfc, 0x03, 0x00, 0x00, 0xfc, 0x3f, 0xe0, 0xff, 0x01, 0x00, - 0xf0, 0xff, 0x01, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0xff, 0x03, 0xc0, 0xff, 0x03, 0xf0, 0x07, 0x00, 0x80, 0xff, 0x03, - 0xfe, 0x01, 0x00, 0x00, 0xf8, 0x7f, 0xe0, 0xff, 0x01, 0x00, 0xf0, 0xff, - 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0x03, 0x80, 0xff, 0x07, 0xf8, 0x01, 0x00, 0x80, 0xff, 0x03, 0xff, 0x01, - 0x00, 0x00, 0xf8, 0x7f, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, - 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, - 0xff, 0x0f, 0xf8, 0x01, 0x00, 0x80, 0xff, 0x03, 0xff, 0x01, 0x00, 0x00, - 0xf0, 0x7f, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0xfe, 0x1f, - 0xf8, 0x00, 0x00, 0x80, 0xff, 0x83, 0xff, 0x00, 0x00, 0x00, 0xf0, 0xff, - 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0xfc, 0x3f, 0x7e, 0x00, - 0x00, 0x80, 0xff, 0xc3, 0xff, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xe0, 0xff, - 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0xf8, 0x7f, 0x3e, 0x00, 0x00, 0x80, - 0xff, 0xc3, 0xff, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xe0, 0xff, 0x00, 0x00, - 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0x03, 0x00, 0xf8, 0x7f, 0x3f, 0x00, 0x00, 0x80, 0xff, 0xc3, - 0xff, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, - 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, - 0x03, 0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xc3, 0xff, 0x00, - 0x00, 0x00, 0xe0, 0xff, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, - 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x03, 0x00, - 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x80, 0xff, 0xe3, 0xff, 0x00, 0x00, 0x00, - 0xc0, 0xff, 0xe1, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x03, 0x00, 0xc0, 0xff, - 0x07, 0x00, 0x00, 0x80, 0xff, 0xe3, 0xff, 0x00, 0x00, 0x00, 0xc0, 0xff, - 0xe1, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, - 0x00, 0x00, 0xe0, 0xff, 0x7f, 0xff, 0x03, 0x00, 0x80, 0xff, 0x07, 0x00, - 0x00, 0x80, 0xff, 0xe3, 0xff, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xe1, 0xff, - 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0xfc, 0xff, 0x07, 0xff, 0x03, 0x00, 0x80, 0xff, 0x07, 0x00, 0x00, 0x80, - 0xff, 0xe3, 0xff, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xe1, 0xff, 0x00, 0x00, - 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, - 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x80, 0xff, 0xe3, - 0xff, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, - 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x07, 0x00, 0xff, - 0x03, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xe3, 0xff, 0x00, - 0x00, 0x00, 0xc0, 0xff, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, - 0xf8, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x01, 0x00, 0xff, 0x03, 0x00, - 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xe3, 0xff, 0x00, 0x00, 0x00, - 0xc0, 0xff, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, - 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, - 0x3f, 0x00, 0x00, 0x80, 0xff, 0xe3, 0xff, 0x00, 0x00, 0x00, 0xc0, 0xff, - 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, - 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xff, 0x03, 0x00, 0x80, 0xff, 0x7f, 0x00, - 0x00, 0x80, 0xff, 0xe3, 0xff, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xe0, 0xff, - 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0xfc, - 0x1f, 0x00, 0x00, 0xff, 0x03, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00, 0x80, - 0xff, 0xe3, 0xff, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xe0, 0xff, 0x00, 0x00, - 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0xfe, 0x1f, 0x00, - 0x00, 0xff, 0x03, 0x00, 0xc0, 0xef, 0xff, 0x01, 0x00, 0x80, 0xff, 0xe3, - 0xff, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, - 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0xfe, 0x0f, 0x00, 0x00, 0xff, - 0x03, 0x00, 0xe0, 0xc7, 0xff, 0x01, 0x00, 0x80, 0xff, 0xe3, 0xff, 0x01, - 0x00, 0x00, 0xc0, 0xff, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, - 0xf8, 0x1f, 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff, 0x03, 0x00, - 0xf0, 0x83, 0xff, 0x07, 0x00, 0x80, 0xff, 0xe3, 0xff, 0x01, 0x00, 0x00, - 0xc0, 0x7f, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, - 0x00, 0x00, 0x80, 0xff, 0x07, 0x00, 0x00, 0xff, 0x03, 0x00, 0xf8, 0x83, - 0xff, 0x0f, 0x00, 0x80, 0xff, 0xe3, 0xff, 0x01, 0x00, 0x00, 0xc0, 0x7f, - 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, - 0x80, 0xff, 0x07, 0x00, 0x80, 0xff, 0x03, 0x00, 0xf8, 0x01, 0xff, 0x0f, - 0x00, 0x80, 0xff, 0xc3, 0xff, 0x01, 0x00, 0x00, 0xc0, 0x3f, 0xe0, 0xff, - 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x80, 0xff, - 0x03, 0x00, 0x80, 0xff, 0x03, 0x00, 0xfc, 0x00, 0xfe, 0x1f, 0x00, 0x80, - 0xff, 0xc3, 0xff, 0x03, 0x00, 0x00, 0xe0, 0x3f, 0xe0, 0xff, 0x00, 0x00, - 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, - 0x80, 0xff, 0x03, 0x00, 0xfe, 0x00, 0xfc, 0x3f, 0x00, 0x80, 0xff, 0xc3, - 0xff, 0x03, 0x00, 0x00, 0xe0, 0x3f, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, - 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, 0xc0, 0xff, - 0x03, 0x00, 0x7f, 0x00, 0xf8, 0x7f, 0x00, 0x80, 0xff, 0xc3, 0xff, 0x07, - 0x00, 0x00, 0xe0, 0x1f, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, - 0xf8, 0x1f, 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, 0xc0, 0xff, 0x03, 0x80, - 0x3f, 0x00, 0xf8, 0x7f, 0x00, 0x80, 0xff, 0x83, 0xff, 0x07, 0x00, 0x00, - 0xf0, 0x0f, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, - 0x00, 0x00, 0x80, 0xff, 0x03, 0x00, 0xe0, 0xff, 0x03, 0x80, 0x1f, 0x00, - 0xf0, 0xff, 0x00, 0x80, 0xff, 0x83, 0xff, 0x0f, 0x00, 0x00, 0xf0, 0x0f, - 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, - 0x80, 0xff, 0x07, 0x00, 0xe0, 0xff, 0x03, 0xc0, 0x1f, 0x00, 0xf0, 0xff, - 0x01, 0x80, 0xff, 0x83, 0xff, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0xe0, 0xff, - 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x80, 0xff, - 0x07, 0x00, 0xf8, 0xff, 0x03, 0xe0, 0x0f, 0x00, 0xe0, 0xff, 0x03, 0x80, - 0xff, 0x03, 0xff, 0x3f, 0x00, 0x00, 0xf8, 0x03, 0xe0, 0xff, 0x00, 0x00, - 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x80, 0xff, 0x0f, 0x00, - 0xf8, 0xff, 0x03, 0xf0, 0x07, 0x00, 0xc0, 0xff, 0x07, 0x80, 0xff, 0x03, - 0xfe, 0x7f, 0x00, 0x00, 0xfc, 0x01, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, - 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, 0x80, 0xff, 0x1f, 0x00, 0xfe, 0xff, - 0x07, 0xf8, 0x07, 0x00, 0xc0, 0xff, 0x0f, 0x80, 0xff, 0x03, 0xfe, 0xff, - 0x00, 0x00, 0xfe, 0x00, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, - 0xf8, 0x3f, 0x00, 0x00, 0x80, 0xff, 0x1f, 0x00, 0x7f, 0xff, 0x0f, 0xf8, - 0x07, 0x00, 0x80, 0xff, 0x1f, 0x80, 0xff, 0x03, 0xfc, 0xff, 0x01, 0x00, - 0x7f, 0x00, 0xe0, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xf8, 0x3f, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x1f, 0xfe, 0xff, 0xff, 0x03, 0x00, - 0x80, 0xff, 0x3f, 0xc0, 0xff, 0x07, 0xf8, 0xff, 0x1f, 0xf0, 0x3f, 0x00, - 0xf0, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, - 0x00, 0xfe, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0xff, 0x03, 0x00, 0x80, 0xff, - 0x7f, 0xc0, 0xff, 0x07, 0xf8, 0xff, 0xff, 0xff, 0x1f, 0x00, 0xf0, 0xff, - 0x01, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0xfc, - 0xff, 0xff, 0x07, 0xfe, 0xff, 0xff, 0x07, 0x00, 0xc0, 0xff, 0xff, 0xe0, - 0xff, 0x1f, 0xf0, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xf8, 0xff, 0x03, 0x00, - 0xf8, 0xff, 0x01, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, - 0x01, 0xfc, 0xff, 0xff, 0x0f, 0x00, 0xe0, 0xff, 0xff, 0xfb, 0xff, 0x3f, - 0xe0, 0xff, 0xff, 0xff, 0x03, 0x00, 0xfe, 0xff, 0x07, 0x00, 0xfc, 0xff, - 0x07, 0x00, 0xfe, 0xff, 0x01, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0xfc, - 0xff, 0xff, 0x7f, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, - 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0x7f, 0x80, - 0xff, 0xff, 0x3f, 0x00, 0x00, 0xc0, 0xff, 0x3f, 0x00, 0xf8, 0xff, 0xff, - 0x3f, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0x3f, - 0x00, 0xc0, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x7f, 0xc0, 0xff, 0xff, - 0x3f, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0xf0, 0xff, 0x00, 0x1f, 0x00, - 0xfc, 0x0f, 0xfe, 0xff, 0xcf, 0xff, 0x03, 0xfc, 0xff, 0x0f, 0x00, 0xe0, - 0xff, 0xff, 0x7f, 0x80, 0xff, 0xff, 0x3f, 0xc0, 0xff, 0xff, 0x3f, 0x00, - 0x00, 0x00, 0xf8, 0x03, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0xc0, 0x01, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xe0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xf0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, - 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc0, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00}; -@ - -\section{License} -<>= ---Copyright (c) 2007 Arthur C. Ralfs ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of Arthur C. Ralfs nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -@ - -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document}