Telescoping series

• To: mathgroup at yoda.physics.unc.edu
• Subject: Telescoping series
• From: kaufmana at ocfmail.ocf.llnl.gov (Alfred M Kaufman)
• Date: Tue, 8 Dec 92 23:31:17 PST

```A colleague of mine asked me if I knew of a Mma package to
telescope series.  I told him that I didn't know of one but
he could check Math Source to see if such a package existed.

I was intrigued by the problem and would like to share the
results  my efforts.  There are all kinds of examples
of the use of telescoped series in Abramowitz and Stegun as
polynomial approximations.

Here's a package that does expansions on the interval [-1,1]
Telescope  and expansions on [0,1] ShiftedTelescope.

BeginPackage["`Telescope`"];

Telescope::usage =
"Telescope[series data object,n] = Approximating \
polynomial of order n < order of SeriesData object. \
Based on Chebyshev polynomial approximations on \
interval [-1,1]";

ShiftedTelescope::usage =
"ShiftedTelescope[series data object,n] = Approximating \
polynomial of order n < order of series data object. \
Based on shifted Chebyshev polynomial approximations \
on interval [0,1]";

Begin["`Private`"];
(*  rx[k] is the replacement rule in Chebyshev representation
of  x^k  *)

rx[0]	:= t[0];
rx[1]	:= t[1];
(* Use recurrence relation for Chebyshev polynomials as
an operator to obtain new replacement rule*)
rx[n_] := rx[n] = ((rx[n-1] /. t[k_] :> (t[k+1]+t[k-1])/2 )
/.t[k_?Negative] :> t[-k])//Expand;

Telescope[
Literal[SeriesData[xx_,0,coefs_List,nmin_,nmax_,1]],
n_Integer/;n>=0]:=
Block[{nn=n,nterms,rxtab,obj},
If[nmax-nmin <= nn,
Print["Approximation order ",nn," should \
be < ",nmax-nmin];Return[\$Failed]];
nterms = Length[coefs];
rxtab = Table[rx[j],{j,0,nterms-1}];
obj = coefs.rxtab // Expand;
obj = xx^nmin*
(Plus@@Cases[obj,_.*t[l_]/;l<=nn] /.
t[k_] :> ChebyshevT[k,xx])// Expand;
Return[obj]
];

(*  sx[k] is the replacement rule in Shifted Chebyshev
representation of  x^k  *)

sx[0]	:= st[0];
sx[1]	:= (st[0]+st[1])/2;
(* Use recurrence relation for Shifted Chebyshev
polynomials as an operator to obtain new replacement
rule*)
sx[n_] := sx[n] =
((sx[n-1] /. st[k_] :> (st[k+1]+2*st[k]+st[k-1])/4 )
/.st[k_?Negative] :> st[-k])//Expand;

ShiftedTelescope[
Literal[SeriesData[xx_,0,coefs_List,nmin_,nmax_,1]],
n_Integer/;n>=0]:=
Block[{nn=n,nterms,sxtab,obj},
If[nmax-nmin <= nn,
Print["Approximation order ",nn," should \
be < ",nmax-nmin];Return[\$Failed]];
nterms = Length[coefs];
sxtab = Table[sx[j],{j,0,nterms-1}];
obj = coefs.sxtab // Expand;
obj = xx^nmin*
(Plus@@ Cases[obj,_.*st[l_]/;l<=nn] /.
st[k_] :> ChebyshevT[k,2*xx-1])// Expand;
Return[obj]
];
End[];
EndPackage[];