\documentstyle[11pt,reduce]{article}
\title{{\tt FPS}\\
A Package for the\\
Automatic Calculation \\
of Formal Power Series}
\date{}
\author{Wolfram Koepf\\
ZIB Berlin \\
Email: {\tt Koepf@ZIB.de}
\\
\\
Present \REDUCE{} form by \\
Winfried Neun \\
ZIB Berlin \\
Email: {\tt Neun@ZIB.de}}
\begin{document}
\maketitle
\section{Introduction}
This package can expand functions of certain type into
their corresponding Laurent-Puiseux series as a sum of terms of the form
\begin{displaymath}
\sum_{k=0}^{\infty} a_{k} (x-x_{0})^{m k/n + s}
\end{displaymath}
where $m$ is the `symmetry number', $s$ is the `shift number',
$n$ is the `Puiseux number',
and $x_0$ is the `point of development'. The following types are
supported:
\begin{itemize}
\item
{\bf functions of `rational type'}, which are either rational or have a
rational derivative of some order;
\item
{\bf functions of `hypergeometric type'} where $a(k+m)/a(k)$ is a rational
function for some integer $m$;
\item
{\bf functions of `explike type'} which satisfy a linear homogeneous
differential equation with constant coefficients.
\end{itemize}
The FPS package is an implementation of the method
presented in \cite{Koepf:92}. The implementations of this package
for {\sc Maple} (by D.\ Gruntz) and {\sc Mathematica} (by W.\ Koepf)
served as guidelines for this one.
Numerous examples can be found in \cite{Koepf:93a}--\cite{Koepf:93b},
most of which are contained in the test file {\tt fps.tst}. Many
more examples can be found in the extensive bibliography of Hansen \cite{Han}.
\section{\REDUCE{} operator {\tt FPS}}
The FPS Package must be loaded first by:
\begin{verbatim}
load FPS;
\end{verbatim}
{\tt FPS(f,x,x0)} tries to find a formal power
series expansion for {\tt f} with respect to the variable {\tt x}
at the point of development {\tt x0}.
It also works for formal Laurent (negative exponents) and Puiseux series
(fractional exponents). If the third
argument is omitted, then {\tt x0:=0} is assumed.
Examples: {\tt FPS(asin(x)\verb+^+2,x)} results in
\begin{verbatim}
2*k 2*k 2 2
x *2 *factorial(k) *x
infsum(----------------------------,k,0,infinity)
factorial(2*k + 1)*(k + 1)
\end{verbatim}
{\tt FPS(sin x,x,pi)} gives
\begin{verbatim}
2*k k
( - pi + x) *( - 1) *( - pi + x)
infsum(------------------------------------,k,0,infinity)
factorial(2*k + 1)
\end{verbatim}
and {\tt FPS(sqrt(2-x\verb+^+2),x)} yields
\begin{verbatim}
2*k
- x *sqrt(2)*factorial(2*k)
infsum(--------------------------------,k,0,infinity)
k 2
8 *factorial(k) *(2*k - 1)
\end{verbatim}
Note: The result contains one or more {\tt infsum} terms such that it does
not interfere with the {\REDUCE} operator {\tt sum}. In graphical oriented
REDUCE interfaces this operator results in the usual $\sum$ notation.
If possible, the output is given using factorials. In some cases, the
use of the Pochhammer symbol {\tt pochhammer(a,k)}$:=a(a+1)\cdots(a+k-1)$
is necessary.
The operator {\tt FPS} uses the operator {\tt SimpleDE} of the next section.
If an error message of type
\begin{verbatim}
Could not find the limit of:
\end{verbatim}
occurs, you can set the corresponding limit yourself and try a
recalculation. In the computation of {\tt FPS(atan(cot(x)),x,0)},
REDUCE is not able to find the value for the limit
{\tt limit(atan(cot(x)),x,0)} since the {\tt atan} function is multi-valued.
One can choose the branch of {\tt atan} such that this limit equals
$\pi/2$ so that we may set
\begin{verbatim}
let limit(atan(cot(~x)),x,0)=>pi/2;
\end{verbatim}
and a recalculation of {\tt FPS(atan(cot(x)),x,0)}
yields the output {\tt pi - 2*x} which is
the correct local series representation.
\section{\REDUCE{} operator {\tt SimpleDE}}
{\tt SimpleDE(f,x)} tries to find a homogeneous linear differential
equation with polynomial coefficients for $f$ with respect to $x$.
Make sure that $y$ is not a used variable.
The setting {\tt factor df;} is recommended to receive a nicer output form.
Examples: {\tt SimpleDE(asin(x)\verb+^+2,x)} then results in
\begin{verbatim}
2
df(y,x,3)*(x - 1) + 3*df(y,x,2)*x + df(y,x)
\end{verbatim}
{\tt SimpleDE(exp(x\verb+^+(1/3)),x)} gives
\begin{verbatim}
2
27*df(y,x,3)*x + 54*df(y,x,2)*x + 6*df(y,x) - y
\end{verbatim}
and {\tt SimpleDE(sqrt(2-x\verb+^+2),x)} yields
\begin{verbatim}
2
df(y,x)*(x - 2) - x*y
\end{verbatim}
The depth for the search of a differential equation for {\tt f} is
controlled by the variable {\tt fps\verb+_+search\verb+_+depth};
higher values for {\tt fps\verb+_+search\verb+_+depth}
will increase the chance to find the solution, but increases the
complexity as well. The default value for {\tt fps\verb+_+search\verb+_+depth}
is 5. For {\tt FPS(sin(x\verb+^+(1/3)),x)}, or
{\tt SimpleDE(sin(x\verb+^+(1/3)),x)} e.\ g., a setting
{\tt fps\verb+_+search\verb+_+depth:=6} is necessary.
The output of the FPS package can be influenced by the
switch {\tt tracefps}. Setting {\tt on tracefps} causes various
prints of intermediate results.
\section{Problems in the current version}
The handling of logarithmic singularities is not yet implemented.
The rational type implementation is not yet complete.
The support of special functions \cite{Koepf:94}
will be part of the next version.
\begin{thebibliography}{9}
\bibitem{Han}
E.\ R. Hansen, {\em A table of series and products.}
Prentice-Hall, Englewood Cliffs, NJ, 1975.
\bibitem{Koepf:92} Wolfram Koepf,
{\em Power Series in Computer Algebra},
J.\ Symbolic Computation 13 (1992)
\bibitem{Koepf:93a} Wolfram Koepf,
{\em Examples for the Algorithmic Calculation of Formal
Puiseux, Laurent and Power series},
SIGSAM Bulletin 27, 1993, 20-32.
\bibitem{Koepf:93b} Wolfram Koepf,
{\em Algorithmic development of power series.} In:
Artificial intelligence and symbolic mathematical computing,
ed.\ by J.\ Calmet and J.\ A.\ Campbell,
International Conference AISMC-1, Karlsruhe, Germany, August 1992, Proceedings,
Lecture Notes in Computer Science {\bf 737}, Springer-Verlag,
Berlin--Heidelberg, 1993, 195--213.
\bibitem{Koepf:94} Wolfram Koepf,
{\em Algorithmic work with orthogonal polynomials and special functions.}
Konrad-Zuse-Zentrum Berlin (ZIB), Preprint SC 94-5, 1994.
\end{thebibliography}
\end{document}