REDUCE 3.6, 15-Jul-95, patched to 6 Mar 96 ...
% randpoly.tst
% F.J.Wright@Maths.QMW.ac.uk, 14 July 1994
off allfac;
on div, errcont;
% Univariate:
% ----------
randpoly x;
5 4 3 2
- 68*x + 45*x - 13*x + 27*x + 54*x - 15
% Equivalent to above:
randpoly {x};
5 4 3 2
23*x - 83*x + 75*x - 89*x - 24*x + 54
randpoly(x, dense);
5 4 3 2
4*x + 17*x - 53*x + 53*x + 88*x - 12
% univariate default already dense
randpoly(x, degree=10, ord=5);
10 9 8 7 6 5
- 83*x + 28*x - 13*x - 65*x + 55*x - 26*x
% Bivariate:
% ---------
% Default is sparse
randpoly {x,y};
3 2 3 2 2
29*x *y + 12*x *y - 33*x *y - 64*x*y - 19*x - 13
randpoly({x,y}, dense);
5 4 4 3 2 3 3 2 3 2 2
- 12*x + 11*x *y - 26*x + 2*x *y + 69*x *y - 93*x + x *y - 93*x *y
2 2 4 3 2 5 4
+ 19*x *y + 95*x + 51*x*y + 68*x*y + 77*x*y + 25*x*y - 27*x + 63*y + 37*y
3 2
- 89*y - 76*y + 28*y - 67
randpoly({x,y}, degree=10);
10 7 6 2 8 2 5 9
19*x + 16*x + 86*x + 82*x *y - 62*x *y + 41*x*y
% Lots of terms:
randpoly({x,y}, dense, degree=10);
9 9 8 2 8 8 7 3 7 2 7
43*x *y + 67*x - 6*x *y - 11*x *y - 88*x - 87*x *y - 36*x *y + 27*x *y
7 6 4 6 3 6 2 6 6 5 5
- 56*x + 41*x *y + 52*x *y + 15*x *y + 84*x *y - 76*x - 59*x *y
5 4 5 3 5 2 5 5 4 6 4 5
+ 74*x *y + 90*x *y - 50*x *y - 35*x *y - 90*x - 51*x *y + 73*x *y
4 4 4 3 4 2 4 4 3 7 3 6
- 5*x *y + 34*x *y + 88*x *y + 87*x *y - 33*x - 41*x *y - 12*x *y
3 5 3 4 3 3 3 2 3 3 2 8
+ 29*x *y - 14*x *y - 35*x *y - 77*x *y + 21*x *y + 43*x - 73*x *y
2 7 2 6 2 5 2 4 2 3 2 2 2
- 55*x *y + 27*x *y - 41*x *y + 45*x *y - 25*x *y + 46*x *y - 95*x *y
2 9 8 7 6 5 4 3
+ 71*x - 70*x*y - 50*x*y + 93*x*y + 77*x*y + 98*x*y - 72*x*y - 84*x*y
2 10 9 8 7 6 5 4
- 39*x*y - 86*x*y - 22*x - 66*y + 31*y - 58*y + 60*y - 65*y - y - 71*y
3 2
+ 49*y + 91*y - 34*y + 49
randpoly({x,y}, dense, degree=10, ord=5);
10 9 9 8 2 8 8 7 3 7 2 7
55*x - 23*x *y - 33*x - 22*x *y - 94*x *y + x + 14*x *y + 85*x *y - 60*x
6 4 6 3 6 2 6 6 5 5 5 4
+ 60*x *y + 9*x *y - 27*x *y + 44*x *y + 43*x + 75*x *y + 10*x *y
5 3 5 2 5 5 4 6 4 5 4 4
+ 30*x *y - 48*x *y + 63*x *y - 65*x - 60*x *y - 75*x *y - 39*x *y
4 3 4 2 4 3 7 3 6 3 5 3 4
+ 34*x *y - 52*x *y - 41*x *y + 86*x *y - 65*x *y - 44*x *y + 40*x *y
3 3 3 2 2 8 2 7 2 6 2 5 2 4
+ 67*x *y - 84*x *y + 45*x *y - 36*x *y + 32*x *y - 85*x *y - 53*x *y
2 3 9 7 6 5 10 9 8
+ 7*x *y - 10*x*y + 19*x*y + 22*x*y + 32*x*y - 38*y - 24*y - 93*y
7 6 5
+ 25*y + 53*y + 83*y
% Sparse:
randpoly({x,y}, deg=10, ord=5);
8 7 2 3 4 3 3 2 8 9
- 68*x *y - 31*x *y + x *y + 8*x *y + 72*x *y - 3*y
% Dense again:
randpoly({x,y}, terms=1000, maxdeg=10, mindeg=5);
10 9 9 8 2 8 8 7 3 7 2
41*x + 31*x *y + 59*x - 83*x *y - 30*x *y + 21*x + 82*x *y + 74*x *y
7 7 6 4 6 3 6 2 6 6 5 5
- 21*x *y - 74*x - 80*x *y + 61*x *y + 4*x *y - 81*x *y + 14*x - 91*x *y
5 4 5 3 5 2 5 5 4 5 4 4
+ 61*x *y - 61*x *y + 21*x *y - 60*x *y + 26*x + 73*x *y - 41*x *y
4 3 4 2 4 3 7 3 6 3 5 3 4
+ 26*x *y - x *y - 28*x *y + 42*x *y + 20*x *y - 50*x *y - 41*x *y
3 3 3 2 2 8 2 7 2 6 2 5 2 4
+ 91*x *y - 39*x *y - 36*x *y - 24*x *y + 85*x *y + 39*x *y - 48*x *y
2 3 9 8 7 6 5 4 10
+ 3*x *y - 50*x*y + 87*x*y - 78*x*y + 64*x*y - 87*x*y - 65*x*y - 52*y
9 8 7 6 5
- 30*y - 88*y + 24*y + 7*y - 54*y
% Exponent and coefficient functions:
% ----------------------------------
randpoly({x,y}, expons = rand(-10 .. 10));
4 -7 -1 -2 -4 3 -4 -5
- 70*x *y - 61*x*y - 87*x *y + 26*x + 9*x *y + 16*x *y
% Trivial example:
randpoly({x,y}, expons = proc 5);
5 5
69*x *y
randpoly({x,y}, expons = proc(2*random(0 .. 5)));
10 10 6 6 6 4 4 10 4
21*x *y + 77*x *y + 50*x *y + 123*x *y + 73*x
randpoly({x,y}, coeffs = rand(-999 .. 999));
3 2 2 4 2 3
58*x *y - 723*x *y + 113*x - 200*x*y + 61*x*y + 311*y
procedure coe; randpoly(a, terms=2)$
randpoly({x,y}, coeffs = coe);
4 3 2 4 3 4 2 4 2 4 5 4 4
97*a *x *y + 97*a *x *y + 97*a *x *y + 97*a *x*y + 97*a *y + 97*a *y
2 3 2 2 3 2 2 2 2 2 5 2 4
- 85*a *x *y - 85*a *x *y - 85*a *x *y - 85*a *x*y - 85*a *y - 85*a *y
randpoly({x,y}, coeffs = coe, degree = 10);
5 6 2 5 5 5 5 5 2 5 4 6 5 4 5 6
- 44*a *x *y - 44*a *x *y - 44*a *x *y - 44*a *x *y - 44*a *x - 44*a *y
3 6 2 3 5 5 3 5 2 3 4 6 3 4 3 6
+ 33*a *x *y + 33*a *x *y + 33*a *x *y + 33*a *x *y + 33*a *x + 33*a *y
% Polynomials composed with general expressions:
% ---------------------------------------------
randpoly({x,y^2});
4 2 4 2 6 4 2 2
43*x *y - 45*x + 83*x *y - 24*x*y + 73*x*y + 36*y
randpoly(x^2 - y^2);
10 8 2 8 6 4 6 2 6 4 6
- 44*x + 220*x *y + 92*x - 440*x *y - 368*x *y - 48*x + 440*x *y
4 4 4 2 4 2 8 2 6 2 4 2 2
+ 552*x *y + 144*x *y + 42*x - 220*x *y - 368*x *y - 144*x *y - 84*x *y
2 10 8 6 4 2
+ 52*x + 44*y + 92*y + 48*y + 42*y - 52*y + 30
% This should give the constant term:
sub(x=y, ws);
30
randpoly({x^2 - a^2, y - b});
6 6 4 2 4 2 4 4 2 4 2
63*a *b - 63*a *y + 4*a *b - 189*a *b*x - 8*a *b*y + 189*a *x *y + 4*a *y
4 2 4 2 3 2 2 2 2 2 2 2 4
+ 50*a + 48*a *b - 192*a *b *y - 8*a *b *x + 288*a *b *y + 189*a *b*x
2 2 2 3 2 2 4 2 2 2 2 2
+ 16*a *b*x *y - 192*a *b*y + 59*a *b - 189*a *x *y - 8*a *x *y - 100*a *x
2 4 2 4 2 3 2 3 2 4 2 2 2
+ 48*a *y - 59*a *y - 48*b *x + 192*b *x *y - 42*b + 4*b *x - 288*b *x *y
2 6 4 2 3 2 2 6
+ 126*b *y - 63*b*x - 8*b*x *y + 192*b*x *y - 59*b*x - 126*b*y + 63*x *y
4 2 4 2 4 2 3
+ 4*x *y + 50*x - 48*x *y + 59*x *y + 42*y
% This should give the constant term:
sub(x=a, y=b, ws);
0
% Polynomials with specified zeros:
% --------------------------------
randpoly(x = a);
5 4 4 3 2 3 3 2 3 2 2
32*a - 160*a *x - 12*a + 320*a *x + 48*a *x - 31*a - 320*a *x - 72*a *x
2 2 4 3 2 5
+ 93*a *x + 87*a + 160*a*x + 48*a*x - 93*a*x - 174*a*x - 31*a - 32*x
4 3 2
- 12*x + 31*x + 87*x + 31*x
% This should give 0:
sub(x=a, ws);
0
randpoly({x = a, y = b});
3 2 3 3 2 3 2 3 2 2 2 2
- 24*a *b + 48*a *b*y - 24*a *y - 26*a + 92*a *b + 72*a *b *x - 276*a *b *y
2 2 2 2 2 2 2 3 2 4
- 144*a *b*x*y + 276*a *b*y + 72*a *x*y + 78*a *x - 92*a *y - 43*a - a*b
3 3 2 2 2 2 2 2
- 184*a*b *x + 4*a*b *y - 72*a*b *x + 552*a*b *x*y - 6*a*b *y + 144*a*b*x *y
2 3 2 2 2 3 4
- 552*a*b*x*y + 4*a*b*y - 72*a*x *y - 78*a*x + 184*a*x*y + 86*a*x - a*y
4 3 2 3 2 3 2 2 2 2
+ 24*a + b *x + 92*b *x - 4*b *x*y + 24*b *x - 276*b *x *y + 6*b *x*y
3 2 2 3 3 2 3 2 3 2
- 48*b*x *y + 276*b*x *y - 4*b*x*y + 24*x *y + 26*x - 92*x *y - 43*x
4
+ x*y - 24*x
% This should give 0:
sub(x=a, y=b, ws);
0
% Invalid input detection:
% -----------------------
randpoly({x,y}, degree=foo);
***** degree=foo invalid as optional randpoly argument
randpoly({x,y}, foo);
***** foo invalid as optional randpoly argument
randpoly({x,y}, degree=-5);
***** degree=-5 invalid as optional randpoly argument
on allfac;
off div, errcont;
end;
(TIME: randpoly 300 300)