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