% Supplement to the paper
% About the Polynomial System Solve Facility of Axiom, Macsyma,
% Maple, Mathematica, MuPAD, and Reduce
% H.-G. Graebe | Univ. Leipzig


% ####################################
%	Some useful code
% ####################################

Axiom:

)set message time on
numsolve1(polys) == complexSolve(polys,0.0001); 
numsolve2(sol) == concat([complexSolve(u,0.0001) for u in sol]);
resubst(sol,polys) == [[subst(u,v) for u in polys] for v in sol];

Macsyma:

showtime:true$
display2d:false$

resubst(sol,polys):=
map(lambda([elem],ratsimp(subst(elem,polys))),sol)$


Maple:

tt:=time();
sol:=[solve(polys,vars)];
time()-tt;
nops(sol);
lprint(sol);

expandsol := proc(sol) map(allvalues,sol,dependent) end;
numsolve2 := proc(sol) map(evalf,expandsol(sol)) end;
resubst:=proc(sol,polys) map(simplify@subs,sol,polys) end;

Mathematica:

eqn[n_List]:=(n==Table[0,{Length[n]}])
time:=res[[1]]
numsolve1[polys_]:=NSolve[eqn[polys],vars]//Timing
numsolve2[sol_]:=sol//N//Timing
resubst[sol_,polys_]:=polys/.sol//Simplify
res=Solve[eqn[polys],vars]//Timing
sol=res[[2]]
sol//InputForm

procedure sol2eqns(sol);
  for each a in sol collect for each b in a collect (lhs b - rhs b);

MuPAD:

tt:=time((sol:=solve(polys,vars))); sol;
tt:=time((sol1:=numsolve1(polys,vars))); nops(sol1);
tt:=time((sol2:=map(sol,op@allvalues))); nops(sol2);

numsolve1:=proc(polys,vars) begin float(hold(solve)(polys,vars))
end_proc;

mysubs:=proc(a,b) begin simplify(subs(b,op(a))) end_proc;
resubst:=proc(sol,polys) begin map(sol,mysubs,polys) end_proc;

Reduce:

off nat; on time;

procedure sol2eqns(sol); 
  for each a in sol collect for each b in a collect (lhs b - rhs b);

procedure numsolve1(); 
	<< on rounded; write solve(polys,vars); off rounded; >>;

procedure numsolve2(); 
	<< on rounded; 
	write for each x in expand_cases(sol) collect sub(x,x);
	off rounded; >>;

procedure resubst(sol,polys); 
	for each u in sol collect sub(u,sub(u,polys));


% ####################################
%	A first example (Arn 4)
% ####################################

vars:={w,x,y,z};

polys:={w + x + y + z,
w*z + w*x + x*y + y*z,
x*w*z + w*y*z + w*x*y +
x*y*z,w*x*y*z - 1};

% ####################################
%	zero dimensional examples
% ####################################

% Ex 1:

vars:={x,y,z};

polys:={x^2 + y + z - 3,x + y^2 + z - 3,x + y + z^2 - 3};

% -----------

% Ex 2:

vars:={x,y};

polys:={x^4+x+1,y^4+x+1};

% -----------

% Ex 3:

vars:={u0,u1,u2,u3};

polys:={u0+2*u1+2*u2+2*u3-1, u0^2+2*u1^2+2*u2^2+2*u3^2-u0,
2*u0*u1+2*u1*u2+2*u2*u3-u1, 2*u0*u2+u1^2+2*u1*u3-u2};

% -----------

% Ex 4:

vars:={x,y,z};

polys:={x^3 + y + z - 3,x + y^3 + z - 3,x + y + z^3 - 3};

% -----------

% Ex 5:

vars:={v, w, x, y, z};

polys:={v + w + x + y + z, 
v*w + v*z + w*x + x*y + y*z,
v*w*x + v*w*z + v*y*z + w*x*y + x*y*z,
v*w*x*y + v*w*x*z + v*w*y*z + v*x*y*z + w*x*y*z,
v*w*x*y*z - 1};

% -----------

% Ex 6:

vars:={x,y,z};

polys:={x^3 + y^2 + z - 3,x + y^3 + z^2 - 3,x^2 + y + z^3 - 3};

% -----------

