File r38/log/compact.rlg artifact b9d172de07 part of check-in aacf49ddfa


Tue Apr 15 00:32:57 2008 run on win32
% Tests of the COMPACT package.

% Author: Anthony C. Hearn.

% First some simple examples.

aa := {cos(x)^2+sin(x)^2-1};


             2         2
aa := {cos(x)  + sin(x)  - 1}


xx := 2*cos(x)^2+2*sin(x)^2-2;


               2         2
xx := 2*(cos(x)  + sin(x)  - 1)


compact(xx,aa);


0


xx := (1-cos(x)^2)^4;


            8           6           4           2
xx := cos(x)  - 4*cos(x)  + 6*cos(x)  - 4*cos(x)  + 1


compact(xx,aa);


      8
sin(x)


% These examples are from Lars Hornfeldt.

% This should be cos x^10*sin x^10.

compact(((1-(sin x)**2)**5)*((1-(cos x)**2)**5)
	    *(((sin x)**2+(cos x)**2)**5),
	{cos x^2+sin x^2=1});


      10           2       4         10           8           2
sin(x)  *(10*cos(x) *sin(x)  - sin(x)   + 5*sin(x)  - 5*sin(x)  + 1)


% This example illustrates the problem in the above. It is cos(x)^6.

compact(-3cos(x)^2*sin(x)^2-sin(x)^6+1,{cos x^2+sin x^2-1});


           2       2         6
 - 3*cos(x) *sin(x)  - sin(x)  + 1


compact(s*(1-(sin x**2))+c*(1-(cos x)**2)+(sin x)**2+(cos x)**2,
	{cos x^2+sin x^2=1});


      2           2
cos(x) *s + sin(x) *c + 1


xx := s*(1-(sin x**2))+c*(1-(cos x)**2)+(sin x)**2+(cos x)**2
	*((sin x)**2+(cos x)**2)*(sin x)**499*(cos x)**499;


            503       499         501       501         2           2
xx := cos(x)   *sin(x)    + cos(x)   *sin(x)    - cos(x) *c - sin(x) *s

               2
       + sin(x)  + c + s


compact(xx,{cos(x)^2+sin(x)^2=1});


      501       499         2           2           2
cos(x)   *sin(x)    + cos(x) *s + sin(x) *c + sin(x)


compact((s*(1-(sin x**2))+c*(1-(cos x)**2)+(sin x)**2+(cos x)**2)
	     *((sin x)**2+(cos x)**2)*(sin x)**499*(cos x)**499,
	 {cos x^2+sin x^2=1});


      499       499        2           2
cos(x)   *sin(x)   *(cos(x) *s + sin(x) *c + 1)


compact(df((1-(sin x)**2)**4,x),{cos x^2+sin x^2=1});


                         2       2         6
8*cos(x)*sin(x)*(3*cos(x) *sin(x)  + sin(x)  - 1)


% End of Lars Hornfeld examples.

xx := a*(cos(x)+2*sin(x))^3-w*(cos(x)-sin(x))^2;


            3             2                  2                     2
xx := cos(x) *a + 6*cos(x) *sin(x)*a - cos(x) *w + 12*cos(x)*sin(x) *a

                                     3           2
       + 2*cos(x)*sin(x)*w + 8*sin(x) *a - sin(x) *w


compact(xx,aa);


                2                                            3
11*cos(x)*sin(x) *a + 2*cos(x)*sin(x)*w + cos(x)*a + 2*sin(x) *a + 6*sin(x)*a

 - w


xx := (1-cos(x)^2)^2+(1-sin(x)^2)^2;


            4           2         4           2
xx := cos(x)  - 2*cos(x)  + sin(x)  - 2*sin(x)  + 2


compact(xx,aa);


           2       2
 - 2*cos(x) *sin(x)  + 1


xx := (c^2-1)^6+7(s-1)^4+23(c+s)^5;


       12      10       8       6       5        4         4        3  2
xx := c   - 6*c   + 15*c  - 20*c  + 23*c  + 115*c *s + 15*c  + 230*c *s

              2  3      2          4       5      4       3       2
       + 230*c *s  - 6*c  + 115*c*s  + 23*s  + 7*s  - 28*s  + 42*s  - 28*s + 8


compact(xx,{c+s=1});


 12      10       8       6       4      2
c   - 6*c   + 15*c  - 20*c  + 22*c  - 6*c  + 24


yy := (c+1)^6*s^6+7c^4+23;


       6  6      5  6       4  6      4       3  6       2  6        6    6
yy := c *s  + 6*c *s  + 15*c *s  + 7*c  + 20*c *s  + 15*c *s  + 6*c*s  + s  + 23


compact(yy,{c+s=1});


 6  6      5  6       4  6      4       3  6       2  6        6    6
c *s  + 6*c *s  + 15*c *s  + 7*c  + 20*c *s  + 15*c *s  + 6*c*s  + s  + 23


zz := xx^3+c^6*s^6$



compact(zz,{c+s=1});


 36       34        32        30         28         26          24          22
