1% randpoly.tst
2
3% F.J.Wright@Maths.QMW.ac.uk, 14 July 1994
4
5off allfac;
6
7  on div, errcont;
8
9
10
11% Univariate:
12% ----------
13randpoly x;
14
15
16       5       4       3       2
17 - 68*x  + 45*x  - 13*x  + 27*x  + 54*x - 15
18
19% Equivalent to above:
20randpoly {x};
21
22
23    5       4       3       2
2423*x  - 83*x  + 75*x  - 89*x  - 24*x + 54
25
26randpoly(x, dense);
27
28
29   5       4       3       2
304*x  + 17*x  - 53*x  + 53*x  + 88*x - 12
31  % univariate default already dense
32randpoly(x, degree=10, ord=5);
33
34
35       10       9       8       7       6       5
36 - 83*x   + 28*x  - 13*x  - 65*x  + 55*x  - 26*x
37
38
39% Bivariate:
40% ---------
41% Default is sparse
42randpoly {x,y};
43
44
45    3  2       3         2           2
4629*x *y  + 12*x *y - 33*x *y - 64*x*y  - 19*x - 13
47
48randpoly({x,y}, dense);
49
50
51       5       4         4      3  2       3         3    2  3       2  2
52 - 12*x  + 11*x *y - 26*x  + 2*x *y  + 69*x *y - 93*x  + x *y  - 93*x *y
53
54       2         2         4         3         2                       5       4
55 + 19*x *y + 95*x  + 51*x*y  + 68*x*y  + 77*x*y  + 25*x*y - 27*x + 63*y  + 37*y
56
57       3       2
58 - 89*y  - 76*y  + 28*y - 67
59
60randpoly({x,y}, degree=10);
61
62
63    10       7       6       2  8       2  5         9
6419*x   + 16*x  + 86*x  + 82*x *y  - 62*x *y  + 41*x*y
65
66% Lots of terms:
67randpoly({x,y}, dense, degree=10);
68
69
70    9         9      8  2       8         8       7  3       7  2       7
7143*x *y + 67*x  - 6*x *y  - 11*x *y - 88*x  - 87*x *y  - 36*x *y  + 27*x *y
72
73       7       6  4       6  3       6  2       6         6       5  5
74 - 56*x  + 41*x *y  + 52*x *y  + 15*x *y  + 84*x *y - 76*x  - 59*x *y
75
76       5  4       5  3       5  2       5         5       4  6       4  5
77 + 74*x *y  + 90*x *y  - 50*x *y  - 35*x *y - 90*x  - 51*x *y  + 73*x *y
78
79      4  4       4  3       4  2       4         4       3  7       3  6
80 - 5*x *y  + 34*x *y  + 88*x *y  + 87*x *y - 33*x  - 41*x *y  - 12*x *y
81
82       3  5       3  4       3  3       3  2       3         3       2  8
83 + 29*x *y  - 14*x *y  - 35*x *y  - 77*x *y  + 21*x *y + 43*x  - 73*x *y
84
85       2  7       2  6       2  5       2  4       2  3       2  2       2
86 - 55*x *y  + 27*x *y  - 41*x *y  + 45*x *y  - 25*x *y  + 46*x *y  - 95*x *y
87
88       2         9         8         7         6         5         4         3
89 + 71*x  - 70*x*y  - 50*x*y  + 93*x*y  + 77*x*y  + 98*x*y  - 72*x*y  - 84*x*y
90
91         2                       10       9       8       7       6    5       4
92 - 39*x*y  - 86*x*y - 22*x - 66*y   + 31*y  - 58*y  + 60*y  - 65*y  - y  - 71*y
93
94       3       2
95 + 49*y  + 91*y  - 34*y + 49
96
97randpoly({x,y}, dense, degree=10, ord=5);
98
99
100    10       9         9       8  2       8      8       7  3       7  2       7
10155*x   - 23*x *y - 33*x  - 22*x *y  - 94*x *y + x  + 14*x *y  + 85*x *y  - 60*x
102
103       6  4      6  3       6  2       6         6       5  5       5  4
104 + 60*x *y  + 9*x *y  - 27*x *y  + 44*x *y + 43*x  + 75*x *y  + 10*x *y
105
106       5  3       5  2       5         5       4  6       4  5       4  4
107 + 30*x *y  - 48*x *y  + 63*x *y - 65*x  - 60*x *y  - 75*x *y  - 39*x *y
108
109       4  3       4  2       4         3  7       3  6       3  5       3  4
110 + 34*x *y  - 52*x *y  - 41*x *y + 86*x *y  - 65*x *y  - 44*x *y  + 40*x *y
111
112       3  3       3  2       2  8       2  7       2  6       2  5       2  4
113 + 67*x *y  - 84*x *y  + 45*x *y  - 36*x *y  + 32*x *y  - 85*x *y  - 53*x *y
114
115      2  3         9         7         6         5       10       9       8
116 + 7*x *y  - 10*x*y  + 19*x*y  + 22*x*y  + 32*x*y  - 38*y   - 24*y  - 93*y
117
118       7       6       5
119 + 25*y  + 53*y  + 83*y
120
121% Sparse:
122randpoly({x,y}, deg=10, ord=5);
123
124
125       8         7  2    3  4      3  3       2  8      9
126 - 68*x *y - 31*x *y  + x *y  + 8*x *y  + 72*x *y  - 3*y
127
128% Dense again:
129randpoly({x,y}, terms=1000, maxdeg=10, mindeg=5);
130
131
132    10       9         9       8  2       8         8       7  3       7  2
13341*x   + 31*x *y + 59*x  - 83*x *y  - 30*x *y + 21*x  + 82*x *y  + 74*x *y
134
135       7         7       6  4       6  3      6  2       6         6       5  5
136 - 21*x *y - 74*x  - 80*x *y  + 61*x *y  + 4*x *y  - 81*x *y + 14*x  - 91*x *y
137
138       5  4       5  3       5  2       5         5       4  5       4  4
139 + 61*x *y  - 61*x *y  + 21*x *y  - 60*x *y + 26*x  + 73*x *y  - 41*x *y
140
141       4  3    4  2       4         3  7       3  6       3  5       3  4
142 + 26*x *y  - x *y  - 28*x *y + 42*x *y  + 20*x *y  - 50*x *y  - 41*x *y
143
144       3  3       3  2       2  8       2  7       2  6       2  5       2  4
145 + 91*x *y  - 39*x *y  - 36*x *y  - 24*x *y  + 85*x *y  + 39*x *y  - 48*x *y
146
147      2  3         9         8         7         6         5         4       10
148 + 3*x *y  - 50*x*y  + 87*x*y  - 78*x*y  + 64*x*y  - 87*x*y  - 65*x*y  - 52*y
149
150       9       8       7      6       5
151 - 30*y  - 88*y  + 24*y  + 7*y  - 54*y
152
153
154% Exponent and coefficient functions:
155% ----------------------------------
156randpoly({x,y}, expons = rand(-10 .. 10));
157
158
159       4  -7                -1         -2      -4  3       -4  -5
160 - 70*x *y   - 61*x*y - 87*x  *y + 26*x   + 9*x  *y  + 16*x  *y
161
162% Trivial example:
163randpoly({x,y}, expons = proc 5);
164
165
166    5  5
16769*x *y
168
169randpoly({x,y}, expons = proc(2*random(0 .. 5)));
170
171
172    10  10       6  6       6  4        4  10       4
17321*x  *y   + 77*x *y  + 50*x *y  + 123*x *y   + 73*x
174
175
176randpoly({x,y}, coeffs = rand(-999 .. 999));
177
178
179    3          2          2          4         2        3
18058*x *y - 723*x *y + 113*x  - 200*x*y  + 61*x*y  + 311*y
181
182procedure coe; randpoly(a, terms=2)$
183
184
185randpoly({x,y}, coeffs = coe);
186
187
188    4  3  2       4  3         4  2         4    2       4  5       4  4
18997*a *x *y  + 97*a *x *y + 97*a *x *y + 97*a *x*y  + 97*a *y  + 97*a *y
190
191       2  3  2       2  3         2  2         2    2       2  5       2  4
192 - 85*a *x *y  - 85*a *x *y - 85*a *x *y - 85*a *x*y  - 85*a *y  - 85*a *y
193
194randpoly({x,y}, coeffs = coe, degree = 10);
195
196
197       5  6  2       5  5  5       5  5  2       5  4  6       5  4       5  6
198 - 44*a *x *y  - 44*a *x *y  - 44*a *x *y  - 44*a *x *y  - 44*a *x  - 44*a *y
199
200       3  6  2       3  5  5       3  5  2       3  4  6       3  4       3  6
201 + 33*a *x *y  + 33*a *x *y  + 33*a *x *y  + 33*a *x *y  + 33*a *x  + 33*a *y
202
203
204% Polynomials composed with general expressions:
205% ---------------------------------------------
206randpoly({x,y^2});
207
208
209    4  2       4       2  6         4         2       2
21043*x *y  - 45*x  + 83*x *y  - 24*x*y  + 73*x*y  + 36*y
211
212randpoly(x^2 - y^2);
213
214
215       10        8  2       8        6  4        6  2       6        4  6
216 - 44*x   + 220*x *y  + 92*x  - 440*x *y  - 368*x *y  - 48*x  + 440*x *y
217
218        4  4        4  2       4        2  8        2  6        2  4       2  2
219 + 552*x *y  + 144*x *y  + 42*x  - 220*x *y  - 368*x *y  - 144*x *y  - 84*x *y
220
221       2       10       8       6       4       2
222 + 52*x  + 44*y   + 92*y  + 48*y  + 42*y  - 52*y  + 30
223
224% This should give the constant term:
225sub(x=y, ws);
226
227
22830
229
230randpoly({x^2 - a^2, y - b});
231
232
233    6         6        4  2        4    2      4            4  2        4  2
23463*a *b - 63*a *y + 4*a *b  - 189*a *b*x  - 8*a *b*y + 189*a *x *y + 4*a *y
235
236       4       2  4        2  3        2  2  2        2  2  2        2    4
237 + 50*a  + 48*a *b  - 192*a *b *y - 8*a *b *x  + 288*a *b *y  + 189*a *b*x
238
239       2    2          2    3       2          2  4        2  2  2        2  2
240 + 16*a *b*x *y - 192*a *b*y  + 59*a *b - 189*a *x *y - 8*a *x *y  - 100*a *x
241
242       2  4       2         4  2        3  2         3      2  4        2  2  2
243 + 48*a *y  - 59*a *y - 48*b *x  + 192*b *x *y - 42*b  + 4*b *x  - 288*b *x *y
244
245        2           6        4            2  3         2          2       6
246 + 126*b *y - 63*b*x  - 8*b*x *y + 192*b*x *y  - 59*b*x  - 126*b*y  + 63*x *y
247
248      4  2       4       2  4       2         3
249 + 4*x *y  + 50*x  - 48*x *y  + 59*x *y + 42*y
250
251% This should give the constant term:
252sub(x=a, y=b, ws);
253
254
2550
256
257
258% Polynomials with specified zeros:
259% --------------------------------
260randpoly(x = a);
261
262
263    5        4         4        3  2       3         3        2  3       2  2
26432*a  - 160*a *x - 12*a  + 320*a *x  + 48*a *x - 31*a  - 320*a *x  - 72*a *x
265
266       2         2          4         3         2                        5
267 + 93*a *x + 87*a  + 160*a*x  + 48*a*x  - 93*a*x  - 174*a*x - 31*a - 32*x
268
269       4       3       2
270 - 12*x  + 31*x  + 87*x  + 31*x
271
272% This should give 0:
273sub(x=a, ws);
274
275
2760
277
278randpoly({x = a, y = b});
279
280
281       3  2       3           3  2       3       2  3       2  2          2  2
282 - 24*a *b  + 48*a *b*y - 24*a *y  - 26*a  + 92*a *b  + 72*a *b *x - 276*a *b *y
283
284        2              2    2       2    2       2         2  3       2      4
285 - 144*a *b*x*y + 276*a *b*y  + 72*a *x*y  + 78*a *x - 92*a *y  - 43*a  - a*b
286
287          3          3           2  2          2            2  2            2
288 - 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
289
290              2          3         2  2         2            3               4
291 - 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
292
293           4         3  2      3           2  3        2  2        2    2
294 + 24*a + b *x + 92*b *x  - 4*b *x*y + 24*b *x  - 276*b *x *y + 6*b *x*y
295
296         3            2  2          3       3  2       3       2  3       2
297 - 48*b*x *y + 276*b*x *y  - 4*b*x*y  + 24*x *y  + 26*x  - 92*x *y  - 43*x
298
299      4
300 + x*y  - 24*x
301
302% This should give 0:
303sub(x=a, y=b, ws);
304
305
3060
307
308
309% Invalid input detection:
310% -----------------------
311randpoly({x,y}, degree=foo);
312
313
314***** degree=foo invalid as optional randpoly argument
315
316randpoly({x,y}, foo);
317
318
319***** foo invalid as optional randpoly argument
320
321randpoly({x,y}, degree=-5);
322
323
324***** degree=-5 invalid as optional randpoly argument
325
326
327on allfac;
328
329  off div, errcont;
330
331
332
333end;
334
335Tested on x86_64-pc-windows CSL
336Time (counter 1): 0 ms
337
338End of Lisp run after 0.00+0.06 seconds
339real 0.19
340user 0.03
341sys 0.03
342