% Ex 7:

vars:={u0,u1,u2,u3,u4};

polys:={u0+2*u1+2*u2+2*u3+2*u4-1,
u0^2+2*u1^2+2*u2^2+2*u3^2+2*u4^2-u0,
2*u0*u1+2*u1*u2+2*u2*u3+2*u3*u4-u1,
2*u0*u2+u1^2+2*u1*u3+2*u2*u4-u2,
2*u0*u3+2*u1*u2+2*u1*u4-u3};

% #################################################
%	zero dimensional examples with parameters
% #################################################

vars:={x,y};

polys:={a*x+y-1, x+a*y-1};

% ----------- parametric A4, pars:={z};

% Ex 8:

vars:={w,x,y}; 

polys:={w + x + y + z,
w*z + w*x + x*y + y*z,
x*w*z + w*y*z + w*x*y + x*y*z,
w*x*y*z - 1};

% ----------- [BGK,example 6], pars:={a,u,v,w};

% Ex 9:

vars:={x,y,z,t}; 

polys:= {t-(a-v), x+y+z+t-(u+w+a), x*z+x*t+y*z+z*t-(u*a+u*w+w*a),
x*z*t-(u*w*a)};

% ----------- The ROMIN 3R-robot [glopez,recio], pars:={a,b,c,l1,l2};

% Ex 10:

vars:={s1,s2,s3,c1,c2,c3,d}; 

polys:={a + d*s1, - b + c1*d, c2*l2 + c3*l3 - d, - c + l2*s2 + l3*s3,
c1^2 + s1^2 - 1, c2^2 + s2^2 - 1, c3^2 + s3^2 - 1};


% ##############################
%	Arbitrary systems
% ##############################

% Ex E1: Computing the extrema of f(x,y)=x^3*y^2*(6-x-y)

vars:={x,y};

m := {x^2*y^2*( - 4*x - 3*y + 18), x^3*y*( - 2*x - 3*y + 12)};

% ----------- 

% Ex G1: Gerdt et al. [6, (4)] : Seventh order KdV type equation.

vars:= {l7, l6, l5, l4, l3, l2, l1};

polys:= {l1*(2*l4 - l5 + 2*l6), 
 - 20*l1^3 + 10*l1^2*l2 - 2*l1^2*l3 + 70*l1*l4 - 35*l2*l4 + 7*l3*l4,
 6*l1^2*l4 - 2*l1^2*l5 + 2*l1^2*l6 - 21*l4^2 + 7*l4*l5 - 7*l4*l6,
 15*l1^3 - 7*l1^2*l2 - 6*l1^2*l3 + 5*l1*l2^2 + 4*l1*l2*l3 - 42*l1*l4 +
21* l1*l5 - 63*l1*l6 - 2*l2^3 - 14*l2*l5 + 42*l2*l6 + 147*l7, 
 - 135*l1^4 + 45*l1^3*l2 - 9*l1^3*l3 + 602*l1^2*l4 + 28*l1^2*l5 -
196*l1*l2*l4 - 14*l1*l2*l5 + 70*l1*l3*l4 - 28*l1*l3*l5 - 2205*l1*l7 -
14*l2^2*l4 + 14*l2^2*l5 + 735*l2*l7 - 147*l3*l7 - 98*l4*l5 + 294*l4*l6
+ 98*l5^2 - 294*l5*l6,
 36*l1^3*l4 - 9*l1^3*l5 + 6*l1^3*l6 - 28*l1^2*l7 + 14*l1*l2*l7 +
28*l1*l3*l7 - 168*l1*l4^2 + 42*l1*l4*l5 - 28*l1*l4*l6 - 14*l2^2*l7 +
588*l4*l7 - 245*l5*l7 + 392*l6*l7,
 l1*( - 5*l1^2 + 13*l1*l2 - l1*l3 - 6*l2^2 + 2*l2*l3 - 28*l4 + 14*l6),
 l1*(5*l1*l3 - 3*l2*l3 + l3^2 - 28*l4 + 14*l6),
 2*l1*(11*l1*l4 - 5*l1*l5 - 8*l1*l6 - l2*l4 + 3*l2*l5 + 2*l2*l6 -
l3*l4 - l3*l5 + 21*l7),
 4*l1*( - 33*l1*l4 + 10*l1*l5 + 39*l1*l6 + 17*l2*l4 - 6*l2*l5 -
22*l2*l6 - 5*l3*l4 + 2*l3*l5 + 7*l3*l6 - 63*l7),
 l1*(15*l1*l7 - 30*l2*l7 + 12*l3*l7 - 20*l4^2 + 8*l4*l5 + 10*l4*l6 -
4*l5*l6),
 l1*( - 6*l1*l7 + 12*l2*l7 - 6*l3*l7 + 4*l4^2 - 2*l4*l5 + 2*l4*l6 +
l5*l6 - 2*l6^2),
 4*l1*l7*(2*l4 - l5 + 2*l6)};

