SEC (POISSON SERIES FUNCTIONSPOISSFUN1) HISTORICALLY SPECIAL REPRESENTATIONS HAVE BEEN

SEC (POISSON SERIES FUNCTIONSPOISSFUN1) HISTORICALLY SPECIAL REPRESENTATIONS HAVE BEEN






.sec (Poisson Series Functions,poissfun,1)

Historically, special representations have been vital for success in
significant computer aided calculations in the field of
Celestial Mechanics.  The space and time efficiency of these
representations can be
helpful in a variety of other areas which solve similar differential
equations to those of the perturbed motion of planets.
The central representation
notion is that of a Poisson series.

A Poisson series is a finite sum where each term in the
sum has the form p*trig(q) where
"trig" is either SIN or COS .  Often in applications, p is
known to be 
a polynomial, but we will assume for the moment
that whatever it is, it can be represented as a general MACSYMA expression.
The argument q is quite specific in nature, but not so
restricted as to interfere with many applications.
Q is a LINEAR combination of integer multiples
of a fixed, pre-determined
set of variables [default 6], whose names are
given by the value of the variable $var<POISVARS/ [U, V, W, X, Y, Z]>.
Furthermore, the user must have an a priori bound on the magnitude
of the
numerical coefficients in the trig arguments during the computation.
All these coefficients will be stuffed into a
a fixed length vector. That is, these small integers are
packed into a single word or a several-word vector.  What this means to the user
is that
if COS(a*U+b*V+...+f*Z) occurs, then the maximum base-2 log of |a| + ...+|f|
must not exceed POISLIM/2.
$var<POISLIM/30>  provides 5 bits for each of
6 variables (or a range of  -16 to +15).

Conversion of a MACSYMA expression 
to a Poisson series consists of expanding all products or powers of sines and/or
cosines into sums, and storing them in a particularly compact
form. It will not be apparent to the user that an expression is
in Poisson form, or if part of it is in Poisson form, so the display
program uses a notation /P/ to indicated that part of the expression was
automatically converted for display.
Since Poisson series calculations
tend to result in huge expressions, most serious users will 
use the
PRINTPOIS function, which does a line-by-line display.

.function(POISSIMP,A)
returns a Poisson series equivalent to the
expression A (in general representation, or possibly containing Poisson
series as components).
.endfunction

.function(INTOPOIS,A)
is the same as POISSIMP.

.endfunction

.function(OUTOFPOIS,A)
converts A from Poisson encoding to general representation.  If A is not in
Poisson form, it will make the conversion, i.e. it will look like the result of
OUTOFPOIS(INTOPOIS(A)).  This function is thus a canonical simplifier for sums of
powers of SIN's and COS's of a particular type.

.endfunction

.function(PRINTPOIS,A)
prints a Poisson series in a readable format.  In common with OUTOFPOIS, it
will convert A into a Poisson encoding first, if necessary.

.endfunction

.function(POISTIMES,|A, B|)
is functionally identical to INTOPOIS(A*B).

.endfunction

.function(POISTRIM)
is a reserved function name which (if the user has defined it) gets
applied during Poisson multiplication.  It is a predicate function of n
arguments where n is the length of the POISVARS list(default 6).  These
arguments are
the coefficients of the variables on POISVARS,
(default U, V,..., Z) in a term.  Terms for which calling POISTRIM returns
TRUE  are eliminated during multiplication.

.endfunction

.function(POISPLUS,|A, B|)
is functionally identical to INTOPOIS(A+B).

.endfunction

.function(POISEXPT,|A, B|)
(B a positive integer) is functionally identical to INTOPOIS(A**B).

.endfunction

.function(POISDIFF,|A, B|)
differentiates A with respect to B.  B must occur only in the trig arguments
or only in the coefficients.

.endfunction

.function(POISINT,|A, B|)
integrates in a similarly restricted sense (to POISDIFF).  Non-periodic terms
in B are dropped if B is in the trig arguments.

.endfunction

