123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- \documentstyle[11pt]{article}
- \newcommand{\REDUCE}{{\sf REDUCE}}
- \newcommand{\MACSYMA}{{\sf MACSYMA}}
- \newcommand{\MAPLE}{{\sf MAPLE}}
- \newcommand{\Mathematica}{{\sf Mathematica}}
- \newcommand{\PSL}{{\sf PSL}}
- \renewcommand{\today}{October 5, 1990}
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %
- % Warning: an overfull \hbox is produced in the first
- % verbatim environment.
- %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \begin{document}
- \title{A \REDUCE{} package\\
- for manipulation of Taylor series}
- \author{Rainer Sch\"opf\\
- Konrad-Zuse-Zentrum f\"ur Informationstechnik Berlin\\
- Heilbronner Str.\ 10\\
- 1000 Berlin 31\\
- Federal Republic of Germany\\
- Email: \verb|<SCHOEPF@SC.ZIB-Berlin.DE>|}
- \maketitle
- \begin{abstract}
- This short note describes a package of \REDUCE{} procedures
- that allow Taylor expansion in one or more variables and efficient
- manipulation of the resulting Taylor series. Capabilities include
- basic operations (addition, subtraction, multiplication
- and division) and also application of certain algebraic and
- transcendental functions.
- \end{abstract}
- \section{Introduction}
- The Taylor package was written to provide \REDUCE{} with some of
- the facilities
- that \MACSYMA's \verb+TAYLOR+ function offers,
- but most of all I needed it to be faster and
- more space-efficient.
- Especially I wanted procedures that would return the logarithm or
- arc tangent of a Taylor series, again as a Taylor series.
- This turned out be more work than expected. The features absolutely
- required were (as usual) those that were hardest to implement,
- e.g., arc tangent applied to a Taylor expansion in more than
- one variable.
- This package is still undergoing development.
- I'll be happy if it is of any use for you.
- Tell me if you think that there is something missing.
- I invite everybody to criticize and comment and will eagerly try to
- correct any errors found.
- \section{How to use it}
- The most important operator is `\verb+TAYLOR+'.
- It is used as follows:
- \begin{verbatim}
- TAYLOR(exp:exprn[,var:kernel,var0:exprn,order:integer]...):exprn
- \end{verbatim}
- where \verb|exp| is the expression to be expanded. It can be any
- \REDUCE{} object, even an expression containing other Taylor kernels.
- \verb|var| is the kernel with respect to
- which \verb|exp| is to be expanded. \verb|var0| denotes the point
- about
- which and \verb|order| the order up to which expansion is to take
- place.
- If more than one (\verb|var|,\verb|var0|,\verb|order|) triple is
- specified \verb|TAYLOR| will expand its first argument independently
- with respect to all the variables.
- For example,
- \begin{verbatim}
- TAYLOR(E^(X^2+Y^2),X,0,2,Y,0,2);
- \end{verbatim}
- will calculate the Taylor expansion up to order $X^{2}*Y^{2}$.
- Note that once the expansion has been done it is not possible to
- calculate higher orders.
- Instead of a kernel, \verb|var| may also
- be a list of kernels. In this case expansion will take place in a way
- so that the {\em sum\/} of the degrees of the kernels does not exceed
- \verb|order|.
- If \verb|var0| evaluates to the special identifier \verb|INFINITY|
- \verb|TAYLOR| tries to expand \verb|exp| in a series in \verb|1/var|.
- The expansion is performed variable per variable, i.e.\ in the example
- above by first expanding $\exp(x^{2}+y^{2})$ with respect to $x$ and
- then expanding every coefficient with respect to $y$.
- If the switch \verb|TAYLORKEEPORIGINAL| is set to \verb|ON| the
- original expression \verb|exp| is kept for later reference.
- It can be recovered by means of the operator
- \begin{verbatim}
- TAYLORORIGINAL(exp:exprn):exprn
- \end{verbatim}
- An error is signalled if \verb|exp| is not a Taylor kernel or
- if the original expression was not kept, i.e.\ if
- \verb|TAYLORKEEPORIGINAL| was \verb|OFF| during expansion.
- The template of a Taylor kernel, i.e.\ the list of all
- variables with respect to which expansion took place together with
- expansion point and order can be extracted using
- \begin{verbatim}
- TAYLORTEMPLATE(exp:exprn):list
- \end{verbatim}
- This returns a list of lists with the three elements
- \verb|{var,var0,order}|.
- As with \verb|TAYLORORIGINAL|,
- an error is signalled if \verb|exp| is not a Taylor kernel.
- \begin{verbatim}
- TAYLORTOSTANDARD(exp:exprn):exprn
- \end{verbatim}
- converts all Taylor kernels in \verb|exp| into standard form and
- resimplifies the result.
- \begin{verbatim}
- TAYLORSERIESP(exp:exprn):boolean
- \end{verbatim}
- may be used to determine if \verb|exp| is a Taylor kernel.
- Note that this operator is subject to the same restrictions as,
- e.g., \verb|ORDP| or \verb|NUMBERP|, i.e.\ it may only be
- used in boolean expressions in \verb|IF| or \verb|LET| statements.
- Finally there is
- \begin{verbatim}
- TAYLORCOMBINE(exp:exprn):exprn
- \end{verbatim}
- which tries to combine all Taylor kernels found in \verb|exp| into one.
- Operations currently possible are:
- \begin{itemize}
- \item Addition, subtraction, multiplication, and division.
- \item Roots, exponentials, and logarithms.
- \item Trigonometric and hyperbolic functions and their inverses.
- \end{itemize}
- Application of unary operators like \verb|LOG| and \verb|ATAN| will
- nearly always succeed. For binary operations their arguments have to be
- Taylor kernels with the same template. This means that the expansion
- variable and the expansion point must match. Expansion order is not so
- important, different order usually means that one of them is truncated
- before doing the operation.
- If \verb|TAYLORKEEPORIGINAL| is set to \verb|ON| and if all Taylor
- kernels in \verb|exp| have their original expressions kept
- \verb|TAYLORCOMBINE| will also combine these and store the result
- as the original expression of the resulting Taylor kernel.
- There is also the switch \verb|TAYLORAUTOEXPAND| (see below).
- There are a few restrictions to avoid mathematically undefined
- expressions:
- it is not possible to take the logarithm of a Taylor kernel whose
- constant
- term is zero, or to divide by a Taylor kernel that consists only
- of the constant zero.
- There are, however, some provisions made to detect singularities during
- expansion: poles that arise because the denominator has zeros at
- the expansion point are
- detected and properly treated, i.e.\ the Taylor kernel will
- start with a negative power. (This is accomplished by expanding
- numerator and denominator separately and combining the results.)
- It has been observed, however, that this does {\em not\/} work if the
- \verb|MCD| switch is set to \verb|OFF|. This seems to be a
- limitation of \REDUCE{} version 3.3.
- Essential singularities are not handled at all which means that usually
- some sort of error will be signalled. Maybe I can improve this later.
- \verb|TAYLOR| does not always detect non-analytical expressions in
- its first argument.
- In this case a wrong result will be given that depends on the order
- of Taylor variables in the call to \verb|TAYLOR|.
- An example for this behaviour is given by the function $xy/(x+y)$ that is
- not analytical in the neighborhood of $(x,y) = (0,0)$:
- Trying to calculate
- \begin{verbatim}
- TAYLOR(X*Y/(X+Y),X,0,2,Y,0,2);
- \end{verbatim}
- we get as result $X-X^{2}/Y$.
- The reason for this is as follows:
- \verb|TAYLOR| first expands it with respect to $X$ about $0$
- up to order $2$ giving $X - X^{2}/Y$.
- This has only a simple pole in $Y$ at $0$ and is therefore returned as
- result.
- If we interchange \verb|X| and \verb|Y| in the call to \verb|TAYLOR|
- they are also interchanged in the result.
- At the moment I don't know a general method to detect non-analytical
- expressions in the argument to \verb|TAYLOR|.
- Differentiation of a Taylor expression is possible. If you
- differentiate with respect to one of the Taylor variables the order
- will decrease by one.
- Substitution is a bit restricted: Taylor variables can only be replaced
- by other kernels. There is one exception to this rule: you can always
- substitute a Taylor variable by an expression that evaluates to a
- constant. Note that \REDUCE{} will not always be able to determine
- that an expression is constant: an example is \verb|SIN(ACOS(4))|.
- This packages introduces a number of new switches:
- \begin{itemize}
- \item If you set \verb|TAYLORAUTOCOMBINE| to \verb|ON| \REDUCE{}
- automatically combines Taylor expressions during the simplification
- process. This is equivalent to applying \verb|TAYLORCOMBINE| to
- every expression that contains Taylor kernels.
- \item \verb|TAYLORAUTOEXPAND| makes Taylor expressions ``contagious''
- in the sense that \verb|TAYLORCOMBINE| tries to Taylor expand
- all non-Taylor subexpressions and to combine the result with the
- rest.
- \item \verb|TAYLORKEEPORIGINAL|, if set to \verb|ON|, forces the
- package to keep the original expression, i.e.\ the expression
- that was Taylor expanded. All operations performed on the
- Taylor kernels are also applied to this expression which can
- be recovered using the operator \verb|TAYLORORIGINAL|.
- \item \verb|TAYLORPRINTORDER|, if set to \verb|ON|, causes the
- remainder to be printed in big-$O$ notation. Otherwise, three
- dots are printed.
- \item There is also the switch \verb|VERBOSELOAD|. If it is set to
- \verb|ON|
- \REDUCE{} will print some information when the Taylor package is
- loaded. This switch is already present in \PSL{} systems.
- \end{itemize}
- All switches are normally off.
- \section{Warnings and error messages}
- \begin{itemize}
- \item \verb|Branch point detected in ...|\\
- This occurs if you take a rational power of a Taylor kernel
- and raising the lowest order term of the kernel to this
- power yields a non analytical term (i.e.\ a fractional power).
- \item \verb|Cannot expand further... truncation done|\\
- You will get this warning if you try to expand a Taylor kernel to
- a higher order.
- \item \verb|Error during expansion (possible singularity)|\\
- The expression you are trying to expand caused an error.
- As far as I know this can only happen if it contains a function
- with a pole or an essential singularity at the expansion point.
- (But one can never be sure.)
- \item \verb|Essential singularity in ...|\\
- An essential singularity was detected while applying a
- special function to a Taylor kernel.
- This error occurs, for example, if you try to take
- the logarithm of a Taylor kernel that starts with a negative
- power in one of its variables, i.e.\ that has a pole
- at the expansion point.
- \item \verb|Expansion point lies on branch cut in ...|\\
- The only functions with branch cuts this package knows of
- are (natural) logarithm, inverse circular and hyperbolic
- tangent and cotangent.
- The branch cut of the logarithm is assumed to lie on the negative
- real axis. Those of the arc tangent and arc cotangent
- functions are chosen to be compatible with this:
- both have essential singularities at the points $\pm i$.
- The branch cut of arc tangent is the straight line along the
- imaginary axis connecting $+1$ to $-1$ going through $\infty$ whereas
- that of arc cotangent goes through the origin.
- Consequently, the branch cut of the inverse hyperbolic
- tangent resp.\ cotangent lies on the real axis and goes from
- $-1$ to $+1$, that of the latter across
- $0$, the other across $\infty$.
-
- The error message can currently only appear when you try to
- calculate the inverse tangent or cotangent of a Taylor
- kernel that starts with a negative degree.
- The case of a logarithm of a Taylor kernel whose constant term
- is a negative real number is not caught since it is
- difficult to detect this in general.
- \item \verb|Not a unity in ...|\\
- This will happen if you try to divide by or take the logarithm of
- a Taylor series whose constant term vanishes.
- \item \verb|Not implemented yet (...)|\\
- Sorry, but I haven't had the time to implement this feature.
- Tell me if you really need it, maybe I have already an improved
- version of the package.
- \item \verb|Substitution of dependent variables ...|\\
- You tried to substitute a variable that is already present in the
- Taylor kernel or on which one of the Taylor variables depend.
- \item \verb|Taylor kernel doesn't have an original part|\\
- The Taylor kernel upon which you try to use \verb|TAYLORORIGINAL|
- was created with the switch \verb|TAYLORKEEPORIGINAL|
- set to \verb|OFF|
- and does therefore not keep the original expression.
- \item \verb|Wrong number of arguments (TAYLOR)|\\
- You try to use the operator \verb|TAYLOR| with a wrong number of
- arguments.
- \item \verb|Zero denominator in Taylor substitution|\\
- That's exactly what the message says. As an example consider the
- case of a Taylor kernel containing the term \verb|1/x| and you try
- to substitute \verb|x| by \verb|0|.
- \item \verb|... invalid as kernel|\\
- You tried to expand with respect to an expression that is not a
- kernel.
- \item \verb|... invalid as order of expansion|\\
- The order parameter you gave to \verb|TAYLOR| is not an integer.
- \item \verb|... invalid as Taylor kernel|\\
- You tried to apply \verb|TAYLORORIGINAL| or \verb|TAYLORTEMPLATE|
- to an expression that is not a Taylor kernel.
- \item \verb|... invalid as Taylor variable|\\
- You tried to substitute a Taylor variable by an expression that is
- not a kernel.
- \item \verb|TAYLOR PACKAGE (...): this can't happen ...|\\
- This message shows that an internal inconsistency was detected.
- This is not your fault, at least as long as you did not try to
- work with the internal data structures of \REDUCE. Send input
- and output to me, together with the version information that is
- printed out.
- \end{itemize}
- \section{Comparison to other packages}
- At the moment there is only one \REDUCE{} package that I know of:
- the truncated power series package by Alan Barnes and Julian Padget.
- In my opinion there are two major differences:
- \begin{itemize}
- \item The interface. They use the domain mechanism for their power
- series, I decided to invent a special kind of kernel. Both
- approaches have advantages and disadvantages: with domain
- modes, it is easier
- to do certain things automatically, e.g., conversions.
- \item The concept of a truncated series. Their idea is to remember
- the original expression and to compute more coefficients when
- more of them are needed. My approach is to truncate at a
- certain order and forget how the unexpanded expression
- looked like. I think that their method is more widely
- usable, whereas mine is more efficient when you know in
- advance exactly how many terms you need.
- \end{itemize}
- \MACSYMA{} has Taylor and power series packages. I don't know much
- about the general power series package but the Taylor package has some
- features that are still lacking here, e.g., correct treatment of
- known essential singularities. In \MACSYMA{} a Taylor series is a
- special object, a sort of extended rational expression recognized by
- all simplification functions. They also have a better user interface.
- E.g., you may define the Taylor expansion of an unknown function.
- \Mathematica's \verb|series| function can only handle power series of
- one variable. However, it is better in its handling of singularities.
- (I should add a comparison to \MAPLE.)
- \end{document}
|