% ----------- 

% Ex G6: Gerdt et al. [6, (8)] : Two coupled non linear eq's of KdV type.
%       Dort t=L1 ,x=L5 ,y=L3 ,z=L4 

vars:={t,x,y,z};

polys:={
 -2*z^3*t+(3*z^2*t-2*z^2-6*z*y*t+6*z*y+6*y^2*t-6*y^2)*x-z*t*x^2,
18*z^3*t^2-9*z^3*t-18*z^2*y*t^2+18*z^2*y*t+18*z*y^2*t^2-18*z*y^2*t+
        (-27*z^2*t^2+24*z^2*t-5*z^2+63*z*y*t^2-78*z*y*t+15*z*y-63*y^2*t^2+
        78*y^2*t-15*y^2)*x+9*z*t^2*x^2,
-8*z^4*t+(6*z^3*t-6*z^3-12*z^2*y*t+12*z^2*y+12*z*y^2*t-12*z*y^2)*x+
        (5*z^2*t-4*z^2-18*z*y*t+18*z*y+18*y^2*t-18*y^2)*x^2-3*z*t*x^3,
(3t-5)*z^2*y-15*(t-1)*z*y^2+10*(t-1)*y^3+(z*y+3*y^2*t-3*y^2)*x-y*t*x^2};

% ----------- 

% Ex Go: Gonnet, ACM SIGSAM Bulletin 17 (1983), 48 - 49
%	homogenized with a1 ( original : a1=1)

vars:={a0,a1,a2,a3,a4,a5,b0,b1,b2,b3,b4,b5,c0,c1,c2,c3,c4,c5};

polys:={a4*b4, a5*b1+a1*b5+a4*b3+a3*b4, a2*b2,a5*b5,
(a0+a1+a4)*b2+a2*(b0+b1+b4)+c2,
(a0+a1+a4)*(b0+b1+b4)+(a3+a5)*b2+a2*(b3+b5)+c0+c1+c4,
(a3+a5)*(b0+b1+b4)+(b3+b5)*(a0+a1+a4)+c3+c5-a1^2,
(a3+a5)*(b3+b5), a5*(b3+b5)+b5*(a3+a5),
b5*(a0+a1+2*a4)+a5*(b0+b1+2*b4)+a3*b4+a4*b3+c5,
a4*(b0+b1+2*b4)+a2*b5+a5*b2+(a0+a1)*b4+c4,
a2*b4+a4*b2, a4*b5+a5*b4, 2*a3*b3+a3*b5+a5*b3,
c3+b3*(a0+2*a1+a4)+a3*(b0+2*b1+b4)+a1*b5+a5*b1,
c1+(a0+2*a1+a4)*b1+a2*b3+a3*b2+a1*(b0+b4),
a2*b1+a1*b2, a5*b3+a3*b5, a1*b4+a4*b1};

% ----------- 

% Ex Kri:

comment 

Subject: Polynomial Equations 
Date: Sat, 01 Jun 1996 23:09:19 -0700 
From: "Elizabeth S. Krider" <ekrider@cco.caltech.edu>
	241, S., Wilson, Ave, #103, Pasadena, CA, 91106
Organization: California Institute of Technology, Pasadena 
Newsgroups: sci.math.symbolic

end comment;

