1/* Filename transfor.mac
2
3   ***************************************************************
4   *							         *
5   *                     <package name>                          *
6   *                <functionality description>                  *
7   *                                                             *
8   *          from: Perturbation Methods, Bifurcation            *
9   *                Theory and Computer Algebra.                 *
10   *           by Rand & Armbruster (Springer 1987)              *
11   *                Programmed by Richard Rand                   *
12   *      These files are released to the public domain          *
13   *            						 *
14   ***************************************************************
15*/
16/*PROGRAM NUMBER 4: TRANSFORM(), THIS PROGRAM ALLOWS TO PERFORM ARBITRARY
17  COORDINATE TRANSFORMATIONS. SEE PAGE 44 IN "PERTURBATION METHODS,
18  BIFURCATION THEORY AND COMPUTER ALGEBRA". */
19
20
21transform():=(
22
23/* INPUT DATA */
24n:read("enter number of equations"),
25for i:1 thru n do
26   x[i]:read("enter symbol for original variable",i),
27for i:1 thru n do
28   y[i]:read("enter symbol for transformed variable",i),
29print("the rhs's of the d.e.'s are functions of the original variables:"),
30for i:1 thru n do (
31   print("enter rhs of",x[i],"d.e."),
32   print("d",x[i],"/dt ="),
33   f[i]:read(),
34   print("d",x[i],"/dt =",f[i])),
35print("the transformation is entered next:"),
36for i:1 thru n do (
37   print("enter",x[i],"as a function of the new variables"),
38   print(x[i],"="),
39   g[i]:read(),
40   print(x[i],"=",g[i])),
41
42/* DO IT */
43for i:1 thru n do depends([x[i],y[i]],t),
44for i:1 thru n do eq[i]:diff(x[i],t)=f[i],
45trans:makelist(x[i]=g[i],i,1,n),
46for i:1 thru n do treq[i]:ev(eq[i],trans,diff),
47treqs:makelist(treq[i],i,1,n),
48derivs:makelist(diff(y[i],t),i,1,n),
49neweqs:solve(treqs,derivs))$
50