2.1 SOLUTION OF SYSTEMS OF POLYNOMIAL EQUATIONS

# WORKSHEET#12
# 
# SOLUTION OF SYSTEMS OF POLYNOMIAL EQUATIONS
# 
# 
> f:=x^4-2*x*y^2-y^3-2;g:=x*y^4+x^2*y^2-4;\


                                  4        2    3
                            f := x  - 2 x y  - y  - 2

                                      4    2  2
                              g := x y  + x  y  - 4
--------------------------------------------------------------------------------
> with(plots);

  [animate, animate3d, conformal, contourplot, cylinderplot, densityplot,

      display, display3d, fieldplot, fieldplot3d, gradplot, gradplot3d,

      implicitplot, implicitplot3d, loglogplot, logplot, matrixplot, odeplot,

      pointplot, polarplot, polygonplot, polygonplot3d, polyhedraplot, replot,

      setoptions, setoptions3d, spacecurve, sparsematrixplot, sphereplot,

      surfdata, textplot, textplot3d, tubeplot]
--------------------------------------------------------------------------------
> F:=implicitplot(f,x=-4..4,y=-4..4):
--------------------------------------------------------------------------------
> G:=implicitplot(g,x=-4..4,y=-4..4):
--------------------------------------------------------------------------------
> display(F,title=`x^4-2*x*y^2-y^3=2`);display(G,title=`x*y^4+x^2*y^2=4`);\
display([F,G],title=`x^4-2*x*y^2-y^3=2 and x*y^4+x^2*y^2=4`);
--------------------------------------------------------------------------------
# 

   ** Maple V Graphics **

# 
--------------------------------------------------------------------------------

   ** Maple V Graphics **

# 
> 
--------------------------------------------------------------------------------

   ** Maple V Graphics **

--------------------------------------------------------------------------------
> 
# The last plot indicates that there are 3 solutions.  In the plot window you can point and 
# click to see what the coordinates are.  Try it now.  I got (x,y)=(1.562,0.9796), 
# (1.417,-1.06) and (0.4386,-1.642).  We can use the solve command to fine exact solutions.
# 
--------------------------------------------------------------------------------
> S:=solve({f,g},{x,y});

S := {y = %1,

        367       17    15    2129    14    163   13    7453    12    1293   11
   x = ---- %1 + ---- %1   - ------ %1   - ---- %1   - ------ %1   - ----- %1
       1838      1838        117632        7352        235264        29408

           727   10    6233   8   11563   6    2615   7   12329   4     67    16
        + ---- %1   - ----- %1  + ----- %1  - ----- %1  + ----- %1  + ----- %1
          7352        29408       58816       29408       14704       29408

           139   5    659   2    6599   9     255    18   1139           3
        + ---- %1  - ---- %1  + ----- %1  - ------ %1   + ---- + 2/919 %1
          7352       7352       58816       117632        1838

           1395    17
        - ------ %1
          235264

   }

               19       16       15       14        13       12       11
%1 := RootOf(_Z   + 2 _Z   + 2 _Z   + 7 _Z   + 16 _Z   + 4 _Z   - 4 _Z

            10        8        7        4
     + 48 _Z   + 92 _Z  + 32 _Z  + 64 _Z  - 256)
--------------------------------------------------------------------------------
# This means that y is one of the 19 roots of the polynomial in Z and x is the stated 
# expression in terms of the value of y.  Notice that %1 has been assigned a value by the use 
# of the assignment symbol ":=", but x and y have not.  Check this.
# 
--------------------------------------------------------------------------------
> %1;x;y;

           19       16       15       14        13       12       11        10
  RootOf(_Z   + 2 _Z   + 2 _Z   + 7 _Z   + 16 _Z   + 4 _Z   - 4 _Z   + 48 _Z

              8        7        4
       + 92 _Z  + 32 _Z  + 64 _Z  - 256)

                                        x

                                        y
--------------------------------------------------------------------------------
# The next command assigns values S.
# 
# 
--------------------------------------------------------------------------------
> assign(S);
# 
--------------------------------------------------------------------------------
> x;

   367       17    15    2129    14    163   13    7453    12    1293   11
  ---- %1 + ---- %1   - ------ %1   - ---- %1   - ------ %1   - ----- %1
  1838      1838        117632        7352        235264        29408

          727   10    6233   8   11563   6    2615   7   12329   4     67    16
       + ---- %1   - ----- %1  + ----- %1  - ----- %1  + ----- %1  + ----- %1
         7352        29408       58816       29408       14704       29408

          139   5    659   2    6599   9     255    18   1139           3
       + ---- %1  - ---- %1  + ----- %1  - ------ %1   + ---- + 2/919 %1
         7352       7352       58816       117632        1838

          1395    17
       - ------ %1
         235264

               19       16       15       14        13       12       11
%1 := RootOf(_Z   + 2 _Z   + 2 _Z   + 7 _Z   + 16 _Z   + 4 _Z   - 4 _Z

            10        8        7        4
     + 48 _Z   + 92 _Z  + 32 _Z  + 64 _Z  - 256)