PM0 := -6*c*g^2*u*p*v^5-2*(2*c*d+a+b*d+b+c*d^2+w*b*f-w+2
*w*c*d*f+2*w*c*f+w^2*b*g+2*w^2*c*g+2*w^2*c*d*g+w^2*c*f^2+2*w
^3*c*f*g+c*g^2*w^4)*u*p*v-2*(b*g+2*c*g+2*c*d*g+c*f^2+6*w
*c*f*g+6*c*g^2*w^2)*u*p*v^3-2*c*u^3*p*v;

PM1 := -6*c*g*(2*f+5*g*w)*u*p*v^5-2*(2*c*d+a+b*d+b+c*d^2+
w*b*f-w+2*w*c*d*f+2*w*c*f+w^2*b*g+2*w^2*c*g+2*w^2*c*d*g+w^2
*c*f^2+2*w^3*c*f*g+c*g^2*w^4)*w*u*p*v-2*(b*f-1+2*c*d*f+
2*c*f+3*w*b*g+6*w*c*g+6*w*c*d*g+3*w*c*f^2+12*w^2*c*f*g+10*c*g^
2*w^3)*u*p*v^3-2*w*c*u^3*p*v;

PM2 := -6*(b*g+2*c*g+2*c*d*g+c*f^2+10*w*c*f*g+15*c*g^2*w^2)*
u*p*v^5-2*(2*c*d+a+b*d+b+c*d^2+w*b*f-w+2*w*c*d*f+2*w*c*f+w
^2*b*g+2*w^2*c*g+2*w^2*c*d*g+w^2*c*f^2+2*w^3*c*f*g+c*g^2*w^4)*
w^2*u*p*v-2*(a+b-3*w+6*w*c*f+15*c*g^2*w^4+6*w^2*c*f^2
+12*w^2*c*g+6*w^2*b*g+3*w*b*f+12*w^2*c*d*g+20*w^3*c*f*g+6*w*c
*d*f+b*d+c*d^2+2*c*d)*u*p*v^3-30*c*g^2*u*p*v^7-2*
w^2*c*u^3*p*v-2*c*u^3*p*v^3;

ME0 := -6*c*g^2*u*p*v^5-2*(a+b*d+c*d^2-w+w*b*f+2*w*c*d*
f+w^2*b*g+2*w^2*c*d*g+w^2*c*f^2+2*w^3*c*f*g+c*g^2*w^4)*u*
p*v-2*(b*g+2*c*d*g+c*f^2+6*w*c*f*g+6*c*g^2*w^2)*u*p*
v^3-2*c*u^3*p*v;

ME1 := -6*g*(b*g+3*c*d*g+3*c*f^2+15*w*c*f*g+15*c*g^2*w^2)*u*
p*v^5-2*(a+b*d+c*d^2-w+w*b*f+2*w*c*d*f+w^2*b*g+2*w^2*c*d*
g+w^2*c*f^2+2*w^3*c*f*g+c*g^2*w^4)*(d+f*w+g*w^2)*u*p*
v-2*(-f-3*g*w+3*c*d*f^2+3*w*c*f^3+18*w^2*c*d*g^2+30*w^3*c*f
*g^2+6*g*w*b*f+18*g*w*c*d*f+18*g*w^2*c*f^2+g*a+b*f^2+6*w^2*b*g^
2+15*c*g^3*w^4+2*g*b*d+3*g*c*d^2)*u*p*v^3-30*c*g^3*u*
p*v^7-2*(b+3*c*d+3*w*c*f+3*w^2*c*g)*u^3*p*v-6*c*g*
u^3*p*v^3;

