Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
/*
 * This file:
 *   http://anggtwu.net/MAXIMA/laurent2.mac.html
 *   http://anggtwu.net/MAXIMA/laurent2.mac
 *          (find-angg "MAXIMA/laurent2.mac")
 * Author: Eduardo Ochs <eduardoochs@gmail.com>
 * See: (find-es "maxima" "laurent")
 *      http://anggtwu.net/eev-maxima.html
 *
 * Dot notation for Laurent polynomials, version 2.
 * I used it in:
 *
 *   2hT233 (c2m232ncp 5 "maxima")
 *          (c2m232nca   "maxima")
 *          http://anggtwu.net/LATEX/2023-2-C2-Tudo.pdf#page=233
 *   2hT250 (c2m232tap 3 "caixinhas")
 *          (c2m232taa   "caixinhas")
 *          http://anggtwu.net/LATEX/2023-2-C2-Tudo.pdf#page=250
 *
 * The next block is a copy of the comments from the version 1, that
 * is here:
 *   (find-angg "MAXIMA/laurent1.mac")
 *
 * Dot notation for Laurent polynomials, version 1.
 * Idea: 456.78 is
 *
 *   4*10^2 + 5*10^1 + 6*10^0 + 7*10^-1 + 8*10^-2,
 *
 * and we write it (roughly) as:
 *
 *   [ 4  5  6  .  7  8 ]
 *
 * We can generalize the 10 to x.
 * With the functions of this file we have:
 *
 *   (%i2) lpx(4*x^2 + 5*x^1 + 6*x^0 + 7*x^-1 + 8*x^-2);
 *   (%o2)           [ 4  5  6  .  7  8 ]
 *
 * The "[ 4 5 6 . 7 8 ]" is a horizontal matrix that has the string
 * "." in its fourth position; the "." separates the "integer part"
 * from the "fractional part".
 *
 * These Laurent polynomials are also great for teaching trigonomotric
 * identities:
 *
 *   If we define          E = e^(ix),
 *                   icos(x) = E + E^-1,
 *            and    isin(x) = E - E^-1,
 *   then we have     cos(x) =    1/2 * icos(x)
 *            and     sin(x) = 1/(2i) * isin(x).
 *
 * Using Laurent polynomials on E instead of on x we have:
 *
 *   (%i1) lpE(icos(x));
 *   (%o1)                           [ 1  0  .  1 ]
 *   (%i2) lpE(isin(x));
 *   (%o2)                          [ 1  0  .  - 1 ]
 *   (%i3) lpE(isin(3*x));
 *   (%o3)                    [ 1  0  0  0  .  0  0  - 1 ]
 *   (%i4) lpE(isin(3*x) * icos(x));
 *   (%o4)                [ 1  0  1  0  0  .  0  - 1  0  - 1 ]
 *   (%i5) lpE(isin(4*x) + isin(2*x));
 *   (%o5)                [ 1  0  1  0  0  .  0  - 1  0  - 1 ]
 *   (%i6) lpe( sin(4*x) +  sin(2*x));
 *   (%o6)                         sin(4 x) + sin(2 x)
 *   (%i7) 
 *
 * See: (find-es "maxima" "laurent")
 * (defun e () (interactive) (find-angg "MAXIMA/laurent1.mac"))
 *
 * (defun e () (interactive) (find-angg "MAXIMA/laurent2.mac"))
 * (defun o () (interactive) (find-angg "MAXIMA/laurent1.mac"))
*/

lowpow(expr,var)  := hipow(subst([var=var^-1],expr), var)$

lpdegrees(lp,var) := block(
  [revlp,origposdeg,orignegdeg,posdeg,negdeg],
  revlp      : subst([var=var^-1], lp),
  origposdeg :  hipow(   lp, var),
  orignegdeg : -hipow(revlp, var),
  posdeg     : max(origposdeg, 0),
  negdeg     : min(orignegdeg, 0),
  [posdeg,negdeg])$

lpcoeffs0(lp,var,hilo) := makelist(ratcoef(lp,var,k), k, hilo[1],hilo[2], -1)$
lpcoeffs (lp,var)      := apply('lpcoeffs0, [lp,var, lpdegrees(lp,var)]);
lpdot    (lp,var)      := block([hi,lo,posdigits,negdigits],
  [hi,lo]    : lpdegrees(lp,var),
  posdigits  : lpcoeffs0(lp,var,[hi,0]),
  negdigits  : lpcoeffs0(lp,var,[-1,lo]),
  matrix(append(posdigits, ["."], negdigits))
  )$

E_th : E = exp(%i*th);
E_x  : E = exp(%i*x);
th_E : th = log(E)/%i;
x_E  : x  = log(E)/%i;

fourierize (f) := expand(demoivre(expand(exponentialize(f))));
fourierizeE(f) :=      subst(th_E,expand(exponentialize(f)));
lpE(f)         := lpdot(fourierizeE(f),E);
lpx(f)         := lpdot(expand(f),x)$
lpe(f)         := expand(demoivre(expand(exponentialize(f))))$

ccos(th) := 2*cos(th);
csin(th) := 2*%i*sin(th);

/*
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
load("laurent2.mac");
p : 4*x^2 + 5*x^1 + 6*x^0 + 7*x^-1 + 8*x^-2;
q : 4*E^2 + 5*E^1 + 6*E^0 + 7*E^-1;
lpdot(p, x);
lpdot(q, E);
f :  cos(th)^3;
g : ccos(th)^3;
lpe(f);
lpe(g);

                       exponentialize(f);
                expand(exponentialize(f));
       demoivre(expand(exponentialize(f)));
expand(demoivre(expand(exponentialize(f))));
     subst(th_E,expand(exponentialize(f)));
     subst(th_E,expand(exponentialize(g)));

lpE(f);
lpE(g);
lpE(  ccos(th)^3);
lpE(  ccos(th));
lpE(3*ccos(th));
lpE(ccos(3*th));
lpE(ccos(3*th)+3*ccos(th));

lpE( ccos(th)   );
lpE( ccos(th)^2 );
lpE( ccos(th)^3 );
lpE( csin(th)     );
lpE( csin(th)^2   );
lpE( csin(th)^3   );
lpE( csin(2*th)   );
lpE( csin(2*th)^2 );

*/



/*
 * Local Variables:
 * coding:  utf-8-unix
 * End:
*/