.function(POISSUBST,|A, B, C|)
substitutes A for B in C.  C is a Poisson series.

(1) Where B is in POISVARS, then A must be an expression linear in
those variables (e.g. 6*U+4*V).

(2) Where B is other than those variables, then A must also be free of those
variables, and furthermore, free of sines or cosines.

.endfunction

.function(POISSUBST,|A, B, C, D, N|)
is a special type of substitution which operates on A and B as in
type (1) above, but where D is a Poisson series, expands COS(D) and SIN(D) to order N
so as to provide the result of substituting A+D for B in C.  The idea is that D is an
expansion in terms of a small parameter.  For example, POISSUBST(U,V,COS(V),E,3)
results in COS(U)*(1-E^2/2) - SIN(U)*(E-E^3/6).

.endfunction

.function(POISMAP,|series, sinfn, cosfn|)
will map the functions #2sinfn#* on the sine terms and #2cosfn#* on
the cosine terms of the poisson series given.  #2sinfn#* and #2cosfn#* are functions of two
arguments which are a coefficient and a trigonometric part of a term in series
respectively. For example, one might wish to RATSIMP the coefficients by
POISMAP(E,RATSIMP,RATSIMP);

.example
(C1) PFEFORMAT:TRUE$

(C2) (2*A^2-B)*COS(X+2*Y)-(A*B+5)*SIN(U-4*X);

.begin group
					
(D2)        - (A B + 5) SIN(U - 4 X) 

		      2
		+ (2 A  - B) COS(2 Y + X)
.end

(C3) POISEXPT(%,2)$

.begin group
(C4) PRINTPOIS(D3);

    2
(2 A  - B) ( - A B - 5) SIN( - 2 Y - 5 X + U)

    2
(2 A  - B) ( - A B - 5) SIN(2 Y - 3 X + U)

		  2
- 1/2 ( - A B - 5)  COS(2 U - 8 X)

	2     2                   2
1/2 (2 A  - B)  + 1/2 ( - A B - 5)

	2     2
1/2 (2 A  - B)  COS(4 Y + 2 X)
.end

(D4)                               DONE

(C5) POISINT(D3,Y)$

(C6) POISSIMP(%);

.begin group
	     2     2 
(D6) 1/8 (2 A  - B)  

	                         2
	SIN(4 Y + 2 X) - 1/2 (2 A  - B) ( - A B - 5)

				     2
        COS(2 Y - 3 X + U) + 1/2 (2 A  - B) ( - A B - 5)

        COS( - 2 Y - 5 X + U)
.end

(C7) INTOPOIS(SIN(X)^5+COS(X)^5);

.begin group
(D7) /R/  1/16 SIN(5 X) + 1/16 COS(5 X) - 5/16 SIN(3 X) 

 	      + 5/16 COS(3 X) + 5/8 SIN(X) + 5/8 COS(X)
 .end

.end

Remember that
coefficients in the arguments of the trigonometric
functions fit in a pre-arranged domain. If you change this domain,
all pre-existing Poisson series will be invalid.

For a user particularly concerned with efficiency, it is possible to define the coefficient
arithmetic to be something other than normal MACSYMA general
form.  The user (probably in conjunction with a LISP-MACSYMA
programmer) must define the programs needed to add, multiply, substitute,
differentiate,
encode and decode the coefficients.  The constant
expressions which represent +1 and -1 and a program to test
for 0 (zero), completes each package.  In the past, packages have been used
for coefficients
being CRE form, polynomials with floating point coefficients, and polynomials with
rational number coefficients.  A model for these is given in
the source file in terms of the default general MACSYMA form; an alternative
is the
package using CRE form which can be used
on a VAX system
by typing load("rat/ratpoi"); after loading the Poisson package.
On MIT-MC,
LOAD(RATPOI,FASL,DSK,MACSYM); is the required incantation.

This section (c) Richard Fateman, 1982. Used by permission.

.endfunction





Tags: (poisson series, series, special, (poisson, representations, historically, functionspoissfun1)