ME2 := -2*(a+b*d+c*d^2-w+w*b*f+2*w*c*d*f+w^2*b*g+2*w^2*c*d*g+
w^2*c*f^2+2*w^3*c*f*g+c*g^2*w^4)*(d+f*w+g*w^2)^2*u*p*
v-2*(-6*w*g*d+120*w^3*c*d*f*g^2+12*w*c*d*f^3+60*w^4*c*d*g^3
+40*w^3*c*f^3*g+90*w^4*c*f^2*g^2+84*w^5*c*f*g^3+6*a*g*f*w+18*b*
d*g*f*w+18*b*d*g^2*w^2+36*c*d^2*g*f*w+36*c*d^2*g^2*w^2+18*w^2*
b*f^2*g+30*w^3*b*f*g^2+72*w^2*c*d*f^2*g+a*f^2-10*g^2*w^3-3*w*f^
2-2*d*f+3*b*d^2*g+3*b*d*f^2+4*c*d^3*g+6*c*d^2*f^2-12*g*f*w^2+3*w*
b*f^3+15*w^4*b*g^3+6*w^2*c*f^4+28*c*g^4*w^6+2*a*g*d+6*a*g^2*w^2
)*u*p*v^3-6*(12*g*c*d*f^2+20*g*w*c*f^3+15*g^2*w*b*f+60*g
^2*w*c*d*f+60*g^3*w^2*c*d+90*g^2*w^2*c*f^2+140*g^3*w^3*c*f+g^2*
a-5*g^2*w-2*g*f+c*f^4+3*g^2*b*d+6*g^2*c*d^2+15*g^3*w^2*b+70*g^4*c
*w^4+3*g*b*f^2)*u*p*v^5-210*c*g^4*u*p*v^9-30*g^2*
(b*g+4*c*d*g+6*c*f^2+28*w*c*f*g+28*c*g^2*w^2)*u*p*v^7-
2*(a+3*b*d+6*c*d^2-w+3*w*b*f+12*w*c*d*f+3*w^2*b*g+12*w^2*c*d*g+
6*w^2*c*f^2+12*w^3*c*f*g+6*c*g^2*w^4)*u^3*p*v-6*(b*g+4*
c*d*g+2*c*f^2+12*w*c*f*g+12*c*g^2*w^2)*u^3*p*v^3-36*c*g^
2*u^3*p*v^5-6*c*u^5*p*v;

vars:={a,b,c,d,f,g,u,v,w,p};

polys:={PM0,PM1,PM2,ME0,ME1,ME2};

% ----------- 

