123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- Sat Jun 29 13:38:31 PDT 1991
- REDUCE 3.4, 15-Jul-91 ...
- 1: 1:
- 2: 2:
- 3: 3: % Test for the univariate and multivariate polynomial decomposition.
- % Herbert Melenk, ZIB Berlin, 1990.
- procedure testdecompose u;
- begin scalar r,p,val,nextvar;
- write "decomposition of ",u;
- r := decompose u;
- if length r = 1 then rederr "decomposition failed";
- write " leads to ",r;
- % test if the result is algebraically correct.
- r := reverse r;
- nextvar := lhs first r; val := rhs first r;
- r := rest r;
- while not(r={}) do
- << p := first r; r := rest r;
- if 'equal = part(p,0) then
- <<val := sub(nextvar=val,rhs p); nextvar := lhs p>>
- else
- val := sub(nextvar=val,p);
- >>;
- if val = u then write " O.K. "
- else
- <<write "**** reconstructed polynomial: ";
- write val;
- rederr "reconstruction leads to different polynomial";
- >>;
- end;
- TESTDECOMPOSE
- % univariate decompositions
- testdecompose(x**4+x**2+1);
- 4 2
- decomposition of X + X + 1
- 2 2
- leads to {U + U + 1,U=X }
- O.K.
-
- testdecompose(x**6+9x**5+52x**4+177x**3+435x**2+630x+593);
- 6 5 4 3 2
- decomposition of X + 9*X + 52*X + 177*X + 435*X + 630*X + 593
- 3 2 2
- leads to {U + 25*U + 210*U + 593,U=X + 3*X}
- O.K.
-
- testdecompose(x**6+6x**4+x**3+9x**2+3x-5);
- 6 4 3 2
- decomposition of X + 6*X + X + 9*X + 3*X - 5
- 2 3
- leads to {U + U - 5,U=X + 3*X}
- O.K.
-
- testdecompose(x**8-88*x**7+2924*x**6-43912*x**5+263431*x**4-218900*x**3+
- 65690*x**2-7700*x+234);
- 8 7 6 5 4
- decomposition of X - 88*X + 2924*X - 43912*X + 263431*X
- 3 2
- - 218900*X + 65690*X - 7700*X + 234
- 2
- leads to {U + 35*U + 234,
- 2
- U=V + 10*V,
- 2
- V=X - 22*X}
- O.K.
- % multivariate cases
- testdecompose(u**2+v**2+2u*v+1);
- 2 2
- decomposition of U + 2*U*V + V + 1
- 2
- leads to {W + 1,W=U + V}
- O.K.
-
- testdecompose(x**4+2x**3*y + 3x**2*y**2 + 2x*y**3 + y**4 + 2x**2*y
- +2x*y**2 + 2y**3 + 5 x**2 + 5*x*y + 6*y**2 + 5y + 9);
- 4 3 2 2 2 2 3
- decomposition of X + 2*X *Y + 3*X *Y + 2*X *Y + 5*X + 2*X*Y
- 2 4 3 2
- + 2*X*Y + 5*X*Y + Y + 2*Y + 6*Y + 5*Y + 9
- 2 2 2
- leads to {U + 5*U + 9,U=X + X*Y + Y + Y}
- O.K.
- testdecompose sub(u=(2 x**2 + 17 x+y + y**3),u**2+2 u + 1);
- 4 3 2 3 2 2 3
- decomposition of 4*X + 68*X + 4*X *Y + 4*X *Y + 293*X + 34*X*Y
- 6 4 3 2
- + 34*X*Y + 34*X + Y + 2*Y + 2*Y + Y + 2*Y + 1
- 2 2 3
- leads to {U + 2*U + 1,U=2*X + 17*X + Y + Y}
- O.K.
- testdecompose sub(u=(2 x**2 *y + 17 x+y + y**3),u**2+2 u + 1);
- 4 2 3 2 4 2 2 2
- decomposition of 4*X *Y + 68*X *Y + 4*X *Y + 4*X *Y + 4*X *Y
- 2 3 6 4
- + 289*X + 34*X*Y + 34*X*Y + 34*X + Y + 2*Y
- 3 2
- + 2*Y + Y + 2*Y + 1
- 2 2 3
- leads to {U + 2*U + 1,U=2*X *Y + 17*X + Y + Y}
- O.K.
- % some cases which require a special (internal) mapping
- testdecompose ( (x + y)**2);
- 2 2
- decomposition of X + 2*X*Y + Y
- 2
- leads to {U ,U=X + Y}
- O.K.
- testdecompose ((x + y**2)**2);
- 2 2 4
- decomposition of X + 2*X*Y + Y
- 2 2
- leads to {U ,U=X + Y }
- O.K.
- testdecompose ( (x**2 + y)**2);
- 4 2 2
- decomposition of X + 2*X *Y + Y
- 2 2
- leads to {U ,U=X + Y}
- O.K.
- testdecompose ( (u + v)**2 +10 );
- 2 2
- decomposition of U + 2*U*V + V + 10
- 2
- leads to {W + 10,W=U + V}
- O.K.
- % the decomposition is not unique and might generate quite
- % different images:
- testdecompose ( (u + v + 10)**2 -100 );
- 2 2
- decomposition of U + 2*U*V + 20*U + V + 20*V
- leads to {W*(W + 20),W=U + V}
- O.K.
- % some special (difficult) cases
- testdecompose (X**4 + 88*X**3*Y + 2904*X**2*Y**2 - 10*X**2
- + 42592*X*Y**3 - 440*X*Y + 234256*Y**4 - 4840*Y**2);
- 4 3 2 2 2 3
- decomposition of X + 88*X *Y + 2904*X *Y - 10*X + 42592*X*Y
- 4 2
- - 440*X*Y + 234256*Y - 4840*Y
- 2
- leads to {U*(U - 10),U=V ,V=X + 22*Y}
- O.K.
- % a polynomial with complex coefficients
- on complex;
- testdecompose(X**4 + (88*I)*X**3*Y - 2904*X**2*Y**2 - 10*X**2 -
- (42592*I)*X*Y**3 - (440*I)*X*Y + 234256*Y**4 + 4840*Y**2);
- 4 3 2 2 2
- decomposition of X + (88*I)*X *Y - 2904*X *Y - 10*X
- 3 4
- - (42592*I)*X*Y - (440*I)*X*Y + 234256*Y
- 2
- + 4840*Y
- 2
- leads to {U*(U - 10),U=V ,V=X + (22*I)*Y}
- O.K.
- off complex;
- % Examples given by J. Gutierrez and J.M. Olazabal.
- f1:=x**6-2x**5+x**4-3x**3+3x**2+5$
- testdecompose(f1);
- 6 5 4 3 2
- decomposition of X - 2*X + X - 3*X + 3*X + 5
- 2 3 2
- leads to {U - 3*U + 5,U=X - X }
- O.K.
- f2:=x**32-1$
- testdecompose(f2);
- 32
- decomposition of X - 1
- 2 2 2 2 2
- leads to {U - 1,U=V ,V=W ,W=A ,A=X }
- O.K.
- f3:=x**4-(2/3)*x**3-(26/9)*x**2+x+3$
- testdecompose(f3);
- 4 3 2
- 9*X - 6*X - 26*X + 9*X + 27
- decomposition of --------------------------------
- 9
- 2
- U - 9*U + 27 2
- leads to {---------------,U=3*X - X}
- 9
- O.K.
- f4:=sub(x=x**4-x**3-2x+1,x**3-x**2-1)$
- testdecompose(f4);
- 12 11 10 9 8 7 6
- decomposition of X - 3*X + 3*X - 7*X + 14*X - 10*X + 14*X
- 5 4 3 2
- - 20*X + 9*X - 9*X + 8*X - 2*X - 1
- 3 2 4 3
- leads to {U + 2*U + U - 1,U=X - X - 2*X}
- O.K.
- f5:=sub(x=f4,x**5-5)$
- testdecompose(f5);
- 60 59 58 57 56
- decomposition of X - 15*X + 105*X - 485*X + 1795*X
- 55 54 53 52
- - 5873*X + 17255*X - 45845*X + 112950*X
- 51 50 49
- - 261300*X + 567203*X - 1164475*X
- 48 47 46
- + 2280835*X - 4259830*X + 7604415*X
- 45 44 43
- - 13053437*X + 21545220*X - 34200855*X
- 42 41 40
- + 52436150*X - 77668230*X + 111050794*X
- 39 38 37
- - 153746645*X + 206190770*X - 267484170*X
- 36 35 34
- + 336413145*X - 410387890*X + 484672110*X
- 33 32 31
- - 555048350*X + 616671710*X - 663135380*X
- 30 29 28
- + 690884384*X - 697721320*X + 681039235*X
- 27 26 25
- - 642661265*X + 586604975*X - 516016275*X
- 24 23 22
- + 437051535*X - 356628245*X + 278991765*X
- 21 20 19
- - 208571965*X + 149093999*X - 101204325*X
- 18 17 16
- + 64656350*X - 38848040*X + 21710870*X
- 15 14 13
- - 10971599*X + 4928210*X - 1904450*X
- 12 11 10 9
- + 519730*X - 15845*X - 71947*X + 52015*X
- 8 7 6 5 4
- - 26740*X + 5510*X + 3380*X - 1972*X - 75*X
- 3
- + 195*X - 10*X - 6
- 5 4 3 2
- leads to {U - 5*U + 10*U - 10*U + 5*U - 6,
- 3 2
- U=V + 2*V + V,
- 4 3
- V=X - X - 2*X}
- O.K.
- clear f1,f2,f3,f4,f5;
- end;
- 4: 4:
- Quitting
- Sat Jun 29 13:38:58 PDT 1991
|