.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)