% Ex G7: Gerdt, Zharkov [2]. The only ex ( eq's (6) )

vars:={a2,b2,a4,b4,a1,b1,a3,b3,a0,b0};

polys:={
 a1*a3 - a1*a4 - a4*b3 + a4*b4,
 2*a0*a1^2*a3 - a0*a1^2*a4 - a0*a1*a2*b2 - 6*a0*a2*b2*b3 +
12*a0*a3^2*b2 - 4*a0*a3*a4*b2 - a0*a4^2*b2 - a0*a4*b1*b2 -
2*a1^2*a3*b0 + a1^2*a4*b0 + a1*a2*b0*b2 - 2*a3*a4*b0*b2 + a4^2*b0*b2
+ a4*b0*b1*b2,
 a0*a1^2*a2 - 2*a0*a1*a2*b3 + a0*a1*a2*b4 + 6*a0*a2*a3*b2 +
a0*a2*a4*b2 - 12*a0*a2*b3^2 + 6*a0*a2*b3*b4 - 2*a0*a4*b1*b3 +
a0*a4*b1*b4 - a1^2*a2*b0 + 2*a1*a2*b0*b3 - a1*a2*b0*b4 - a2*a4*b0*b2
+ 2*a4*b0*b1*b3 - a4*b0*b1*b4,
 a0*a1*a4 + 3*a0*a2*b2 + 3*a0*a3*b3 + a0*a4*b3 - a1*a4*b0 - a4*b0*b3,
 5*a0^2*a1*a3 - 5*a0^2*a1*a4 - 6*a0^2*a2*b2 + 4*a0^2*a3*b3 +
8*a0^2*a3*b4 - 7*a0^2*a4*b3 + a0^2*a4*b4 - 10*a0*a1*a3*b0 +
10*a0*a1*a4*b0 - 12*a0*a2*b0*b2 + 16*a0*a3*b0*b3 - 10*a0*a3*b0*b4 +
8*a0*a4*b0*b3 - 2*a0*a4*b0*b4 + 5*a1*a3*b0^2 - 5*a1*a4*b0^2 -
2*a3*b0^2*b3 + 2*a3*b0^2*b4 - a4*b0^2*b3 + a4*b0^2*b4,
 3*a0^4*a1*a3 - 4*a0^4*a1*a4 - 6*a0^4*a2*b2 - 6*a0^4*a3*b3 -
9*a0^4*a3* b4 - 2*a0^4*a4*b3 + 9*a0^4*a4*b4 - 9*a0^3*a1*a3*b0 +
10*a0^3*a1*a4*b0 - 45*a0^3*a2*b0*b2 - 45*a0^3*a3*b0*b3 -
9*a0^3*a3*b0*b4 + 32*a0^3*a4*b0*b3 - 18*a0^3*a4*b0*b4 +
9*a0^2*a1*a3*b0^2 - 6*a0^2*a1*a4*b0^2 - 27*a0^2*a2*b0^2*b2 -
27*a0^2*a3*b0^2*b3 + 18*a0^2*a3*b0^2*b4 - 30*a0^2*a4*b0^2*b3 +
9*a0^2*a4*b0^2*b4 - 3*a0*a1*a3*b0^3 - 2*a0*a1*a4*b0^3 -
3*a0*a2*b0^3*b2 - 3*a0*a3*b0^3*b3 - a0*a4*b0^3*b3 + 2*a1*a4*b0^4 +
a4*b0^4*b3,
 - a3*b4 + a4*b4 + b1*b3 - b1*b4,
 a0*a1*a2*b4 + a0*a2*b1*b2 - 2*a0*a2*b3*b4 + a0*a2*b4^2 - 2*a0*b1^2*b3
+ a0*b1^2*b4 - a1*a2*b0*b4 - 6*a2*a3*b0*b2 - a2*b0*b1*b2 +
12*a2*b0*b3^2 - 4*a2*b0*b3*b4 - a2*b0*b4^2 + 2*b0*b1^2*b3 -
b0*b1^2*b4,
 2*a0*a1*a3*b4 - a0*a1*a4*b4 - a0*a2*b2*b4 + 2*a0*a3*b1*b2 -
a0*a4*b1*b2 - a0*b1^2*b2 - 2*a1*a3*b0*b4 + a1*a4*b0*b4 + 6*a2*b0*b2*b3
+ a2*b0*b2*b4 - 12*a3^2*b0*b2 + 6*a3*a4*b0*b2 - 2*a3*b0*b1*b2 +
a4*b0*b1*b2 + b0*b1^2*b2,
 - a0*a3*b4 - a0*b1*b4 + 3*a2*b0*b2 + 3*a3*b0*b3 + a3*b0*b4 +
b0*b1*b4,
 - 2*a0^2*a3*b3 - a0^2*a3*b4 + 2*a0^2*a4*b3 + a0^2*a4*b4 +
5*a0^2*b1*b3 - 5*a0^2*b1*b4 - 12*a0*a2*b0*b2 + 16*a0*a3*b0*b3 +
8*a0*a3*b0*b4 - 10*a0*a4*b0*b3 - 2*a0*a4*b0*b4 - 10*a0*b0*b1*b3 +
10*a0*b0*b1*b4 - 6*a2*b0^2*b2 + 4*a3*b0^2*b3 - 7*a3*b0^2*b4 +
8*a4*b0^2*b3 + a4*b0^2*b4 + 5*b0^2*b1*b3 - 5*b0^2*b1*b4,
 a0^4*a3*b4 + 2*a0^4*b1*b4 - 3*a0^3*a2*b0*b2 - 3*a0^3*a3*b0*b3 -
a0^3*a3*b0*b4 - 3*a0^3*b0*b1*b3 - 2*a0^3*b0*b1*b4 - 27*a0^2*a2*b0^2*b2
- 27*a0^2*a3*b0^2*b3 - 30*a0^2*a3*b0^2*b4 + 18*a0^2*a4*b0^2*b3 +
9*a0^2*a4*b0^2*b4 + 9*a0^2*b0^2*b1*b3 - 6*a0^2*b0^2*b1*b4 -
45*a0*a2*b0^3*b2 - 45*a0*a3*b0^3*b3 + 32*a0*a3*b0^3*b4 -
9*a0*a4*b0^3*b3 - 18*a0*a4*b0^3*b4 - 9*a0*b0^3*b1*b3 +
10*a0*b0^3*b1*b4 - 6*a2*b0^4*b2 - 6*a3*b0^4*b3 - 2*a3*b0^4*b4 -
9*a4*b0^4*b3 + 9*a4*b0^4*b4 + 3*b0^4*b1*b3 - 4*b0^4*b1*b4};
