diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 81328bf..e833a60 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -124209,6 +124209,369 @@ PadeApproximantPackage(R: Field, x:Symbol, pt:R): Exports == Implementation wher
\pagehead{PadeApproximants}{PADE}
\pagepic{ps/v104padeapproximants.ps}{PADE}{1.00}
+From Jeffrey (pp413-415):
+
+An effective and concise form of approximation is provided by Pad\'e
+approximation in which a function $f(x)$ defined over an interval
+$a \le x \le b$ is approximated by a function of the form $F(x) = N(x)/D(x)$,
+where $N(x)$ and $D(x)$ are polynomials with no common zeros.
+This type of approximation can be used with functions $f(x)$
+that are analytic over the interval $a \le x \le b$, and also with
+functions that have singularities in the interval at which the
+function becomes infinite. In the latter case the zeros of $D(x)$ are
+chosen to coincide with the singularities of $f(x)$ inside the
+interval.
+
+Unless there is a reason to do otherwise, the degrees of the
+polynomial $N(x)$ in the numerator and $D(x)$ in the denominator of a
+Pad\'e approximation are usually chosen to be the same. If, however, the
+function $f(x)$ to be approximated is an even function, $N(x)$ and
+$D(x)$ are both chosen to be even functions, while if $f(x)$ is odd,
+one of the functions $N(x)$ and $D(x)$ is chosen to be even and the
+other to be odd. As already stated, when the function to be
+approximated has singularities in the interval, the zeros of $D(x)$
+are taken to coincide with the singularities.
+
+The determination of a Pad\'e approximation $F(x)$ for $f(x)$ over the
+interval $a \le x \le b$ is determined as follows where, by way of
+example, $f(x)$ is supposed to be neither even nor odd so the degrees
+of $N(x)$ and $D(x)$ are both taken to be $n$. Setting
+\[
+F(x) = \frac{a_1(x-a)^n + a_2(x-a)^{n-1} + \cdots + a_n(x-a) + f(a)}
+{b_1(x-a)^n + b_2(x-a)^{n-1} + \cdots + b_n(x-a) + 1}
+\]
+
+the values of $f(x)$ are computed at $2n$ points $x_1$, $x_2$,
+$\ldots$, $x_{2n}$ distributed over the interval\\
+$a \le x \le b$
+in such a way that the functional values at these points provide
+a good representation of $f(x)$ away from any singularities that
+might occur. Set $f_r = f(x_r)$ with $r=1,2,\ldots,2n$, where the
+initial point $x=a$ is excluded from this set of $2n$ points. Then,
+for each value $x$, set $F(x_r)=f_r$, so that after multiplication
+of $F(x)$ by
+\[
+b_1(x_r-a)^n + \ldots + b_n(x_r-a) + 1,
+\]
+
+\[
+a_1(x_r-a)^n+\ldots+a_n(x_r-a)+f(a)=
+f_r[b_1(x_r-a)^n + \ldots + b_n(x_r-a) + 1]
+\]
+
+with $r=1,2,\ldots{},2n$. These $2n$ equations determine the $2n$
+coefficients $a_1$, $a_2$, $\ldots$, $a_n$, $b_1$, $b_2$, $\ldots$,
+$b_n$ to be used in the Pad\'e approximation.
+
+The approach is different if $f(x)$ is analytic in an interval of
+interest that contains no singularities of $f(x)$ and the function
+is known in the form of a power series. The method used in such a
+case is illustrated by finding a Pad\'e approximation for $sin(x)$
+based on the first four terms of its Maclaurin series
+\[
+sin(x) = x - \frac{1}{6}x^3 + \frac{1}{120}x^5 - \frac{1}{5040}x^5
+\]
+
+the sine function is an odd function, so a Pad\'e approximation
+is sought of the form
+\[
+x - \frac{1}{6}x^3 + \frac{1}{120}x^5 - \frac{1}{5040}x^5 =
+\frac{x+a_1 x^3}{1+b_1 x^2+b_2 x^4}
+\]
+
+where the numerator is an odd polynomial function of degree three
+and the denominator is an even polynomial of degree four.
+
+Multiplying this representation by $1+b_1 x^2 +b_2 x^4$ and
+equating corresponding powers of $x$ on each side of the equation gives:
+\[
+b_1-\frac{1}{6}=a_1,\quad
+b_2-\frac{1}{6}b_1+\frac{1}{120}=0,\quad
+-\frac{1}{5040}+\frac{1}{120}b_1-\frac{1}{6}b_2=0
+\]
+so $a_1=-31/294$, $b_1=3/49$ and $b_2=11/5880$. Substituting for
+$a_1$, $b_1$, and $b_2$ in the original expression and clearing
+fractions shows that the required Pad\'e approximation to be
+\[
+sin(x) \approx F(x) = \frac{5880x-620x^3}{5880+360x^2+11x^4}
+\]
+
+The positive zero of the numerator at 3.07959 provides a surprisingly
+good approximation to the zero of $sin(x)$ at $\pi = 3.14159\ldots$
+despite the very few terms used in the Maclaurin series for $sin(x)$.
+The Pad\'e approximations $F(1)=0.84147$, $F(2) = 0.90715$, and
+$F(3) = 0.08990$, should be compared with the true values
+$sin(1)=0.84147\ldots$, $sin(2)=0.90929\ldots$ and
+$sin(3)=0.14112\ldots$.
+
+An example of a Pad\'e approximation to an analytic function that is
+neither even or odd is provided by an approximation to $exp(-x)$,
+based on the first nine terms of its Maclaurin series expansion
+and a rational approximation in which the numerator and denominator
+are both of degree four, yields
+\[
+exp(-x) \approx F(x) =
+\frac{1680 - 840x + 180x^2 - 20x^3 + x^4}
+{1680 + 840x + 180x^2 + 20x^3 + x^4}
+\]
+
+This approximation gives $F(-1)=2.718281$, that should be compared
+with the true value $exp(1)=e=2.718281\ldots$, similarly
+$F(-2)=7.388889$ should be compared with the true value
+$exp(2)=7.389056\ldots$ and $F(-3)=20.065421$ should be compared
+with the true value $exp(3)=20.085536\ldots$.
+
+A final example is provided by the Pad\'e approximation to the odd
+function $tan(x)$, based on the first five terms of its Maclaurin
+series expansion and a rational function approximation in which the
+numerator is an odd function of degree five and the denominator is
+an even function of degree four.
+
+In this case the Pad\'e approximation becomes
+\[
+tan(x) \approx F(x) =
+\frac{945x - 105x^3 + x^5}{945 - 420x^2 + 15x^4}
+\]
+
+The smallest positive zero of the denominator
+$945 - 420x^2 + 15x^4$ gives for the approximation to
+$\pi/2 = 1.57079\ldots$ the surprisingly accurate estimate
+$\pi/2 \approx 1.57081$. The value $F(1.1)=1.96476$ should be
+compared with the true value
+$tan(1.1)=1.964759\ldots$, the value $F(1.5)=14.10000$ should be
+compared to the true value $tan(1.5)=14.10141\ldots$ and the
+value $F(1.57)=1237.89816$ should be compared with the true value\\
+$tan(1.57)=1255.76559\ldots$.
+
+\begin{chunk}{PadeApproximants.input}
+)set break resume
+)sys rm -f PadeApproximants.output
+)spool PadeApproximants.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 30
+F(x:PI):DFLOAT == (5880*x-620*x^3)/(5880+360*x^2+11*x^4)
+--R Function declaration F : PositiveInteger -> DoubleFloat has been
+--R added to workspace.
+--R Type: Void
+--E 1
+
+--S 2 of 30
+F(1)
+--R Compiling function F with type PositiveInteger -> DoubleFloat
+--R
+--R (2) 0.84146536554151341
+--R Type: DoubleFloat
+--E 2
+
+--S 3 of 30
+sin(1)::EXPR(DFLOAT)
+--R
+--R (3) 0.8414709848078965
+--R Type: Expression(DoubleFloat)
+--E 3
+
+--S 4 of 30
+F(1)-sin(1)
+--R
+--R (4) - 5.6192663830945122E-6
+--R Type: Expression(DoubleFloat)
+--E 4
+
+--S 5 of 30
+F(2)
+--R
+--R (5) 0.90715048025613665
+--R Type: DoubleFloat
+--E 5
+
+--S 6 of 30
+sin(2)::EXPR(DFLOAT)
+--R
+--R (6) 0.90929742682568171
+--R Type: Expression(DoubleFloat)
+--E 6
+
+--S 7 of 30
+F(2)-sin(2)
+--R
+--R (7) - 2.1469465695450607E-3
+--R Type: Expression(DoubleFloat)
+--E 7
+
+--S 8 of 30
+F(3)
+--R
+--R (8) 8.9901108780341618E-2
+--R Type: DoubleFloat
+--E 8
+
+--S 9 of 30
+sin(3)::EXPR(DFLOAT)
+--R
+--R (9) 0.14112000805986721
+--R Type: Expression(DoubleFloat)
+--E 9
+
+--S 10 of 30
+F(3)-sin(3)
+--R
+--R (10) - 5.1218899279525595E-2
+--R Type: Expression(DoubleFloat)
+--E 10
+
+)clear all
+
+--S 11 of 30
+F(x:INT):DFLOAT == _
+ (1680-840*x+180*x^2-20*x^3+x^4)/(1680+840*x+180*x^2+20*x^3+x^4)
+--R
+--R Function declaration F : Integer -> DoubleFloat has been added to
+--R workspace.
+--R Type: Void
+--E 11
+
+--S 12 of 30
+F(-1)
+--R Compiling function F with type Integer -> DoubleFloat
+--R
+--R (2) 2.7182817182817183
+--R Type: DoubleFloat
+--E 12
+
+--S 13 of 30
+exp(1)::EXPR(DFLOAT)
+--R
+--R (3) 2.7182818284590451
+--R Type: Expression(DoubleFloat)
+--E 13
+
+--S 14 of 30
+F(-1)-exp(1)
+--R
+--R (4) - 1.1017732681750658E-7
+--R Type: Expression(DoubleFloat)
+--E 14
+
+--S 15 of 30
+F(-2)
+--R
+--R (5) 7.3888888888888893
+--R Type: DoubleFloat
+--E 15
+
+--S 16 of 30
+exp(2)::EXPR(DFLOAT)
+--R
+--R (6) 7.3890560989306504
+--R Type: Expression(DoubleFloat)
+--E 16
+
+--S 17 of 30
+F(-2)-exp(2)
+--R
+--R (7) - 1.6721004176112331E-4
+--R Type: Expression(DoubleFloat)
+--E 17
+
+--S 18 of 30
+F(-3)
+--R
+--R (8) 20.065420560747665
+--R Type: DoubleFloat
+--E 18
+
+--S 19 of 30
+exp(3)::EXPR(DFLOAT)
+--R
+--R (9) 20.085536923187668
+--R Type: Expression(DoubleFloat)
+--E 19
+
+--S 20 of 30
+F(-3)-exp(3)
+--R
+--R (10) - 2.0116362440003144E-2
+--R Type: Expression(DoubleFloat)
+--E 20
+
+)clear all
+
+--S 21 of 30
+F(x) == (945*x - 105*x^3+x^5)/(945-420*x^2+15*x^4)
+--R Type: Void
+--E 21
+
+--S 22 of 30
+F(1.1)
+--R Compiling function F with type Float -> Float
+--R
+--R (2) 1.9647583984 270694032
+--R Type: Float
+--E 22
+
+--S 23 of 30
+tan(1.1)
+--R
+--R (3) 1.9647596572 486519509
+--R Type: Float
+--E 23
+
+--S 24 of 30
+F(1.1)-tan(1.1)
+--R
+--R (4) - 0.0000012588 215825478
+--R Type: Float
+--E 24
+
+--S 25 of 30
+F(1.5)
+--R
+--R (5) 14.1
+--R Type: Float
+--E 25
+
+--S 26 of 30
+tan(1.5)
+--R
+--R (6) 14.1014199471 71719388
+--R Type: Float
+--E 26
+
+--S 27 of 30
+F(1.5)-tan(1.5)
+--R
+--R (7) - 0.0014199471 71719388
+--R Type: Float
+--E 27
+
+--S 28 of 30
+F(1.57)
+--R
+--R (8) 1237.8982990170 10806
+--R Type: Float
+--E 28
+
+--S 29 of 30
+tan(1.57)
+--R
+--R (9) 1255.7655915006 916051
+--R Type: Float
+--E 29
+
+--S 30 of 30
+F(1.57)-tan(1.57)
+--R
+--R (10) - 17.8672924836 807991
+--R Type: Float
+--E 30
+
+)spool
+)lisp (bye)
+\end{chunk}
+
{\bf Exports:}\\
\begin{tabular}{ll}
\cross{PADE}{pade} &
@@ -124224,8 +124587,9 @@ PadeApproximantPackage(R: Field, x:Symbol, pt:R): Exports == Implementation wher
++ Examples:
++ References:
++ "Pade Approximants, Part I: Basic Theory", Baker & Graves-Morris.
+++ "Handbook of Mathematical Formulas and Integrals" Alan Jeffrey
++ Description:
-++ This package computes reliable Pad&ea. approximants using
+++ This package computes reliable Pade. approximants using
++ a generalized Viskovatov continued fraction algorithm.
PadeApproximants(R,PS,UP): Exports == Implementation where
diff --git a/changelog b/changelog
index ca9a0b2..6b41130 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+20120301 tpd src/axiom-website/patches.html 20120301.01.tpd.patch
+20120301 tpd src/algebra/Makefile add Pade regression test
+20120301 tpd books/bookvol10.4 document and regression test PadeApproximants
20120228 tpd src/axiom-website/patches.html 20120228.01.tpd.patch
20120228 tpd books/bookvol5 add )tangle and )regress commands
20120227 tpd src/axiom-website/patches.html 20120227.01.tpd.patch
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index d6802ba..34fe3f9 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -18121,6 +18121,7 @@ REGRESS= \
PackageForAlgebraicFunctionField.regress \
PackageForAlgebraicFunctionFieldOverFiniteField.regress \
PackageForPoly.regress \
+ PadeApproximants.regress \
PAdicInteger.regress \
PAdicIntegerCategory.regress \
PAdicRational.regress \
@@ -18163,7 +18164,7 @@ REGRESS= \
PolynomialCategory.regress \
PolynomialFactorizationExplicit.regress \
PolynomialIdeals.regress \
- PolynomialPackageForCurve.regress \
+ PolynomialPackageFoCurve.regress \
PolynomialRing.regress \
PolynomialSetCategory.regress \
PositiveInteger.regress \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index c1dbfcd..b59565d 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3830,5 +3830,7 @@ books/bookvol8.1 add Icosahedron, remove v18equation103
buglist fix bug 7217
20120228.01.tpd.patch
books/bookvol5 add )tangle and )regress commands
+20120301.01.tpd.patch
+books/bookvol10.4 document and regression test PadeApproximants