c   - 18*c   + 153*c   - 816*c   + 3081*c   - 8820*c   + 20019*c   - 37272*c

          20          18           16           14           12      11
 + 58854*c   - 81314*c   + 100488*c   - 111840*c   + 111341*c   - 6*c

          10       9          8      7          6          4          2
 - 97545*c   - 20*c  + 80439*c  - 6*c  - 53783*c  + 40608*c  - 10368*c  + 13824


xx := (c+s)^5 - 55(1-s)^2 + 77(1-c)^3 + (c+2s)^8;


       8       7          6  2        5  3    5         4  4      4
xx := c  + 16*c *s + 112*c *s  + 448*c *s  + c  + 1120*c *s  + 5*c *s

               3  5       3  2       3         2  6       2  3        2
       + 1792*c *s  + 10*c *s  - 77*c  + 1792*c *s  + 10*c *s  + 231*c

                 7        4                8    5       2
       + 1024*c*s  + 5*c*s  - 231*c + 256*s  + s  - 55*s  + 110*s + 22


% This should reduce to something like:

yy := 1 - 55c^2 + 77s^3 + (1+s)^8;


             2    8      7       6       5       4        3       2
yy :=  - 55*c  + s  + 8*s  + 28*s  + 56*s  + 70*s  + 133*s  + 28*s  + 8*s + 2


% The result contains the same number but different terms.

compact(xx,{c+s=1});


 8      7       6       5       4        3       2
s  + 8*s  + 28*s  + 56*s  + 70*s  + 133*s  - 27*s  + 118*s - 53


compact(yy,{c+s=1});


 8      7       6       5       4        3       2
s  + 8*s  + 28*s  + 56*s  + 70*s  + 133*s  - 27*s  + 118*s - 53


% Test showing order of expressions is important.

d2:= - 4*r3a**2 - 4*r3b**2 - 4*r3c**2 + 3*r3**2$



d1:=  4 * r3a**2 * r3
   +  4 * r3b**2 * r3
   +  4 * r3c**2 * r3
   + 16 * r3a * r3b * r3c
   -      r3**3$



d0:= 16 * r3a**4
   + 16 * r3b**4
   + 16 * r3c**4
   +       r3**4
   - 32 * r3a**2 * r3b**2
   - 32 * r3a**2 * r3c**2
   - 32 * r3b**2 * r3c**2
   -  8 * r3a**2 *  r3**2
   -  8 * r3b**2 *  r3**2
   -  8 * r3c**2 *  r3**2
   - 64 * r3a * r3b * r3c * r3$



alist := { c0 = d0, c1 = d1, c2 = d2}$



blist := { c2 = d2, c1 = d1, c0 = d0}$



d:= d2 * l*l + d1 * l + d0;


        2   2      2    2      2    2      2    2       3             2
d := 3*l *r3  - 4*l *r3a  - 4*l *r3b  - 4*l *r3c  - l*r3  + 4*l*r3*r3a

                  2             2                        4       2    2
      + 4*l*r3*r3b  + 4*l*r3*r3c  + 16*l*r3a*r3b*r3c + r3  - 8*r3 *r3a

            2    2       2    2                             4         2    2
      - 8*r3 *r3b  - 8*r3 *r3c  - 64*r3*r3a*r3b*r3c + 16*r3a  - 32*r3a *r3b

              2    2         4         2    2         4
      - 32*r3a *r3c  + 16*r3b  - 32*r3b *r3c  + 16*r3c


compact(d,alist);


                2
c0 + c1*l + c2*l
 % Works fine.

compact(d,blist);


    2                    2           2         3                          4
c2*l  - c2*l*r3 + 2*c2*r3  + 8*c2*r3a  + 2*l*r3  + 16*l*r3a*r3b*r3c - 5*r3

        2    2                             4         4         2    2         4
 - 24*r3 *r3a  - 64*r3*r3a*r3b*r3c + 48*r3a  + 16*r3b  - 32*r3b *r3c  + 16*r3c
 % Only c2=d2 is applied.

% This example illustrates why parallel application of the individual
% side relations is necessary.

lst:={x1=a+b+c, x2=a-b-c, x3=-a+b-c, x4=-a-b+c};


lst := {x1=a + b + c,

        x2=a - b - c,

        x3= - a + b - c,

        x4= - a - b + c}


z1:=(a+b+c)*(a-b-c)*(-a+b-c);


          3    2      2        2                2    3    2        2    3
z1 :=  - a  + a *b - a *c + a*b  + 2*a*b*c + a*c  - b  - b *c + b*c  + c
    % This is x1*x2*x3.

z2:=(a+b+c)*(a-b-c)*(-a+b-c)*(-a-b+c);


       4      2  2      2  2    4      2  2    4
z2 := a  - 2*a *b  - 2*a *c  + b  - 2*b *c  + c
   % This is x1*x2*x3*x4.

compact(z1,lst);


                       2
x1*(4*a*b + 2*c*x1 - x1 )
 % Not the best solution but better than nothing.

compact(z2,lst);


 4      2  2      2  2    4      2  2    4
a  - 2*a *b  - 2*a *c  + b  - 2*b *c  + c
 % Does nothing.

end;


Time for test: 33 ms, plus GC time: 1 ms


REDUCE Historical
REDUCE Sourceforge Project | Historical SVN Repository | GitHub Mirror | SourceHut Mirror | NotABug Mirror | Chisel Mirror | Chisel RSS ]