--------------------------------------------------------------------------------
> y;

           19       16       15       14        13       12       11        10
  RootOf(_Z   + 2 _Z   + 2 _Z   + 7 _Z   + 16 _Z   + 4 _Z   - 4 _Z   + 48 _Z

              8        7        4
       + 92 _Z  + 32 _Z  + 64 _Z  - 256)
--------------------------------------------------------------------------------
# This has the side effect of changing the definitions of the functions f and g.
--------------------------------------------------------------------------------
> f;

   367       17    15    2129    14    163   13    7453    12    1293   11
 (---- %1 + ---- %1   - ------ %1   - ---- %1   - ------ %1   - ----- %1
  1838      1838        117632        7352        235264        29408

         727   10    6233   8   11563   6    2615   7   12329   4     67    16
      + ---- %1   - ----- %1  + ----- %1  - ----- %1  + ----- %1  + ----- %1
        7352        29408       58816       29408       14704       29408

         139   5    659   2    6599   9     255    18   1139           3
      + ---- %1  - ---- %1  + ----- %1  - ------ %1   + ---- + 2/919 %1
        7352       7352       58816       117632        1838

         1395    17          367       17    15    2129    14    163   13
      - ------ %1  )^4 - 2 (---- %1 + ---- %1   - ------ %1   - ---- %1
        235264              1838      1838        117632        7352

         7453    12    1293   11    727   10    6233   8   11563   6    2615   7
      - ------ %1   - ----- %1   + ---- %1   - ----- %1  + ----- %1  - ----- %1
        235264        29408        7352        29408       58816       29408

        12329   4     67    16    139   5    659   2    6599   9     255    18
      + ----- %1  + ----- %1   + ---- %1  - ---- %1  + ----- %1  - ------ %1
        14704       29408        7352       7352       58816       117632

        1139           3    1395    17    2     3
      + ---- + 2/919 %1  - ------ %1  ) %1  - %1  - 2
        1838               235264

               19       16       15       14        13       12       11
%1 := RootOf(_Z   + 2 _Z   + 2 _Z   + 7 _Z   + 16 _Z   + 4 _Z   - 4 _Z

            10        8        7        4
     + 48 _Z   + 92 _Z  + 32 _Z  + 64 _Z  - 256)
--------------------------------------------------------------------------------
# The values previously assigned to x and y are used in computing f(x,y).  If we want to use 
# the functions again we'll have to convert x and y back into variables.
--------------------------------------------------------------------------------
> X:=x:Y:=y:x:='x':y:='y':
--------------------------------------------------------------------------------
# The assigned values of x and y are saved in X and Y.  Then x and y are changed back into 
# variables.  To find explicit numerical values for the intersection points we can do the 
# folloeing.
--------------------------------------------------------------------------------
> allvalues(Y);

 -1.647432204,  - 1.337971368 - .8833243765 I,  - 1.337971368 + .8833243765 I,

     -1.057852433,  - .8832686595 - .7210045074 I,

      - .8832686595 + .7210045074 I,  - .2558788231 - 1.256358136 I,

      - .2558788231 + 1.256358136 I,  - .07576148742 - 1.477425325 I,

      - .07576148742 + 1.477425325 I, .05303535957 - 1.209109819 I,

     .05303535957 + 1.209109819 I, .8442838121 - .8587454679 I,

     .8442838121 + .8587454679 I, .9961067967, 1.242260568 - .9836072175 I,

     1.242260568 + .9836072175 I, 1.267889518 - .8320938192 I,

     1.267889518 + .8320938192 I
--------------------------------------------------------------------------------
# Notice that we get 19 values, which we expect since we are solving a degree 19 
# polynomial.  Only 3 of the roots are real; this agrees with our expectation that there are 
# only 3 real intersection points.  Let's give a name to the degree 19 polynomial.
--------------------------------------------------------------------------------
> p:=op(Y);

          19       16       15       14        13       12       11        10
   p := _Z   + 2 _Z   + 2 _Z   + 7 _Z   + 16 _Z   + 4 _Z   - 4 _Z   + 48 _Z

               8        7        4
        + 92 _Z  + 32 _Z  + 64 _Z  - 256
--------------------------------------------------------------------------------
> Yreal:=fsolve(p,_Z);

                Yreal := -1.647432204, -1.057852433, .9961067967
# 
--------------------------------------------------------------------------------
# To find the corresponding x values we substitute into the expression for X.
--------------------------------------------------------------------------------
> for k from 1 to 3 do Xreal[k]:=subs(%1=Yreal[k],X) od;

                              Xreal[1] := .46378423

                             Xreal[2] := 1.412154629

                             Xreal[3] := 1.572087242
--------------------------------------------------------------------------------
# This gives us our 3 real solutions.  We should verify that these are solutions by 
# substituting back into the original polynomials.
--------------------------------------------------------------------------------
> for k from 1 to 3 do print(Xreal[k],Yreal[k],subs(x=Xreal[k],y=Yreal[k],f),subs(x=Xreal[k],y=Yreal[k],g)) od;

                                                 -7          -6
                  .46378423, -1.647432204, .68*10  , -.131*10

                                                   -7       -8
                  1.412154629, -1.057852433, .13*10  , .8*10

                                                   -7        -8
                 1.572087242, .9961067967, -.102*10  , -.4*10