Update the ChangeLog for bug #4008
[maxima.git] / share / to_poly_solve / rtest_to_poly_solve.mac
blob596f1a57370e3900da4dd5d683f1157646e82a8b
1 (kill(all), %start : absolute_real_time(),algexact : true, load("to_poly_solve"),0);
2 0$
4 /* equation and variable coercion */
6 to_poly_solve(x = 0, x);
7 %union([x=0])$
9 to_poly_solve(x, x);
10 %union([x=0])$
12 to_poly_solve(x = 0, [x]);
13 %union([x=0])$
15 to_poly_solve(x = %i, [x]);
16 %union([x=%i])$
18 to_poly_solve([x = %i], [x]);
19 %union([x=%i])$
21 to_poly_solve([x[1]=%pi],[x[1]]);
22 %union([x[1]=%pi])$
24 to_poly_solve(set(x=1),x);
25 %union([x=1])$
27 to_poly_solve(set(x=1,y-2),set(x,y));
28 %union([x=1, y=2])$
30 to_poly_solve(set(x=1,y-2),set(x,y,x));
31 %union([x=1, y=2])$
33 /* absolute value */
35 to_poly_solve(abs(x)=0,x);
36 %union([x=0])$
38 to_poly_solve(abs(x) = -1,x);
39 %union()$
41 to_poly_solve(abs(x) = 1,x);
42 %union([x=-1] , [x = 1])$
44 to_poly_solve(abs(x) = 42.1,x);
45 %union([x= ''(rationalize(-42.1))] , [x = ''(rationalize(42.1))])$
47 to_poly_solve(abs(x) = -42.1,x);
48 %union()$
50 to_poly_solve(abs(x) = 42.1b0,x);
51 %union([x=''(rationalize(-42.1b0))] , [x = ''(rationalize(42.1b0))])$
53 to_poly_solve(abs(x) = -42.1b0,x);
54 %union()$
56 to_poly_solve(abs(x) = a,x);
57 %union(%if(isnonnegative_p(a),[x=-a],%union()),%if(isnonnegative_p(a),[x=a],%union()))$
59 to_poly_solve(abs(1/5-abs(1/5-x)) = abs(1/5 - abs(1/5-sqrt(5))),x, simpfuncs = ['expand]);
60 %union([x=2/5-sqrt(5)] , [x=sqrt(5)])$
62 to_poly_solve(abs(x - 1) = 2, x);
63 %union([x=-1] , [x=3])$
65 to_poly_solve(abs(2*x + 5) = abs(x - 2), x);
66 %union([x=-7] , [x=-1])$
68 to_poly_solve(1 - abs(x) = max(-x - 2, x - 2), x);
69 %union([x=-3/2] , [x = 3/2])$
71 /* min and max */
73 to_poly_solve(max(x,1) = 2,x);
74 %union([x=2])$
76 to_poly_solve(max(x,1) = 1/2,x);
77 %union()$
79 sol : to_poly_solve(max(x,1) = a,x);
80 %union(%if(isnonnegative_p(a-1),[x=a],%union()))$
82 subst(a=1/2, sol);
83 %union()$
85 subst(a=2, sol);
86 %union([x=2])$
88 to_poly_solve(min(x,1) = 2,x);
89 %union()$
91 to_poly_solve(min(x,1) = 1/2,x);
92 %union([x=1/2])$
94 sol : to_poly_solve(min(x,1) = a,x);
95 %union(%if(isnonnegative_p(1-a),[x=a],%union()))$
97 subst(a=1/2, sol);
98 %union([x=1/2])$
100 subst(a=2, sol);
101 %union()$
103 to_poly_solve(max(2 - x^2, x) = max(-x, x^3/9), x);
104 %union([x=-1] , [x=3])$
106 to_poly_solve(max(2 - x^2, x) = x^3/9, x, 'algexact = false);
107 %union([x=-3] , [x=-1.55489417989418] , [x=3])$
109 to_poly_solve(max(x,x^2)=1, x);
110 %union([x=-1] , [x=1])$
112 to_poly_solve(min(x,x^2)=1, x);
113 %union([x=1])$
115 to_poly_solve([max(x,y) = a, min(x,y) = b],[x,y]);
116 %union(%if(isnonnegative_p(a-b),[x=a,y=b],%union()),%if(isnonnegative_p(a-b),[x=b,y=a],%union()))$
118 to_poly_solve([max(x,1) + min(x,y) = 7, x-y=a],[x,y], simpfuncs = ['expand]);
119 %union(%if(isnonnegative_p(-a-5) %and isnonnegative_p(a),[x=a+6,y=6],%union()),%if(isnonnegative_p(a/2+5/2) %and isnonnegative_p(a),[x=a/2+7/2,y=7/2-a/2],%union()),%if(isnonnegative_p(-a),[x=7/2,y=7/2-a],%union()))$
121 /* algebraic */
123 to_poly_solve(sqrt(x)=1+%i,x);
124 %union([x=2*%i])$
126 to_poly_solve(sqrt(x)=-1+%i,x);
127 %union()$
129 to_poly_solve(sqrt(x) = a,x);
130 %union(%if((-%pi/2<parg(a))  %and  (parg(a)<=%pi/2),[x=a^2],%union()))$
132 to_poly_solve(x^(1/3)=-1,x);
133 %union()$
135 to_poly_solve(x^(1/3)=1 + %i,x);
136 %union([x=2*%i-2])$
138 to_poly_solve(x^(1/3)=a,x);
139 %union(%if((-%pi/3<parg(a))  %and  (parg(a)<=%pi/3),[x=a^3],%union()))$
141 to_poly_solve(sqrt(x^2 + 1) = x - 2, x);
142 %union()$
144 to_poly_solve(x + sqrt(x) = 2, x);
145 %union([x=1])$
147 to_poly_solve(2*sqrt(x) + 3*x^(1/4) - 2 = 0, x);
148 %union([x=1/16])$
150 to_poly_solve(x = 1/sqrt(1 + x^2), x, simpfuncs = ['expand]);
151 %union([x=sqrt(2)/sqrt(sqrt(5)+1)] , [x=-(sqrt(2)*%i)/sqrt(sqrt(5)-1)])$
153 sol : to_poly_solve(sqrt(x) - sqrt(1-x) = a,x,simpfuncs = ['expand]);
154 %union(%if((-%pi/2<parg(-sqrt(2-a^2)/2-a/2))  %and  (-%pi/2<parg(a/2-sqrt(2-a^2)/2))  %and  (parg(-sqrt(2-a^2)/2-a/2)<=%pi/2)  %and  (parg(a/2-sqrt(2-a^2)/2)<=%pi/2),[x=1/2-(a*sqrt(2-a^2))/2],%union()),%if((-%pi/2<parg(sqrt(2-a^2)/2-a/2))  %and  (-%pi/2<parg(sqrt(2-a^2)/2+a/2))  %and  (parg(sqrt(2-a^2)/2-a/2)<=%pi/2)  %and  (parg(sqrt(2-a^2)/2+a/2)<=%pi/2),[x=(a*sqrt(2-a^2))/2+1/2],%union()))$
156 [subst(a=-10,sol), subst(a=-1,sol), subst(a=0,sol), subst(a=1,sol), subst(a=10,sol)];
157 [%union(),%union([x=0]),%union([x=1/2]),%union([x=1]),%union()]$
159 /* basic trig facts */
161 nicedummies(to_poly_solve(cos(x)=0,x));
162 %union([x=(2*%pi*%z0+%pi)/2])$
164 nicedummies(to_poly_solve(sin(x)=0,x));
165 %union([x=%pi*%z0])$
167 nicedummies(to_poly_solve(cos(x)=1,x));
168 %union([x=2*%pi*%z0])$
170 nicedummies(to_poly_solve(sin(x)=1,x));
171 %union([x=2*%pi*%z0+%pi/2])$
173 nicedummies(to_poly_solve(sin(x)=1/2,x));
174 %union([x=2*%pi*%z0+%pi/6],[x=2*%pi*%z1+(5*%pi)/6])$
176 nicedummies(to_poly_solve(cos(x)=1/2,x));
177 %union([x=2*%pi*%z0-%pi/3],[x=2*%pi*%z1+%pi/3])$
179 nicedummies(to_poly_solve(sin(x) = cos(x), x, simpfuncs = ['expand]));
180 %union([x = %pi*%z0+%pi/4])$
182 nicedummies(to_poly_solve(tan(x) = 1, x, simpfuncs = ['expand]));
183 %union([x=%pi*%z0+%pi/4])$
185 nicedummies(to_poly_solve(tan(x) = 0,x));
186 %union([x=%pi*%z0])$
188 nicedummies(to_poly_solve(tan(x) = -1, x, simpfuncs = ['expand]));
189 %union([x = %pi*%z0 - %pi/4])$
191 (eq : [x +   y +   z =  6,  2*x +   y + 2*z = 10, x + 3*y +   z = 10], sol : to_poly_solve(eq,[x,y,z]),0);
194 expand(subst(first(sol),eq));
195 [6=6,10=10, 10=10]$
197 /* identities */
199 nicedummies(to_poly_solve(x=x,x));
200 %union([x = %c0])$
202 nicedummies(to_poly_solve(abs(x) = max(-x,x),x));
203 %union([x = %r0])$
205 nicedummies(to_poly_solve(x^2 - 1 = (x-1)*(x+1),x));
206 %union([x = %c0])$
208 nicedummies(to_poly_solve(cos(x)^2 + sin(x)^2 = 1,x));
209 %union([x = %c0])$
211 /* trig polynomials */
213 nicedummies(to_poly_solve(sin(x) * cos(x) = sin(%pi/4) * cos(%pi/4),x, simpfuncs = ['expand]));
214 %union([x=%pi*%z0+%pi/4])$
216 nicedummies(to_poly_solve(sin(x)=sin(2),x));
217 %union([x = 2*%pi*%z0+2],[x = 2*%pi*%z1-%pi-2])$
219 /* actual regressions! */
221 to_poly_solve(x=exp(9),x);
222 %union([x = exp(9)])$
224 nicedummies(to_poly_solve(sin(sqrt(x))=0,x));
225 %union(%if((-%pi/2<parg(%z0)) %and (parg(%z0)<=%pi/2),[x=%pi^2*%z0^2],%union()))$
227 nicedummies(to_poly_solve(sin(a*x)=1/2,x, simpfuncs = ['expand]));
228 %union([x=(2*%pi*%z0)/a+(5*%pi)/(6*a)],[x=(2*%pi*%z1)/a+%pi/(6*a)])$
230 block([domain : complex], (to_poly_solve(x^(1/3) = a^(1/3),x), subst(a=-1,%%)));
231 %union([x=-1])$
233 (to_poly_solve(x^(1/3) = a^(1/3),x), subst(a=1,%%));
234 %union([x=1])$
236 to_poly_solve(x^(1/3) = (-1)^(1/3),x);
237 %union([x=-1])$
239 (sol : to_poly_solve([abs(1-abs(x))=abs(1-abs(a))],[x]), 0);
242 subst(a=7,sol);
243 %union([x=-7] , [x=7])$
245 subst(a=%i,sol);
246 %union([x=-1] , [x=1])$
248 (assume(abs(a)<1), to_poly_solve([abs(1-abs(x))=abs(1-abs(a))],[x]));
249 %union([x=2-abs(a)] , [x=abs(a)-2] , [x=-abs(a)] , [x=abs(a)])$
251 (forget(abs(a) < 1),0);
254 to_poly_solve(x^(3/2)=(a)^(3/2),x, simpfuncs = ['expand]);
255 %union([x=a] , [x=-(sqrt(3)*%i*a)/2-a/2] , [x=(sqrt(3)*%i*a)/2-a/2])$
257 to_poly_solve(x^3=8,x);
258 %union([x=2] , [x=-sqrt(3)*%i-1] , [x=sqrt(3)*%i-1])$
260 (to_poly_solve(x*(x-1)=0,x), ev(%%));
261 %union([x=0] , [x=1])$
263 /* See SF bug [ 2032110 ] spurious solution of trig equation, missed actual solution */
265 nicedummies(to_poly_solve((sin(x)-8*cos(x)*sin(x))*(sin(x)^2+cos(x))-(2*cos(x)*sin(x)-sin(x))
266     *(-2*sin(x)^2+2*cos(x)^2-cos(x)),x));
267 %union([x=2*%pi*%z0+%pi],[x=2*%pi*%z1],[x=2*%pi*%z2-atan(2*sqrt(2))+%pi],[x=2*%pi*%z3+atan(2*sqrt(2))-%pi])$
269 nicedummies(to_poly_solve(sin(a*x)=1/2,x, simpfuncs = ['expand]));
270 %union([x=(2*%pi*%z0)/a+(5*%pi)/(6*a)],[x=(2*%pi*%z1)/a+%pi/(6*a)])$
272 to_poly_solve(x+sqrt(sqrt(195)*%i+1),x);
273 %union([x=-sqrt(sqrt(195)*%i+1)])$
275 to_poly_solve([abs(x)=abs(a)],[x]);
276 %union([x=-abs(a)] , [x=abs(a)])$
278 to_poly_solve([abs(1-abs(x))=abs(1-abs(a))],[x]);
279 %union(%if(isnonnegative_p(1-abs(abs(a)-1)),[x=1-abs(abs(a)-1)],%union()),%if(isnonnegative_p(1-abs(abs(a)-1)),[x=abs(abs(a)-1)-1],%union()),[x=-abs(abs(a)-1)-1],[x=abs(abs(a)-1)+1])$
281 to_poly_solve(x^(3/2)=a,x);
282 %union(%if((-%pi/2<parg(a^(1/3)))  %and  (parg(a^(1/3))<=%pi/2),[x=a^(2/3)],%union()),%if((-%pi/2<parg(((sqrt(3)*%i-1)*a^(1/3))/2))  %and  (parg(((sqrt(3)*%i-1)*a^(1/3))/2)<=%pi/2),[x=-((sqrt(3)*%i+1)*a^(2/3))/2],%union()),%if((-%pi/2<parg(-((sqrt(3)*%i+1)*a^(1/3))/2))  %and  (parg(-((sqrt(3)*%i+1)*a^(1/3))/2)<=%pi/2),[x=((sqrt(3)*%i-1)*a^(2/3))/2],%union()))$
284 to_poly_solve(abs(abs(x-1/5)-1/5)=sqrt(5),[x]);
285 %union([x=-sqrt(5)] , [x=(5*sqrt(5)+2)/5])$
287 to_poly_solve(abs(x)=sqrt(5),[x]);
288 %union([x=-sqrt(5)] , [x=sqrt(5)])$
290 /* log stuff */
292 to_poly_solve(log(x)=9,x);
293 %union([x = exp(9)])$
295 to_poly_solve(log(x^2-1)=log(9^2-1),x);
296 %union([x = -9] , [x=9])$ 
298 to_poly_solve(log(x^2+1)-log(9^2+1),[x]);
299 %union([x = -9] , [x=9])$
301 to_poly_solve(log(x)=log(a),x);
302 %union([x = a])$
304 to_poly_solve(2*%i*%pi*%Z5+log(-1)=%i*x,[x]);
305 %union([x=2*%pi*%Z5+%pi])$
307 to_poly_solve(23=sqrt(1-x)*sqrt(x+1)+%i*x,x, simpfuncs = ['rectform]);
308 %union([x=-(264*%i)/23])$
311 to_poly_solve(log(sqrt(1-x^2)+%i*x)=(%i*%pi)/6,x);
312 %union([x=1/2])$
314 to_poly_solve(asin(x) = %pi/6,x);
315 %union([x=1/2])$
318 /* linear equations and frational linear */
320 to_poly_solve(4*x + 5 = 2* x + 13,x);
321 %union([x=4])$
323 to_poly_solve(17 + x = 68,x);
324 %union([x=51])$
326 to_poly_solve(2*t - 29 = 7,t);
327 %union([t=18])$
329 to_poly_solve(sqrt(3) * x = cos(2) - 1/sqrt(42),x);
330 %union([x=(sqrt(42)*cos(2)-1)/(sqrt(3)*sqrt(42))])$
332 to_poly_solve(50/(n+5) = 10,n);
333 %union([n=0])$
335 to_poly_solve((x-1)/(x+1)=1,x);
336 %union()$
338 to_poly_solve((x-1)/(1+x)=a,x,simpfuncs = ['expand])$
339 %union([x=-a/(a-1)-1/(a-1)])$
341 to_poly_solve(1/x = 1/a,x);
342 %union(%if(a#0,[x=a],%union()))$
344 (to_poly_solve(1/x = 1/a,x), subst(a=0,%%));
345 %union()$
347 to_poly_solve(1/x^2 = 1/a^2,x);
348 %union(%if(a#0,[x=-a],%union()),%if(a#0,[x=a],%union()))$
350 /* hyperbolic */
351 nicedummies(to_poly_solve(sinh(x) = 0,x));
352 %union([x=2*%i*%pi*%z0+%i*%pi],[x=2*%i*%pi*%z1])$
354 nicedummies(to_poly_solve(cosh(x) = 0,x));
355 %union([x=2*%i*%pi*%z0-(%i*%pi)/2],[x=2*%i*%pi*%z1+(%i*%pi)/2])$
357 nicedummies(to_poly_solve(cosh(x) - sinh(2*x)/2 = 0,x));
358 %union([x=2*%i*%pi*%z0+log(sqrt(2)-1)+%i*%pi],[x=2*%i*%pi*%z1+log(sqrt(2)+1)],[x=2*%i*%pi*%z2-(%i*%pi)/2],[x=2*%i*%pi*%z3+(%i*%pi)/2])$
360 nicedummies(to_poly_solve(sinh(x) + cosh(x) = 1,x));
361 %union([x=2*%i*%pi*%z0])$
363 /* miscellaneous */
365 nicedummies(to_poly_solve(sin(x) = cos(x), x,simpfuncs = ['expand]));
366 %union([x = %pi*%z0+%pi/4])$
368 nicedummies(to_poly_solve(42*cos(x)+sin(x)=42*cos(%pi/4)+sin(%pi/4),x, simpfuncs =['logcontract,'trigreduce]));
369 %union([x=2*%pi*%z0+%pi/4],[x=2*%pi*%z1-atan(1679/1847)])$
371 nicedummies(to_poly_solve(sin(x)*cos(x) = 1/2, x,simpfuncs = ['expand]));
372 %union([x=%pi*%z0+%pi/4])$
374 nicedummies(to_poly_solve(cos(3*x)-2*cos(2*x)+cos(x)=1/2,x, simpfuncs=['expand]));
375 /* Because of rev. 1.8 of psolve.lisp the ordering of the results has changed.
376  * The solutions 3 and 4 are better simplified.
377 %union([x = 2*%pi*%z0-%i*log(sqrt(13)/4-sqrt(sqrt(13)-1)/2^(3/2)+1/4)],
378        [x = 2*%pi*%z1-%i*log(sqrt(13)/4+sqrt(sqrt(13)-1)/2^(3/2)+1/4)],
379        [x = 2*%pi*%z2-%pi/3],
380        [x = 2*%pi*%z3+%pi/3],
381        [x = 2*%pi*%z4-atan(sqrt(sqrt(13)+1)/(1/sqrt(2)-sqrt(13)/sqrt(2)))-%pi],
382        [x = 2*%pi*%z5+atan(sqrt(sqrt(13)+1)/(1/sqrt(2)-sqrt(13)/sqrt(2)))+%pi])$
385 %union([x = 2*%pi*%z0-atan(sqrt(sqrt(13)/2+1/2)/(1/2-sqrt(13)/2))-%pi],
386        [x = 2*%pi*%z1+atan(sqrt(sqrt(13)/2+1/2)/(1/2-sqrt(13)/2))+%pi],
387        [x = 2*%pi*%z2-%i*log(sqrt(13)/4-sqrt(sqrt(13)/2-1/2)/2+1/4)],
388        [x = 2*%pi*%z3-%i*log(sqrt(13)/4+sqrt(sqrt(13)/2-1/2)/2+1/4)],
389        [x = 2*%pi*%z4-%pi/3],
390        [x = 2*%pi*%z5+%pi/3]);
392 nicedummies(to_poly_solve(sin(2*x) + cos(2*x) = 1,x,simpfuncs = ['expand]));
393 %union([x=%pi*%z0],[x=%pi*%z1+%pi/4])$
395 nicedummies(to_poly_solve(sin(x) * (x + 1), x));
396 %union([x=-1],[x=%pi*%z0])$
398 nicedummies(to_poly_solve(5^x = 5^%e, x));
399 %union([x = ((2 * %i * %pi * %z0 + %e * log(5))/(log(5)))])$
401 to_poly_solve(sqrt(x^2+1) = 2 - x,x);
402 %union([x=3/4])$
404 /* subset of the Michael Wester test suite */
406 nicedummies(to_poly_solve(%e^(2*x) + 2*%e^x + 1 = z,x));
407 %union([x=log(-sqrt(z)-1)+2*%i*%pi*%z0],[x=log(sqrt(z)-1)+2*%i*%pi*%z1])$
409 to_poly_solve(exp(2 - x^2) = exp(-x), x, simpfuncs = ['nicedummies]);
410 %union([x=-((sqrt(9-8*%i*%pi*%z0)-1)/2)],[x=(sqrt(9-8*%i*%pi*%z0)+1)/2])$
412 to_poly_solve((x - 2)/x^(1/3) = 0, x);
413 %union([x=2])$
415 to_poly_solve(sqrt(x^2 + 1) = x - 2, x);
416 %union()$
418 to_poly_solve(x + sqrt(x) = 2, x);
419 %union([x=1])$
421 to_poly_solve(2*sqrt(x) + 3*x^(1/4) - 2 = 0, x);
422 %union([x=1/16])$
424 to_poly_solve(sqrt(log(x)) = log(sqrt(x)), x);
425 %union([x=1] , [x=%e^4])$
428 /* pargs isn't strong enough to simplify this, I think. For now, let me leave 
429 to_poly_solve(log(acos(asin(x^(2/3) - b) - 1)) + 2 = 0, x);
430 %union([x = -(b + sin(1 + cos(1/e^2)))^(3/2)] , [x = (b + sin(1 + cos(1/e^2)))^(3/2)])$
433 to_poly_solve(abs(x - 1) = 2, x);
434 %union([x=-1] , [x=3])$
436 to_poly_solve(abs(2*x + 5) = abs(x - 2), x);
437 %union([x=-7] , [x=-1])$
439 to_poly_solve(1 - abs(x) = max(-x - 2, x - 2), x);
440 %union([x=-3/2] , [x=3/2])$
442 nicedummies(to_poly_solve( (x + 1)*(sin(x)^2 + 1)^2*cos(3*x)^3 = 0,x ));
443 %union([x = -1],[x = 2*%pi*%z0-%i*(log(sqrt(2)+1)+%i*%pi)],
444              [x = 2*%pi*%z1-%i*(log(sqrt(2)-1)+%i*%pi)],
445              [x = 2*%pi*%z2-%i*log(sqrt(2)-1)],
446              [x = 2*%pi*%z3-%i*log(sqrt(2)+1)],[x = 2*%pi*%z4-%pi/2],
447              [x = 2*%pi*%z5+%pi/2],[x = 2*%pi*%z6+5*%pi/6],
448              [x = 2*%pi*%z7-%pi/6],[x = 2*%pi*%z8-5*%pi/6],
449              [x = 2*%pi*%z9+%pi/6])$
451 nicedummies(to_poly_solve( %e^z = 1,z));
452 %union([z = 2*%i*%pi*%z0])$
454 nicedummies(to_poly_solve( tan(x) = 1,x));
455 %union([x = -((-2*%pi*%z0-%pi/2)/2)])$
457 /* Oops! to_poly_solve( sin(x) = tan(x),x); */
459 to_poly_solve( sqrt(log(x)) = log(sqrt(x)),x);
460 %union([x = 1],[x = %e^4])$
462 /* conjugate solver */
464 (declare(z, complex), to_poly_solve((1 + %i)*z + (2 - %i)*conjugate(z) = -3*%i,z, 'simpfuncs = ['rectform]));
465 %union([z = 2 + 3 * %i])$
467 to_poly_solve(z + (5-%i)* conjugate(z) = 42,z, simpfuncs = ['rectform]);
468 %union([z=168/25-(42*%i)/25])$
470 to_poly_solve(z + (5-%i)* z + conjugate(z) = 42,z);
471 %union([z = -((7*%i+217)/(6*%i-36))])$
473 to_poly_solve(z + z * conjugate(z)= 23,z, 'simpfuncs = ['expand]);
474 %union([z=-sqrt(93)/2-1/2],[z=sqrt(93)/2-1/2])$
476 to_poly_solve(z + z * realpart(z)= 23,z);
477 %union([z=(sqrt(93)-1)/2],[z=-((sqrt(93)+1)/2)])$
479 nicedummies(to_poly_solve(realpart(z)+imagpart(z)=23,z));
480 %union(%if(%i*conjugate(%c0)-conjugate(%c0)-%i*%c0-%c0+46 = 0, [z = ((%i+1)*%c0-46)/(%i-1)],%union()))$
482 nicedummies(to_poly_solve(imagpart(z) / realpart(z)= 12,z));
483 %union(%if(%c0#0,%if(%i*conjugate(%c0)+12*conjugate(%c0)-%i*%c0+12*%c0=0,[z=((%i-12)*%c0)/(%i+12)],%union()),%union()))$
485 (eqn1 :   x +   y +   z =  6,
486 eqn2 : 2*x +   y + 2*z = 10,
487 eqn3 :   x + 3*y +   z = 10,
488 nicedummies(to_poly_solve([eqn1, eqn2, eqn3], [x, y, z])));
489 %union([x=%c0,y=2,z=4-%c0])$
491 /* from Maxima and Sage mailing lists */
493 /* Sat Sep 9 14:02:31 CDT 2006 */
494 to_poly_solve(a+x-sqrt(x),x, simpfuncs = ['expand]);
495 %union(%if((-%pi/2<parg(1/2-sqrt(1-4*a)/2)) %and
496 (parg(1/2-sqrt(1-4*a)/2)<=%pi/2),[x=-a-sqrt(1-4*a)/2+1/2],%union()),%if((-%pi/2<parg(sqrt(1-4*a)/2+1/2))
497 %and
498 (parg(sqrt(1-4*a)/2+1/2)<=%pi/2),[x=-a+sqrt(1-4*a)/2+1/2],%union()))$
502 /* Thu, 24 Apr 2003 15:50:25 +0300 */
503 to_poly_solve(x - 2 * sqrt (x) = 10,x);
504 %union([x=2*sqrt(11)+12])$
506 /* Thu, Aug 28, 2008 at 8:57 AM, sage-support */
507 nicedummies(to_poly_solve([x=0, 1-exp(y)=0],[x,y]));
508 %union([x=0,y=2*%i*%pi*%z0])$
510 nicedummies(to_poly_solve([y*sin(x)=0, cos(x)=0],[x,y]));
511 %union([x=(2*%pi*%z0+%pi)/2,y=0])$
513 nicedummies(to_poly_solve(0.004*(8*%e^(-300*t)-8*%e^(-1200*t))*(720000*%e^(-300*t)-11520000*%e^(-1200*t))+0.004*(9600*%e^(-1200*t)-2400*%e^(-300*t))^2,t));
514 %union([t=(2*%i*%pi*%z0+log(25/4-(3*sqrt(41))/4))/900],[t=(2*%i*%pi*%z1+log((3*sqrt(41))/4+25/4))/900])$
516 /* Sat Oct 6 05:39:51 CDT 2007, maxima list */
518 to_poly_solve([abs(a00-4*a02)=1,abs(a00-4*a01+4*a02)=1,abs(a00+4*a01+4*a02)=1],[a00,a01,a02]);
519 %union([a00=-1,a01=0,a02=0],[a00=-1/2,a01=-1/4,a02=1/8],[a00=-1/2,a01=1/4,a02=1/8],[a00=0,a01=0
520 ,a02=-1/4],[a00=0,a01=0,a02=1/4],[a00=1/2,a01=-1/4,a02=-1/8],[a00=1/2,a01=1/4,a02=-1/8],[a00=1,a01=0,a02
521 =0])$
523 /* Sat Sep 9 14:02:31 CDT 2006 */
524 to_poly_solve(x - sqrt(x) + a,x, 'simpfuncs = ['expand]);
525 %union(%if((-%pi/2<parg(1/2-sqrt(1-4*a)/2)) %and (parg(1/2-sqrt(1-4*a)/2)<=%pi/2),[x=-a-sqrt(1-4*a)/2+1/2],
526 %union()),%if((-%pi/2<parg(sqrt(1-4*a)/2+1/2)) %and (parg(sqrt(1-4*a)/2+1/2)<=%pi/2),
527 [x=-a+sqrt(1-4*a)/2+1/2],%union()))$
529 /* Tue Apr 3 10:18:12 CDT 2007 */
530 to_poly_solve([x=2, y=3], [x]);
531 %union()$
533 to_poly_solve([x=a, y=b], [x]);
534 %union()$
536 to_poly_solve([x=a, y=b], [x]);
537 %union()$
539 to_poly_solve([x=2, y=3], [y,x]);
540 %union([x=2,y=3])$
542 to_poly_solve([a*x=x], [x]);
543 %union([x=0])$
545 to_poly_solve([a*x=x], [x]);
546 %union([x=0])$
548 nicedummies(to_poly_solve([x/x=1], [x]));
549 %union([x=%c0])$
551 to_poly_solve([x=2, y=x+3, y=1], [x,y]);
552 %union()$
554 to_poly_solve([x=2, y=3, y=1], [x,y]);
555 %union()$
557 /* Thu, 24 Apr 2003 15:50:25 +0300 */
559 to_poly_solve(x - 2 * sqrt (x) = 10,x);
560 %union([x=2*sqrt(11)+12])$
562 /* Wed Sep 20 11:41:42 CDT 2006 */
563 to_poly_solve(sin(x)+cos(x)=0,x, 'simpfuncs = ['nicedummies,'expand]);
564 %union([x=2*%pi*%z0-%pi/4],[x=2*%pi*%z0+(3*%pi)/4])$
566 /* Fri Feb 1 05:31:56 CST 2008 changed 0.05 to 5/100) */
567 to_poly_solve(x*exp(-x)-5/100 = 0,x); 
568 %union([x = -lambert_w(-1/20)])$
570 /* Sun May 11 11:52:05 CDT 2008 */
571 to_poly_solve(2*x=sqrt(x^2+3),x);
572 %union([x=1])$
574 /*Tue Apr 22 14:24:13 CDT 2008 */
575 to_poly_solve([log(y^2+x^2)+2*x^2/(y^2+x^2)=0,2*x*y/(y^2+x^2)],[x,y]);
576 %union([x=0,y=-1],[x=0,y=1],[x=-%e^(-1),y=0],[x=%e^(-1),y=0])$
578 /* Wed Oct 25 06:00:39 CDT 2006 */
579 to_poly_solve([10*q/sqrt(q^2 + 3) - 5*q^3/(q^2+3)^(3/2) = 5.07],[q], 'algexact=false);
580 %union([q = 1.423962227031281],
581        [q = 10.01077844311377],
582        [q = -2.201201253088263*%i])$
584 /* Sat Feb 23 20:23:50 CST 2008 */
585 to_poly_solve([x2=x*cos(phi)-y*sin(phi), y2=x*sin(phi)+y*cos(phi)], [x,y], 'simpfuncs=['trigreduce]);
586 %union([x=sin(phi)*y2+cos(phi)*x2,y=cos(phi)*y2-sin(phi)*x2])$
588 /* Thu May 25 09:22:09 CDT 2006 */
589 to_poly_solve(1+x^(5/2),x, 'simpfuncs = ['expand],'algexact=true);
590 %union([x = -sqrt(5-sqrt(5))*sqrt(5)*%i/2^(5/2)
591                 -sqrt(5-sqrt(5))*%i/2^(5/2)+sqrt(5)/4-1/4],
592              [x = sqrt(5-sqrt(5))*sqrt(5)*%i/2^(5/2)
593                 +sqrt(5-sqrt(5))*%i/2^(5/2)+sqrt(5)/4-1/4])$
595 /* Thu Oct 12 14:55:03 CDT 2006 */
596 nicedummies(to_poly_solve([a1+b2=r2,a1*b2=r3,a3*b1+a2*b2=r4,r4+a5+a3*b2=d5,a5*b1=0],
597 [a1,a2,a3,a5,r2,r3,r4,b1,b2]));
598 %union([a1 = %c0,a2 = %c1,a3 = %c2,a5 = d5+(-%c2-%c1)*%c3,b1 = 0,
599                b2 = %c3,r2 = %c3+%c0,r3 = %c0*%c3,r4 = %c1*%c3],
600               [a1 = %c4,a2 = (d5-%c5*%c7-%c5*%c6)/%c7,a3 = %c5,a5 = 0,
601                b1 = %c6,b2 = %c7,r2 = %c7+%c4,r3 = %c4*%c7,r4 = d5-%c5*%c7])$
603 /* Sun Apr 2 08:31:17 CDT 2006 */
604 block([eq : x^3-8*x^2-197*x-502], 
605    every(lambda([s], is(abs(subst(s,eq)) < 1.0e-12)), args(to_poly_solve(eq,x, simpfuncs = ['dfloat],algexact = true))));
606 true$
609 /* Mon Dec 17 06:08:28 CST 2007 */
610 to_poly_solve([x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],[x,y], 'use_grobner = true, 'simpfuncs=['expand]);
611 %union([x=1/2-sqrt(7)/2,y=sqrt(7)/2+1/2],[x=sqrt(7)/2+1/2,y=1/2-sqrt(7)/2])$
613 /* Wed Mar 28 16:33:34 CDT 2007 */
614 to_poly_solve([(2*x+1)^3=13.5*(x^5+1)],[x],'simpfuncs=['rationalize], 'algexact=false);
615 %union([x=-2287278158804185/2251799813685248],[x=7473047756518961/9007199254740992],[x=1],[x=-(135947138237407*%i)/140737488355328-3665567315448253/9007199254740992],[x=(135947138237407*%i)/140737488355328-3665567315448253/9007199254740992])$
617 nicedummies(to_poly_solve(sin(x)=sin(x),x));
618 %union([x=%c0])$
620 to_poly_solve(0=1,x);
621 %union()$
623 /* Mon Jan 29 08:57:41 CST 2007 */
624 to_poly_solve([x+3*y=5,sqrt(x+y)-1=y],[x,y]);
625 %union([x=11-6*sqrt(2),y=2*sqrt(2)-2])$
627 /* more miscellaneous */
629 to_poly_solve(log(x+1) = log(a+1),x);
630 %union([x=a])$
632 to_poly_solve(log(x+1) = 2*log(a+1),x);
633 %union([x=a^2+2*a])$
635 to_poly_solve(log(x+1) = -log(a+1),x);
636 %union(%if(a+1 # 0,[x = -a/(a+1)],%union()))$
638 to_poly_solve(log(1+x)=-2*log(1+a),x, simpfuncs = ['ratsimp]);
639 %union(%if(a+1 # 0,[x = -((a^2+2*a)/(a^2+2*a+1))],%union()))$
641 to_poly_solve(log(x+1) = 5*log(a+1),x);
642 %union([x=a^5+5*a^4+10*a^3+10*a^2+5*a])$
644 to_poly_solve(x^(3/2)=1,x);
645 %union([x=1])$
647 to_poly_solve(x^(4/3)=1,x);
648 %union([x=1])$
650 to_poly_solve(x^(5/3)=1,x);
651 %union([x=1])$
653 to_poly_solve(x^4=1,x);
654 %union([x=-1],[x=1],[x=-%i],[x=%i])$
656 to_poly_solve(x^8=1,x, simpfuncs = ['rectform]);
657 %union([x=-1],[x=1],[x=-%i],[x=%i],[x=-%i/sqrt(2)-1/sqrt(2)],[x=1/sqrt(2)-%i/sqrt(2)],
658 [x=%i/sqrt(2)-1/sqrt(2)],[x=%i/sqrt(2)+1/sqrt(2)])$
660 to_poly_solve(sqrt(x)+x^(3/2)=1,x, simpfuncs = ['expand]);
661 %union([x = sqrt(31)/(3*2^(2/3)*(sqrt(31)+3^(3/2))^(1/3))
662                 +sqrt(3)/(2^(2/3)*(sqrt(31)+3^(3/2))^(1/3))
663                 +2^(2/3)/(3*(sqrt(31)+3^(3/2))^(2/3))-2/3])$
665 to_poly_solve(a*x=b, x,'simpfuncs = ['rectform]);
666 %union([x=b/a])$
668 to_poly_solve(x^2 + a^2, [x,a],simpfuncs = ['nicedummies]);
669 %union([a=%c0,x=%i*%c0],[a=%c0,x=-%i*%c0])$
671 to_poly_solve(x^4 + a^4, [x,a],simpfuncs = ['nicedummies]);
672 %union([a=%c0,x=(-1)^(1/4)*%c0],[a=%c0,x=-(-1)^(1/4)*%i*%c0],
673        [a=%c0,x=-(-1)^(1/4)*%c0],[a=%c0,x=(-1)^(1/4)*%i*%c0])$
675 to_poly_solve((x-1)/(x+1) = 1, [x]);
676 %union()$
678 nicedummies(to_poly_solve(sin(x+a)=sin(x),a, simpfuncs = ['trigrat]));
679 %union([a = 2*%pi*%z0],[a = -2*x+2*%pi*%z1-%pi])$
681 to_poly_solve(cos(x+a)=cos(x),a, simpfuncs = ['trigrat,'nicedummies]);
682 %union([a=2*%pi*%z0],[a=2*%pi*%z0-2*x])$
684 to_poly_solve(tan(x+a)=tan(x),a, simpfuncs = ['nicedummies]);
685 %union(%if(cos(x)#0,[a=%pi*%z0],%union()))$
687 to_poly_solve(cosh(x+a)=cosh(x),a, 'simpfuncs = ['exponentialize, 'ratsimp, 'nicedummies]);
688 %union([a=2*%i*%pi*%z0],[a=2*%i*%pi*%z0-2*x])$
690 to_poly_solve(sin(x^2)=0,x, 'simpfuncs = ['nicedummies]);
691 %union([x=-sqrt(%pi)*sqrt(%z0)],[x=sqrt(%pi)*sqrt(%z0)])$
693 to_poly_solve(x^2+2*x+sqrt(5),x);
694 %union([x=-sqrt(1-sqrt(5))-1],[x=sqrt(1-sqrt(5))-1])$
696 /* nonsymbol solve */
698 to_poly_solve([x^2 + y^2 + x*y = 1, x^2 * y^2 = 2],[x^2 + y^2, x*y]);
699 %union([x*y=-sqrt(2),y^2+x^2=sqrt(2)+1],[x*y=sqrt(2),y^2+x^2=1-sqrt(2)])$
701 to_poly_solve([x + x*y = a, x*y = 8],[x,x*y]);
702 %union([x*y=8,x=a-8])$
704 to_poly_solve([x + x*y = a, x*y = 8 + z, x-z+78],[x,x*y,z]);
705 %union([x*y=(a+86)/2,x=(a-86)/2,z=(a+70)/2])$
707 to_poly_solve([abs(x*y-1) = a, a^2 - x*y],[x*y,a]);
708 %union([x*y=-((sqrt(5)-3)/2),a=(sqrt(5)-1)/2],[x*y=(sqrt(5)+3)/2,a=(sqrt(5)+1)/2])$
710 /* parameter solve */
711 to_poly_solve([m*x = b],[x], 'parameters = [m,b], 'simpfuncs = ['nicedummies]);
712 %union(%if((b=0)  %and  (m=0),[x=%c0],%union()),%if(m#0,[x=b/m],%union()))$
714 to_poly_solve([y^2+x^2=a^2,y+x=1],[x,y],'parameters=[a,b],'simpfuncs=['nicedummies,'expand]);
715 %union(%if(2*a^2-1#0,[x=-((sqrt(2*a^2-1)-1)/2),y=(sqrt(2*a^2-1)+1)/2],%union()),
716        %if(2*a^2-1#0,[x=(sqrt(2*a^2-1)+1)/2,y=-((sqrt(2*a^2-1)-1)/2)],%union()),
717        %if((a=-1/sqrt(2))  %and  (b=%c0),[x=1/2,y=1/2],%union()),
718        %if((a=1/sqrt(2)) %and (b=%c0),[x=1/2,y=1/2],%union()))$
720 to_poly_solve([x + y = a, x + y = b],[x,y], 'parameters = [a], 'simpfuncs = ['nicedummies]);
721 %union(%if(b-a=0,[x=%c0,y=b-%c0],%union()))$
723 to_poly_solve([x + y = a, x + a*y = b],[x,y], 'parameters = [a,b], 'simpfuncs = ['nicedummies,'expand]);
724 %union(%if(a-1#0,[x=-((b-a^2)/(a-1)),y=(b-a)/(a-1)],%union()),%if((a=1) %and (b=1),[x=%c0,y=1-%c0],%union()))$
726 to_poly_solve([y+b*x=a,a*y+x=b],[x,y],'parameters=[],'simpfuncs=['nicedummies,'ratsimp]);
727 %union([x=-((b-a^2)/(a*b-1)),y=(b^2-a)/(a*b-1)])$
729 to_poly_solve([y+x=a,a*y+x=b],[x,y],'parameters=[a,b],'simpfuncs=['nicedummies, 'expand]);
730 %union(%if(a-1#0,[x=-((b-a^2)/(a-1)),y=(b-a)/(a-1)],%union()),
731 %if((a=1)  %and  (b=1),[x=%c0,y=1-%c0],%union()))$
733 /* Actual regressions */
734 to_poly_solve(sin(x+p)=sin(x),p, 'simpfuncs = ['trigrat, 'nicedummies]);
735 %union([p = 2*%pi*%z0],[p = -2*x+2*%pi*%z0-%pi])$
737 nicedummies(to_poly_solve(sin(s)=0, s));
738 %union([s=%pi*%z0])$
740 /* buglist equations--Some of these bugs have already been fixed in algsys / solve. So don't
741 think that to_poly_solve fixes these bugs. */
743 /*  [ 2041214 ] unable solve */
744 to_poly_solve([x+y=1,sqrt(x+1)=1],[x,y]);
745 %union([x=0,y=1])$
747 /* [ 1852178 ] Another solve() problem */
748 to_poly_solve([x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],[x,y], 'use_grobner = true, 'simpfuncs=['expand]);
749 %union([x=1/2-sqrt(7)/2,y=sqrt(7)/2+1/2],[x=sqrt(7)/2+1/2,y=1/2-sqrt(7)/2])$
751 /* [ 1845370 ] Division by 0 in solve() */
752 to_poly_solve(x^4+(8*n+2*c+4)*x^3+(24*n^2+12*c*n+24*n+c^2+7*c+5)*x^2+(32*n^3+24*c*n^2
753  +48*n^2+4*c^2*n+28*c*n+20*n+3*c^2+7*c+2)*x+20*n^4+24*c*n^3+38*n^3+9*c^2*n^2+39*c*n^2
754  +22*n^2+c^3*n+12*c^2*n+17*c*n+4*n+c^3+3*c^2+2*c,x, 'simpfuncs = ['expand]);
756 %union([x=-sqrt(-2*sqrt(-16*n^4-32*c*n^3-24*n^3-20*c^2*n^2-44*c*n^2-8*n^2-4*c^3*n-24*c^2*n-12*c*n-4*c^3-3*c^2-2*c+1)+c^2-2*c+2)/2-2*n-c/2-1],[x=sqrt(-2*sqrt(-16*n^4-32*c*n^3-24*n^3-20*c^2*n^2-44*c*n^2-8*n^2-4*c^3*n-24*c^2*n-12*c*n-4*c^3-3*c^2-2*c+1)+c^2-2*c+2)/2-2*n-c/2-1],[x=-sqrt(2*sqrt(-16*n^4-32*c*n^3-24*n^3-20*c^2*n^2-44*c*n^2-8*n^2-4*c^3*n-24*c^2*n-12*c*n-4*c^3-3*c^2-2*c+1)+c^2-2*c+2)/2-2*n-c/2-1],[x=sqrt(2*sqrt(-16*n^4-32*c*n^3-24*n^3-20*c^2*n^2-44*c*n^2-8*n^2-4*c^3*n-24*c^2*n-12*c*n-4*c^3-3*c^2-2*c+1)+c^2-2*c+2)/2-2*n-c/2-1])$
758 /* [ 1663399 ] solve/algsys bug */
759 nicedummies(to_poly_solve([b2 + a1 = r2, a1 * b2 = r3, a2 * b2 + a3 * b1 = r4, a3
760   * b2 + a5 + r4= d5, a5 * b1 = 0],[a1, a2, a3, a5, r2, r3, r4, b1, b2], 'simpfuncs = ['expand]));
762 %union([a1 = %c0,a2 = %c3,a3 = %c4,a5 = d5-%c4*%c5-%c3*%c5,b1 = 0,
763         b2 = %c5,r2 = %c5+%c0,r3 = %c0*%c5,r4 = %c3*%c5],
764        [a1 = %c10,a2 = %c1,a3 = d5/%c2,a5 = 0,b1 = %c2,b2 = 0,r2 = %c10,
765         r3 = 0,r4 = d5],
766        [a1 = %c6,a2 = d5/%c9-(%c7*%c8)/%c9-%c7,a3 = %c7,a5 = 0,b1 = %c8,
767         b2 = %c9,r2 = %c9+%c6,r3 = %c6*%c9,r4 = d5-%c7*%c9]);
770 /* [ 1603369 ] Solve bind stack overflow */
771 to_poly_solve([product(x-i,i,1,20),x=5],x);
772 %union([x=5])$
774 to_poly_solve([product(x-i,i,1,75)],x);
775 ''(apply('%union, (makelist([x=i],i,1,75))))$
777 /* [ 1602426 ] solve([a=b,b=3],[a]) */
778 to_poly_solve([a=b,b=3],[a]);
779 %union()$
781 to_poly_solve([a=b,b=3],[a], 'parameters = [b]);
782 %union(%if(b-3=0,[a=3],%union()))$
784 /* [ 1570828 ] (lin)solve of inconsistent equations */
785 to_poly_solve([x=1,x=2],x);
786 %union()$
788 /* [ 1452341 ] solve(x^(5/2)+1,x) produces incorrect roots */
789 to_poly_solve(1+x^(5/2),x, 'simpfuncs = ['expand]);
790 %union([x = -sqrt(5-sqrt(5))*sqrt(5)*%i/2^(5/2)
791                 -sqrt(5-sqrt(5))*%i/2^(5/2)+sqrt(5)/4-1/4],
792              [x = sqrt(5-sqrt(5))*sqrt(5)*%i/2^(5/2)
793                 +sqrt(5-sqrt(5))*%i/2^(5/2)+sqrt(5)/4-1/4])$
796 /* [ 1105366 ] SOLVE gives a wrong answer */
797 nicedummies(to_poly_solve(sqrt(%e^(2*t)*sin(t)^2+%e^(2*t)*cos(t)^2+3*%e^(2*t))=2,t));
798 %union([t=%i*%pi*%z0])$
800 /* [ 932395 ] solve confused by ratvars */
801 nicedummies(to_poly_solve(rat(a+c,a,b,c,d),[a,b]));
802 %union([a=-c,b=%c0])$
804 /* [ 826915 ] Solve wrong with irreducible polydecomp */
805 block([sol, eq], 
806    eq :  (x^5+x-3)^5+x^5+x-6, 
807    sol : to_poly_solve(eq,x, 'simpfuncs = ['dfloat],'algexact=false),
808    every(lambda([s], is(cabs(subst(s, eq)) < 1.0e-6)), args(sol)));
809 true$
811 /* [ 607079 ] solve with repeated variable */
812 to_poly_solve([x=1],[x,x]);
813 %union([x=1])$
815 /* [ 589970 ] Solve of quadratic gives error */
816 to_poly_solve((4*k^2-4)*y^2 + (4-4*k^2)*y + 6*k^2-1,y);
817 %union([y=-((sqrt(5)*k*sqrt(1-k^2)-k^2+1)/(2*k^2-2))],[y=(sqrt(5)*k*sqrt(1-k^2)+k^2-1)/(2*k^2-2)])$
819 to_poly_solve((4*k^2-4)*y^2 + (4-4*k^2)*y + 6*k^2-1,y, 'parameters = [k]);
820 %union(%if(k=0,[y=1/2],%union()),
821 %if((k-1#0) %and (k#0) %and (k+1#0),[y=-((sqrt(5)*k*sqrt(1-k^2)-k^2+1)/(2*k^2-2))],%union()),
822 %if((k-1#0) %and (k#0) %and (k+1#0),[y=(sqrt(5)*k*sqrt(1-k^2)+k^2-1)/(2*k^2-2)],%union()))$
824 /* Lambert solver */
826 to_poly_solve(x*exp(x) = a,x);
827 %union([x=lambert_w(a)])$
829 to_poly_solve(exp(x) = a/x,x);
830 %union([x = lambert_w(a)])$
832 to_poly_solve(56 * %e^(x) * x - a,x);
833 %union([x='lambert_w(a/56)])$
835 to_poly_solve(5^x * x = 42,x);
836 %union([x = lambert_w(42*log(5))/log(5)])$
838 to_poly_solve(5^(x^2 - 1) * (x^2-1) / %pi = 42,x);
839 %union([x = -sqrt(lambert_w(42*%pi*log(5))+log(5))/sqrt(log(5))],
840        [x = sqrt(lambert_w(42*%pi*log(5))+log(5))/sqrt(log(5))])$
841             
842 /* Examples from wikipedia.org -- http://en.wikipedia.org/wiki/Lambert_W_function*/
844 to_poly_solve(2^x = 5*x,x);
845 %union([x = -lambert_w(-log(2)/5)/log(2)])$
847 to_poly_solve(x^x = z,x);
848 %union([x = log(z)/lambert_w(log(z))])$
850 to_poly_solve(x * log(x) = a,x);
851 %union([x = a / lambert_w(a)])$ 
853 /* one-to-one cruncher & related */
855 to_poly_solve(exp(x) = exp(x^2-1),x, 'simpfuncs = ['nicedummies]);
856 %union([x=-((sqrt(5-8*%i*%pi*%z0)-1)/2)],[x=(sqrt(5-8*%i*%pi*%z0)+1)/2])$
858 to_poly_solve(exp(x) - exp(x^2-1),x, 'simpfuncs = ['nicedummies]);
859 %union([x=-((sqrt(5-8*%i*%pi*%z0)-1)/2)],[x=(sqrt(5-8*%i*%pi*%z0)+1)/2])$
861 to_poly_solve(x = sqrt(x) -1/4,x, 'simpfuncs = ['nicedummies]);
862 %union([x=1/4])$
864 to_poly_solve(x = sqrt(x) + a * %i,x, 'simpfuncs = ['nicedummies]);
865 %union(%if((-%pi/2<parg(-((sqrt(4*%i*a+1)-1)/2)))  %and  (parg(-((sqrt(4*%i*a+1)-1)/2))<=%pi/2),
866 [x=-((sqrt(4*%i*a+1)-2*%i*a-1)/2)],%union()),%if((-%pi/2<parg((sqrt(4*%i*a+1)+1)/2))  %and  (parg((sqrt(4*%i*a+1)+1)/2)<=%pi/2),[x=(sqrt(4*%i*a+1)+2*%i*a+1)/2],%union()))$
868 /* previously commented out */
870 to_poly_solve(log(x+1) - log(x-67) = log(a+1) - log(a-67),x);
871 %union(%if((a-67#0) %and (a+1#0),[x=a],%union()))$
873 /* f(x) = f(a) equations */
874 to_poly_solve(log(x)=log(a),x);
875 %union([x=a])$
877 to_poly_solve(exp(x)=exp(a),x, simpfuncs = ['nicedummies]);
878 %union([x=a+2*%i*%pi*%z0])$
880 to_poly_solve(exp(x*(x-1))=exp(a*(a-1)),x, simpfuncs = ['nicedummies]);
881 %union([x=-((sqrt(4*a^2-4*a+8*%i*%pi*%z0+1)-1)/2)],[x=(sqrt(4*a^2-4*a+8*%i*%pi*%z0+1)+1)/2])$
883 to_poly_solve(log(x*(x-1))=log(a*(a-1)),x, simpfuncs = ['nicedummies]);
884 %union([x=1-a],[x=a])$
886 block([algebraic : true], to_poly_solve(x^(3/2) = (1 + %i) / sqrt(2),x, simpfuncs = ['rectform]));
887 %union([x=%i/2+sqrt(3)/2])$
889 block([algebraic : true], to_poly_solve(x^(3/2) = (-1 + %i) / sqrt(2),x, simpfuncs = ['rectform]));
890 %union([x=-%i/2-sqrt(3)/2],[x=%i])$
892 block([algebraic : true], to_poly_solve(x^(3/2) = (-1 - %i) / sqrt(2),x, simpfuncs = ['rectform]));
893 %union([x=%i/2-sqrt(3)/2],[x=-%i])$
895 block([algebraic : true], to_poly_solve(x^(3/2) = - 1,x, simpfuncs = ['rectform]));
896 %union([x=-(sqrt(3)*%i)/2-1/2],[x=(sqrt(3)*%i)/2-1/2])$
898 block([algebraic : true], to_poly_solve(x^(3/2) = 1,x, simpfuncs = ['rectform]));
899 %union([x=1])$
901 block([algebraic : true], to_poly_solve(x^(3/2) = (1/2 + sqrt(3) * %i/2),x, simpfuncs = ['rectform]));
902 %union([x=%i*sin((2*%pi)/9)+cos((2*%pi)/9)])$
904 sol : to_poly_solve([x/a = a/x],[x], 'parameters = ['a]);
906 %union(%if(a#0,[x=-a],%union()),%if(a#0,[x=a],%union()))$
908 ev(sol);
909 %union(%if(a#0,[x=-a],%union()),%if(a#0,[x=a],%union()))$
911 /* Maxima testsuite */
912 to_poly_solve('diff(y,x),'diff(y,x));
913 %union(['diff(y,x,1)=0])$
915 nicedummies(to_poly_solve(5^f(x) = 125,f(x)));
916 %union([f(x)=(2*%i*%pi*%z0+log(125))/log(5)])$
918 to_poly_solve ('[x = 1], '[x, x]);
919 %union([x=1])$
921 to_poly_solve ('[u = v], '[u, u, u, u]);
922 %union([u = v])$
924 /* The use_grobner is a workaround for an algsys bug, I think.*/
925 nicedummies(to_poly_solve(asin(cos(x)),x, 'use_grobner = true));
926 %union([x=(2*%pi*%z0+%pi)/2])$
928 to_poly_solve ([x + 2*y = 5, 2*x - y = 5], [x, y]);
929 %union([x = 3, y = 1])$
931 to_poly_solve(sec(x)=0,x);
932 %union()$
934 to_poly_solve(csc(x)=0,x);
935 %union()$
937 to_poly_solve(csc(x*(x-1))=0,x);
938 %union()$
940 to_poly_solve(sech(x)=0,x);
941 %union()$
943 to_poly_solve(cot(x)=0,x, 'simpfuncs = ['expand,'nicedummies]);
944 %union([x=%pi*%z0+%pi/2])$
946 to_poly_solve(tan(x)=0,x, 'simpfuncs = ['nicedummies]);
947 %union([x=%pi*%z0])$
949 to_poly_solve(asin(x)=1/2,x, 'simpfuncs = ['expand,'demoivre, 'expand]);
950 %union([x=sin(1/2)])$
952 to_poly_solve(asin(x^2)=1/5,x, 'simpfuncs = ['expand,'demoivre, 'expand]);
953 %union([x=-sqrt(sin(1/5))],[x=sqrt(sin(1/5))])$
955 to_poly_solve(asin(sqrt(x))=1/5,x, 'simpfuncs = ['expand,'demoivre,'expand]);
956 %union([x = sin(1/5)^2])$
958 to_poly_solve(acos(sqrt(x))=1/5,x, 'simpfuncs = ['expand,'demoivre,'expand]);
959 %union([x = cos(1/5)^2])$
961 to_poly_solve(acos(x)=1/5,x, 'field = 'complex,'simpfuncs = ['expand,'demoivre, 'expand]);
962 %union([x=cos(1/5)])$
964 to_poly_solve(taylor(cos(x),x,0,4),x);
965 %union([x=-sqrt(2)*sqrt(3-sqrt(3))],[x=sqrt(2)*sqrt(3-sqrt(3))],
966        [x=-sqrt(2)*sqrt(sqrt(3)+3)],[x=sqrt(2)*sqrt(sqrt(3)+3)])$
968 to_poly_solve(taylor(sin(x),x,0,4),x);
969 %union([x=0],[x=-sqrt(6)],[x=sqrt(6)])$
971 nicedummies(to_poly_solve(a,x, 'parameters = [a]));
972 %union(%if(a=0,[x=%c0],%union()))$
974 nicedummies(to_poly_solve(a,x, 'parameters = []));
975 %union()$
977 nicedummies(to_poly_solve(a, x, 'parameters = [a,b]));
978 %union(%if((a=0)  %and  (b=%c0),[x=%c1],%union()))$
980 to_poly_solve(abs(x) = 0,x);
981 %union([x=0])$
983 (declare(z,complex),0);
986 to_poly_solve(abs(z) = 0,z);
987 %union([z=0])$
989 to_poly_solve(abs(x)*e = 10,[x]);
990 %union(%if(isnonnegative_p(10/e),[x=-10/e],%union()),%if(isnonnegative_p(10/e),[x=10/e],%union()))$
992 /* Maxima mailing list, "Equation with conjugate()," October 21, 2008 11:30AM */
993 to_poly_solve(z*conjugate(z)+3*(z-conjugate(z))=13+12*%i, z);
994 %union([z=2*%i-3],[z=2*%i+3])$
996 to_poly_solve(x^(3)=1,x, 'simpfuncs = ['log,'polarform]);
997 %union([x = 0],[x = -(2*%i*%pi/3)],[x = 2*%i*%pi/3])$
999 to_poly_solve(x^(3)+x^2 + x + 1,x, 'simpfuncs = ['log,'polarform]);
1000 %union([x = -(%i*%pi/2)],[x = %i*%pi/2],[x = %i*%pi])$
1002 /* Next two equations are from comp.soft-sys.math.maple, 25 Oct 2008 */
1004 nicedummies(to_poly_solve([x + a*y = 0,a*x + b^2*y = 0,a^2*x + a*b^2*y = 0], [x,y], 'parameters = ['a,'b]));
1005 %union(%if((a=0) %and (b=0),[x=0,y=%c6],%union()),%if((a=%c0) %and (b=%c0),[x=-%c0*%c1,y=%c1],%union()),%if((a=%c2) %and (b=-%c2),[x=-%c2*%c3,y=%c3],%union()),%if((a=%c4) %and (b=%c5),[x=0,y=0],%union()))$
1007 nicedummies(to_poly_solve(a*x=0, [x], 'parameters = ['a]));
1008 %union(%if(a = 0, [x = %c0], %union()), %if(a # 0, [x = 0], %union()))$
1010 /* inverse trig */
1012 to_poly_solve(asin(1/x) =3/8,x, 'simpfuncs =['expand]);
1013 %union([x = 1/sin(3/8)])$
1015 to_poly_solve(acos(1/x) =3/8,x, 'simpfuncs =['expand]);
1016 %union([x = 1/cos(3/8)])$
1018 to_poly_solve(acos(x) =  acos(a),x, 'simpfuncs =['expand]);
1019 %union([x=a])$
1021 to_poly_solve(min(x,1) = 1/2,x);
1022 %union([x = 1/2])$
1024 to_poly_solve(min(x,1) = a,x);
1025 %union(%if(isnonnegative_p(1 - a), [x = a], %union()))$
1028 to_poly_solve([sqrt(x) - 1], [x]);
1029 %union([x = 1])$
1031 to_poly_solve([x^(1/3) = 1],[x]);
1032 %union([x = 1])$
1034 to_poly_solve([x^(1/4) = 1],[x]);
1035 %union([x = 1])$
1037 to_poly_solve([max(x,1)-5],[x]);
1038 %union([x = 5])$
1040 to_poly_solve([min(x,1) = max(2,7-x)],[x]);
1041 %union()$
1043 to_poly_solve([abs(1-abs(1-abs(x))) = 42],[x]);
1044 %union([x = - 44], [x = 44])$
1046 to_poly_solve([sqrt(x) = 10 - sqrt(x-1)],[x]);
1047 %union([x = 10201/400])$
1049 to_poly_solve([sqrt(x) = min(x,35)],[x]);
1050 %union([x = 0], [x = 1], [x = 1225])$
1052 to_poly_solve([sqrt(x-y) = 2, sqrt(x+y) = 5],[x,y]);
1053 %union([x = 29/2,y = 21/2])$
1055 /* problem from sage mailing list circa 2009-05-18 */
1057 to_poly_solve (Q*sqrt(Q^2 + 2) - 1, Q);
1058 %union([Q = 1/sqrt(1-sqrt(2))], [Q = 1/sqrt(sqrt(2)+1)]);
1060 (remvalue(e,s), remfunction(chk_sol),0);
1063 /* source code comment in /solver/linsolve.mac */
1065 nicedummies(to_poly_solve([x+y=p1-p2, x+3*y=p2-p3, 3*x-y=p1+p2+p3], [x,y], 'parameters = [p1,p2,p3]));
1066 %union(%if((p1 = %c0) %and (p2 = %c1) %and (p3 = 8*%c1-4*%c0),
1067    [x = (4*%c1-%c0)/2,y = -((6*%c1-3*%c0)/2)],%union()))$
1069 subst(a=1,to_poly_solve(log(x + sqrt(x^2-1))=a,x));
1070 %union([x = %e^-1*(%e^2+1)/2])$
1072 to_poly_solve(log(x+1)+log(x) = log(6)+log(5),x);
1073 %union([x = -6],[x = 5])$
1075 /* From RJF, Maxima mailing list, Tuesday, September 01, 2009 12:54PM */
1076 to_poly_solve((x-%pi)/sin(x)=0, x);
1077 %union()$
1079 to_poly_solve((sqrt(x)-1)/(x-1),x);
1080 %union()$
1082 to_poly_solve((x^2 - 2) * (sqrt(x)-1)/(x-1),x);
1083 %union([x = -sqrt(2)],[x = sqrt(2)])$
1085 nicedummies(to_poly_solve(sin(x)/x,x));
1086 %union(%if(%z0#0,[x=%pi*%z0],%union()))$
1088 /* From sci.math.symbolic, 29 September 2009; OK, but could be better. In the same
1089 thread is -3 + cosh(x) - cos(x) = 0. The to_poly_solve either takes a long time or
1090 gets stuck on -3 + cosh(x) - cos(x) = 0.*/
1092 nicedummies(to_poly_solve(-3+cosh(x)-sinh(x)/tanh(x) = 0,x));
1093 %union(%if(tan(%pi*%z0) # 0, [x = %i*%pi*%z0], %union()));
1095 /* From Sage Mailing list 8 Oct 2009, 3:21 a.m */
1097 to_poly_solve(acot(x)=0,x);
1098 %union()$
1100 to_poly_solve(x * log(x) * (x-1),x);
1101 %union([x = 1])$
1103 /* Sage Ticket 2617; see also Sage mailing list 18 March 2008 */
1105 nicedummies(to_poly_solve(sin(x^2)/x,x));
1106 %union(%if(%z0#0,[x=-sqrt(%pi)*sqrt(%z0)],%union()),%if(%z0#0,[x=sqrt(%pi)*sqrt(%z0)],%union()))$
1108 nicedummies(to_poly_solve(sin(x^2)/x^2,x));
1109 %union(%if(%z0#0,[x=-sqrt(%pi)*sqrt(%z0)],%union()),%if(%z0#0,[x=sqrt(%pi)*sqrt(%z0)],%union()))$
1111 nicedummies(to_poly_solve(sin(x^2)/x^3,x));
1112 %union(%if(%z0#0,[x=-sqrt(%pi)*sqrt(%z0)],%union()),%if(%z0#0,[x=sqrt(%pi)*sqrt(%z0)],%union()))$
1114 nicedummies(to_poly_solve(x^a = 1,x));
1115 %union([x = %e^(2*%i*%pi*%z0/a)])$
1117 nicedummies(to_poly_solve(x^(2*a) + 2 * x^a + 1,x));
1118 %union([x = (-1)^(1/a)*%e^(2*%i*%pi*%z0/a)])$
1120 nicedummies(to_poly_solve((x^a-1)/(x^2 + 1),x));
1121 %union([x = %e^(2*%i*%pi*%z0/a)])$
1123 /* Two equations from Axiom Developer mailing list Fri, 02 Oct 2009 13:29:29 -0600. There
1124 are other equations in this thread that the to_poly_solve cannot do:
1126   solve([ tan(bt)=(a*r)/(s*(r-d)), x=100*cos(bt), y=d*sin(bt)],[x,y,bt]),
1127   solve([bt=atan((a*r)/(s*(r-d))),x=100*cos(bt),y=d*sin(bt)],[x,y,bt]).
1128 */  
1130 to_poly_solve([a=3+x,b=1-x,x=2],[x], 'parameters=[a,b]);
1131 %union(%if((a = 5) %and (b = - 1), [x = 2], %union()))$
1133 nicedummies(to_poly_solve(tan(a)=b,a, 'simpfuncs = ['ratsimp]));
1134 %union([a = -((%i*log(-((b-%i)/(b+%i)))-2*%pi*%z0)/2)])$
1136 nicedummies(to_poly_solve(sin(x) = sin(x - p[0]),x));
1137 %union([x = (2*%pi*%z0+p[0]-%pi)/2])$
1139 nicedummies(to_poly_solve(sin(x) = cos(x),x));
1140 %union([x = (4*%pi*%z0+%pi)/4])$
1142 nicedummies(to_poly_solve(sin(x-5) - sin(5-x),x, 'simpfuncs = ['trigreduce]));
1143 %union([x=%pi*%z0+5])$
1145 nicedummies(to_poly_solve(cos(x-5) - cos(5-x),x, 'simpfuncs = ['trigreduce]));
1146 %union([x = %c0])$      
1148 nicedummies(to_poly_solve(cos(x^2-1)=0,x, 'simpfuncs = ['trigreduce]));
1149 %union([x=-sqrt(2*%pi*%z0+%pi+2)/sqrt(2)],[x=sqrt(2*%pi*%z0+%pi+2)/sqrt(2)])$
1151 to_poly_solve(log(x-sqrt(x-1)) = 0,x);
1152 %union([x = 1],[x = 2])$
1154 to_poly_solve(log(x-sqrt(x-1)) = log(2009),x);
1155 %union([x = (sqrt(29)*sqrt(277)+4019)/2])$
1157 /* From Sage developer Karl-Dieter Crisman (changed floats to rationals) */
1158 nicedummies(to_poly_solve(23040 *(4*%e^-(1200*t)-%e^-(300*t))^2-720000*(16*%e^-(1200*t)-%e^-(300*t))*
1159 ((4/125)*%e^-(300*t)-(4/125)*%e^-(1200*t)),t));
1160 %union([t = (2*%i*%pi*%z0+log(25/4-3*sqrt(41)/4))/900],[t = (2*%i*%pi*%z1+log(3*sqrt(41)/4+25/4))/900])$
1162 /* From 19 Aug 2010 Sage-support mailing list (reported by R. Hankin, 19 August, 2010) */
1163 (declare(a,complex, b,complex), 
1164    sol : ratsimp(nicedummies(%solve([a*b=15*%i-5,a*conjugate(b)=-13*%i+9],[a,b]))),0);
1167 sol : subst(%c0 = sqrt((13*%i-9)/(15*%i+5)), sol);
1168 %union([a=sqrt((13*%i-9)/(15*%i+5)),b=(15*%i-5)/sqrt((13*%i-9)/(15*%i+5))])$
1170 rectform(subst(first(sol), [a*b=15*%i-5,a*conjugate(b)=-13*%i+9]));
1171 [15*%i-5=15*%i-5,9-13*%i=9-13*%i]$
1173 /* enhanced catch_easy_cases--5 January 2013 */
1174 nicedummies(%solve(sin(x),x));
1175 %union([x=%pi*%z0])$
1177 nicedummies(%solve(cos(x),x));
1178 %union([x=(2*%pi*%z0+%pi)/2])$
1180 nicedummies(%solve(sin(5*x+7),x));
1181 %union([x=(%pi*%z0-7)/5])$
1183 expand(nicedummies(%solve(2013*sin(x)*cos(x),x)));
1184 %union([x=%pi*%z0+%pi/2],[x=%pi*%z1])$
1186 expand(nicedummies(%solve(2013*sin(x)*cos(x)*sin(sqrt(5)*x),x)));
1187 %union([x=%pi*%z0+%pi/2],[x=%pi*%z1],[x=(%pi*%z2)/sqrt(5)])$
1189 /* maybe this should be %union([x=-sqrt(%pi)*sqrt(%z0)],[x=sqrt(%pi)*sqrt(%z1)]) ... */
1190 nicedummies(%solve(sin(x^2),x));
1191 %union([x=-sqrt(%pi)*sqrt(%z0)],[x=sqrt(%pi)*sqrt(%z0)])$
1193 nicedummies(%solve(abs(x+7)*sin(x),x));
1194 %union([x=-7],[x=%pi*%z0])$
1196 nicedummies(%solve(abs(x+7)*sin(x)*cos(x),x));
1197 %union([x=-7],[x=(2*%pi*%z0+%pi)/2],[x=%pi*%z1])$
1199 nicedummies(%solve(tan(x)=tan(zzz),x));
1200 %union(%if((cos(zzz)#0) %and (cos(zzz+%pi*%z0)#0),[x=zzz+%pi*%z0],%union()))$
1202 expand(nicedummies(%solve(tan(x)=tan(%pi/4),x)));
1203 %union([x=%pi*%z0+%pi/4])$
1205 /* this could be better--so it goes */
1206 nicedummies(%solve(tan(x)=tan(%pi/5),x));
1207 %union(%if(cos((%pi*(5*%z0+1))/5)#0,[x=(5*%pi*%z0+%pi)/5],%union()))$
1209 /* conjugate(atanh(x)) doesn't simplify to atanh(x), by the way.*/
1210 %solve(conjugate(atanh(x)),x);
1211 %union([x=0])$
1213 %solve(conjugate(atanh(x/8+7)),x);
1214 %union([x=-56])$
1216 /* SF bug #3088: "string(a %or b) => ?%or(a,b)" */
1218 (kill (a, b, c, d), string (a %or b));
1219 "a %or b";
1221 string (a %or b %or c %or d);
1222 "a %or b %or c %or d";
1224 string (a %and b);
1225 "a %and b";
1227 string (a %and b %and c %and d);
1228 "a %and b %and c %and d";
1230 /* clean up */
1231 (print("time = ", absolute_real_time() - %start), is(absolute_real_time() - %start < 400));
1232 true$
1234 (reset(algexact), forget(z,complex,a,complex,b,complex), remvalue(sol,%time,eq,eqn1,eqn2,eqn3),0);