Merge branch 'master' of git://git.code.sf.net/p/maxima/code
[maxima.git] / share / to_poly_solve / rtest_to_poly_solve.mac
blob313cfc56baf2ca38b1e017017596a5d1b5da3f7d
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(sqrt(5)-1)/sqrt(2)],[x=-(sqrt(sqrt(5)+1)*%i)/sqrt(2)])$
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+(5*%pi)/6],[x=2*%pi*%z1+%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^(3/2))+%pi],[x=2*%pi*%z3+atan(2^(3/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(14)*sqrt(42)*cos(2)-sqrt(14))/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-%pi/6],
448              [x = 2*%pi*%z7+(5*%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+35)/6])$
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-3*sqrt(41))/4))/900],[t=(2*%i*%pi*%z1+log((3*sqrt(41)+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(50-2*5^(3/2))*%i)/8)-(sqrt(10-2*sqrt(5))*%i)/8
591                                                +sqrt(5)/4-1/4],
592               [x = (sqrt(50-2*5^(3/2))*%i)/8+(sqrt(10-2*sqrt(5))*%i)/8
593                                             +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,
599         a5=d5+(-%c2-%c1)*%c3,
600         b1=0,b2=%c3,r2=%c3+%c0,
601         r3=%c0*%c3,r4=%c1*%c3],
602         [a1=%c4,a2=(d5-%c5*%c7-%c5*%c6)/%c7,
603          a3=%c5,a5=0,b1=%c6,
604          b2=%c7,r2=%c7+%c4,
605          r3=%c4*%c7,r4=d5-%c5*%c7],
606         [a1=%c8,a2=%c9,a3=d5/%c10,
607         a5=0,b1=%c10,b2=0,r2=%c8,r3=0,r4=d5])$
609 /* Sun Apr 2 08:31:17 CDT 2006 */
610 block([eq : x^3-8*x^2-197*x-502], 
611    every(lambda([s], is(abs(subst(s,eq)) < 1.0e-12)), args(to_poly_solve(eq,x, simpfuncs = ['dfloat],algexact = true))));
612 true$
615 /* Mon Dec 17 06:08:28 CST 2007 */
616 to_poly_solve([x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],[x,y], 'use_grobner = true, 'simpfuncs=['expand]);
617 %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])$
619 /* Wed Mar 28 16:33:34 CDT 2007 */
620 to_poly_solve([(2*x+1)^3=13.5*(x^5+1)],[x],'simpfuncs=['rationalize], 'algexact=false);
621 %union([x=-2287278158804185/2251799813685248],[x=7473047756518961/9007199254740992],[x=1],[x=-(135947138237407*%i)/140737488355328-3665567315448253/9007199254740992],[x=(135947138237407*%i)/140737488355328-3665567315448253/9007199254740992])$
623 nicedummies(to_poly_solve(sin(x)=sin(x),x));
624 %union([x=%c0])$
626 to_poly_solve(0=1,x);
627 %union()$
629 /* Mon Jan 29 08:57:41 CST 2007 */
630 to_poly_solve([x+3*y=5,sqrt(x+y)-1=y],[x,y]);
631 %union([x=11-6*sqrt(2),y=2*sqrt(2)-2])$
633 /* more miscellaneous */
635 to_poly_solve(log(x+1) = log(a+1),x);
636 %union([x=a])$
638 to_poly_solve(log(x+1) = 2*log(a+1),x);
639 %union([x=a^2+2*a])$
641 to_poly_solve(log(x+1) = -log(a+1),x);
642 %union(%if(a+1 # 0,[x = -a/(a+1)],%union()))$
644 to_poly_solve(log(1+x)=-2*log(1+a),x, simpfuncs = ['ratsimp]);
645 %union(%if(a+1 # 0,[x = -((a^2+2*a)/(a^2+2*a+1))],%union()))$
647 to_poly_solve(log(x+1) = 5*log(a+1),x);
648 %union([x=a^5+5*a^4+10*a^3+10*a^2+5*a])$
650 to_poly_solve(x^(3/2)=1,x);
651 %union([x=1])$
653 to_poly_solve(x^(4/3)=1,x);
654 %union([x=1])$
656 to_poly_solve(x^(5/3)=1,x);
657 %union([x=1])$
659 to_poly_solve(x^4=1,x);
660 %union([x=-1],[x=1],[x=-%i],[x=%i])$
662 to_poly_solve(x^8=1,x, simpfuncs = ['rectform]);
663 %union([x=-1],[x=1],[x=-%i],[x=%i],
664        [x=-%i/sqrt(2)-1/sqrt(2)],[x=1/sqrt(2)-%i/sqrt(2)],
665        [x=%i/sqrt(2)+1/sqrt(2)])$
667 to_poly_solve(sqrt(x)+x^(3/2)=1,x, simpfuncs = ['expand]);
668 %union([x = sqrt(31)/(3*2^(2/3)*(sqrt(31)+3^(3/2))^(1/3))
669                 +sqrt(3)/(2^(2/3)*(sqrt(31)+3^(3/2))^(1/3))
670                 +2^(2/3)/(3*(sqrt(31)+3^(3/2))^(2/3))-2/3])$
672 to_poly_solve(a*x=b, x,'simpfuncs = ['rectform]);
673 %union([x=b/a])$
675 to_poly_solve(x^2 + a^2, [x,a],simpfuncs = ['nicedummies]);
676 %union([a=%c0,x=%i*%c0],[a=%c0,x=-%i*%c0])$
678 to_poly_solve(x^4 + a^4, [x,a],simpfuncs = ['nicedummies]);
679 %union([a=%c0,x=(-1)^(1/4)*%c0],[a=%c0,x=-(-1)^(1/4)*%i*%c0],
680        [a=%c0,x=-(-1)^(1/4)*%c0],[a=%c0,x=(-1)^(1/4)*%i*%c0])$
682 to_poly_solve((x-1)/(x+1) = 1, [x]);
683 %union()$
685 nicedummies(to_poly_solve(sin(x+a)=sin(x),a, simpfuncs = ['trigrat]));
686 %union([a = 2*%pi*%z0],[a = -2*x+2*%pi*%z1-%pi])$
688 to_poly_solve(cos(x+a)=cos(x),a, simpfuncs = ['trigrat,'nicedummies]);
689 %union([a=2*%pi*%z0],[a=2*%pi*%z0-2*x])$
691 to_poly_solve(tan(x+a)=tan(x),a, simpfuncs = ['nicedummies]);
692 %union(%if(cos(x)#0,[a=%pi*%z0],%union()))$
694 to_poly_solve(cosh(x+a)=cosh(x),a, 'simpfuncs = ['exponentialize, 'ratsimp, 'nicedummies]);
695 %union([a=2*%i*%pi*%z0],[a=2*%i*%pi*%z0-2*x])$
697 to_poly_solve(sin(x^2)=0,x, 'simpfuncs = ['nicedummies]);
698 %union([x=-sqrt(%pi)*sqrt(%z0)],[x=sqrt(%pi)*sqrt(%z0)])$
700 to_poly_solve(x^2+2*x+sqrt(5),x);
701 %union([x=-sqrt(1-sqrt(5))-1],[x=sqrt(1-sqrt(5))-1])$
703 /* nonsymbol solve */
705 to_poly_solve([x^2 + y^2 + x*y = 1, x^2 * y^2 = 2],[x^2 + y^2, x*y]);
706 %union([x*y=-sqrt(2),y^2+x^2=sqrt(2)+1],[x*y=sqrt(2),y^2+x^2=1-sqrt(2)])$
708 to_poly_solve([x + x*y = a, x*y = 8],[x,x*y]);
709 %union([x*y=8,x=a-8])$
711 to_poly_solve([x + x*y = a, x*y = 8 + z, x-z+78],[x,x*y,z]);
712 %union([x*y=(a+86)/2,x=(a-86)/2,z=(a+70)/2])$
714 to_poly_solve([abs(x*y-1) = a, a^2 - x*y],[x*y,a]);
715 %union([x*y=-((sqrt(5)-3)/2),a=(sqrt(5)-1)/2],[x*y=(sqrt(5)+3)/2,a=(sqrt(5)+1)/2])$
717 /* parameter solve */
718 to_poly_solve([m*x = b],[x], 'parameters = [m,b], 'simpfuncs = ['nicedummies]);
719 %union(%if((b=0)  %and  (m=0),[x=%c0],%union()),%if(m#0,[x=b/m],%union()))$
721 to_poly_solve([y^2+x^2=a^2,y+x=1],[x,y],'parameters=[a,b],'simpfuncs=['nicedummies,'expand]);
722 %union(%if(2*a^2-1#0,[x=-((sqrt(2*a^2-1)-1)/2),y=(sqrt(2*a^2-1)+1)/2],%union()),
723        %if(2*a^2-1#0,[x=(sqrt(2*a^2-1)+1)/2,y=-((sqrt(2*a^2-1)-1)/2)],%union()),
724        %if((a=-1/sqrt(2))  %and  (b=%c0),[x=1/2,y=1/2],%union()),
725        %if((a=1/sqrt(2)) %and (b=%c0),[x=1/2,y=1/2],%union()))$
727 to_poly_solve([x + y = a, x + y = b],[x,y], 'parameters = [a], 'simpfuncs = ['nicedummies]);
728 %union(%if(b-a=0,[x=%c0,y=b-%c0],%union()))$
730 to_poly_solve([x + y = a, x + a*y = b],[x,y], 'parameters = [a,b], 'simpfuncs = ['nicedummies,'expand]);
731 %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()))$
733 to_poly_solve([y+b*x=a,a*y+x=b],[x,y],'parameters=[],'simpfuncs=['nicedummies,'ratsimp]);
734 %union([x=-((b-a^2)/(a*b-1)),y=(b^2-a)/(a*b-1)])$
736 to_poly_solve([y+x=a,a*y+x=b],[x,y],'parameters=[a,b],'simpfuncs=['nicedummies, 'expand]);
737 %union(%if(a-1#0,[x=-((b-a^2)/(a-1)),y=(b-a)/(a-1)],%union()),
738 %if((a=1)  %and  (b=1),[x=%c0,y=1-%c0],%union()))$
740 /* Actual regressions */
741 to_poly_solve(sin(x+p)=sin(x),p, 'simpfuncs = ['trigrat, 'nicedummies]);
742 %union([p = 2*%pi*%z0],[p = -2*x+2*%pi*%z0-%pi])$
744 nicedummies(to_poly_solve(sin(s)=0, s));
745 %union([s=%pi*%z0])$
747 /* buglist equations--Some of these bugs have already been fixed in algsys / solve. So don't
748 think that to_poly_solve fixes these bugs. */
750 /*  [ 2041214 ] unable solve */
751 to_poly_solve([x+y=1,sqrt(x+1)=1],[x,y]);
752 %union([x=0,y=1])$
754 /* [ 1852178 ] Another solve() problem */
755 to_poly_solve([x^2+y^2=2^2,(x-1)^2+(y-1)^2=2^2],[x,y], 'use_grobner = true, 'simpfuncs=['expand]);
756 %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])$
758 /* [ 1845370 ] Division by 0 in solve() */
759 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
760  +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
761  +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]);
763 %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])$
765 /* [ 1663399 ] solve/algsys bug */
766 nicedummies(to_poly_solve([b2 + a1 = r2, a1 * b2 = r3, a2 * b2 + a3 * b1 = r4, a3
767   * b2 + a5 + r4= d5, a5 * b1 = 0],[a1, a2, a3, a5, r2, r3, r4, b1, b2], 'simpfuncs = ['expand]));
768 %union([a1 = %c0,a2 = %c1,a3 = %c2,a5 = d5-%c2*%c3-%c1*%c3,b1 = 0,
769                b2 = %c3,r2 = %c3+%c0,r3 = %c0*%c3,r4 = %c1*%c3],
770               [a1 = %c4,a2 = d5/%c7-(%c5*%c6)/%c7-%c5,a3 = %c5,a5 = 0,
771                b1 = %c6,b2 = %c7,r2 = %c7+%c4,r3 = %c4*%c7,r4 = d5-%c5*%c7],
772               [a1 = %c8,a2 = %c9,a3 = d5/%c10,a5 = 0,b1 = %c10,b2 = 0,
773                r2 = %c8,r3 = 0,r4 = d5])$
775 /* [ 1603369 ] Solve bind stack overflow */
776 to_poly_solve([product(x-i,i,1,20),x=5],x);
777 %union([x=5])$
779 to_poly_solve([product(x-i,i,1,75)],x);
780 ''(apply('%union, (makelist([x=i],i,1,75))))$
782 /* [ 1602426 ] solve([a=b,b=3],[a]) */
783 to_poly_solve([a=b,b=3],[a]);
784 %union()$
786 to_poly_solve([a=b,b=3],[a], 'parameters = [b]);
787 %union(%if(b-3=0,[a=3],%union()))$
789 /* [ 1570828 ] (lin)solve of inconsistent equations */
790 to_poly_solve([x=1,x=2],x);
791 %union()$
793 /* [ 1452341 ] solve(x^(5/2)+1,x) produces incorrect roots */
794 to_poly_solve(1+x^(5/2),x, 'simpfuncs = ['expand]);
795 %union([x = (-(sqrt(50-2*5^(3/2))*%i)/8)-(sqrt(10-2*sqrt(5))*%i)/8
796                                               +sqrt(5)/4-1/4],
797              [x = (sqrt(50-2*5^(3/2))*%i)/8+(sqrt(10-2*sqrt(5))*%i)/8
798                                            +sqrt(5)/4-1/4])$
800 /* [ 1105366 ] SOLVE gives a wrong answer */
801 nicedummies(to_poly_solve(sqrt(%e^(2*t)*sin(t)^2+%e^(2*t)*cos(t)^2+3*%e^(2*t))=2,t));
802 %union([t=%i*%pi*%z0])$
804 /* [ 932395 ] solve confused by ratvars */
805 nicedummies(to_poly_solve(rat(a+c,a,b,c,d),[a,b]));
806 %union([a=-c,b=%c0])$
808 /* [ 826915 ] Solve wrong with irreducible polydecomp */
809 block([sol, eq], 
810    eq :  (x^5+x-3)^5+x^5+x-6, 
811    sol : to_poly_solve(eq,x, 'simpfuncs = ['dfloat],'algexact=false),
812    every(lambda([s], is(cabs(subst(s, eq)) < 1.0e-6)), args(sol)));
813 true$
815 /* [ 607079 ] solve with repeated variable */
816 to_poly_solve([x=1],[x,x]);
817 %union([x=1])$
819 /* [ 589970 ] Solve of quadratic gives error */
820 to_poly_solve((4*k^2-4)*y^2 + (4-4*k^2)*y + 6*k^2-1,y);
821 %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)])$
823 to_poly_solve((4*k^2-4)*y^2 + (4-4*k^2)*y + 6*k^2-1,y, 'parameters = [k]);
824 %union(%if(k=0,[y=1/2],%union()),
825 %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()),
826 %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()))$
828 /* Lambert solver */
830 to_poly_solve(x*exp(x) = a,x);
831 %union([x=lambert_w(a)])$
833 to_poly_solve(exp(x) = a/x,x);
834 %union([x = lambert_w(a)])$
836 to_poly_solve(56 * %e^(x) * x - a,x);
837 %union([x='lambert_w(a/56)])$
839 to_poly_solve(5^x * x = 42,x);
840 %union([x = lambert_w(42*log(5))/log(5)])$
842 to_poly_solve(5^(x^2 - 1) * (x^2-1) / %pi = 42,x);
843 %union([x = -sqrt(lambert_w(42*%pi*log(5))+log(5))/sqrt(log(5))],
844        [x = sqrt(lambert_w(42*%pi*log(5))+log(5))/sqrt(log(5))])$
845             
846 /* Examples from wikipedia.org -- http://en.wikipedia.org/wiki/Lambert_W_function*/
848 to_poly_solve(2^x = 5*x,x);
849 %union([x = -lambert_w(-log(2)/5)/log(2)])$
851 to_poly_solve(x^x = z,x);
852 %union([x = log(z)/lambert_w(log(z))])$
854 to_poly_solve(x * log(x) = a,x);
855 %union([x = a / lambert_w(a)])$ 
857 /* one-to-one cruncher & related */
859 to_poly_solve(exp(x) = exp(x^2-1),x, 'simpfuncs = ['nicedummies]);
860 %union([x=-((sqrt(5-8*%i*%pi*%z0)-1)/2)],[x=(sqrt(5-8*%i*%pi*%z0)+1)/2])$
862 to_poly_solve(exp(x) - exp(x^2-1),x, 'simpfuncs = ['nicedummies]);
863 %union([x=-((sqrt(5-8*%i*%pi*%z0)-1)/2)],[x=(sqrt(5-8*%i*%pi*%z0)+1)/2])$
865 to_poly_solve(x = sqrt(x) -1/4,x, 'simpfuncs = ['nicedummies]);
866 %union([x=1/4])$
868 to_poly_solve(x = sqrt(x) + a * %i,x, 'simpfuncs = ['nicedummies]);
869 %union(%if((-%pi/2<parg(-((sqrt(4*%i*a+1)-1)/2)))  %and  (parg(-((sqrt(4*%i*a+1)-1)/2))<=%pi/2),
870 [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()))$
872 /* previously commented out */
874 to_poly_solve(log(x+1) - log(x-67) = log(a+1) - log(a-67),x);
875 %union(%if((a-67#0) %and (a+1#0),[x=a],%union()))$
877 /* f(x) = f(a) equations */
878 to_poly_solve(log(x)=log(a),x);
879 %union([x=a])$
881 to_poly_solve(exp(x)=exp(a),x, simpfuncs = ['nicedummies]);
882 %union([x=a+2*%i*%pi*%z0])$
884 to_poly_solve(exp(x*(x-1))=exp(a*(a-1)),x, simpfuncs = ['nicedummies]);
885 %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])$
887 to_poly_solve(log(x*(x-1))=log(a*(a-1)),x, simpfuncs = ['nicedummies]);
888 %union([x=1-a],[x=a])$
890 block([algebraic : true], to_poly_solve(x^(3/2) = (1 + %i) / sqrt(2),x, simpfuncs = ['rectform]));
891 %union([x=%i/2+sqrt(3)/2])$
893 block([algebraic : true], to_poly_solve(x^(3/2) = (-1 + %i) / sqrt(2),x, simpfuncs = ['rectform]));
894 %union([x=-%i/2-sqrt(3)/2],[x=%i])$
896 block([algebraic : true], to_poly_solve(x^(3/2) = (-1 - %i) / sqrt(2),x, simpfuncs = ['rectform]));
897 %union([x=%i/2-sqrt(3)/2],[x=-%i])$
899 block([algebraic : true], to_poly_solve(x^(3/2) = - 1,x, simpfuncs = ['rectform]));
900 %union([x=-(sqrt(3)*%i)/2-1/2],[x=(sqrt(3)*%i)/2-1/2])$
902 block([algebraic : true], to_poly_solve(x^(3/2) = 1,x, simpfuncs = ['rectform]));
903 %union([x=1])$
905 block([algebraic : true], to_poly_solve(x^(3/2) = (1/2 + sqrt(3) * %i/2),x, simpfuncs = ['rectform]));
906 %union([x=%i*sin((2*%pi)/9)+cos((2*%pi)/9)])$
908 sol : to_poly_solve([x/a = a/x],[x], 'parameters = ['a]);
910 %union(%if(a#0,[x=-a],%union()),%if(a#0,[x=a],%union()))$
912 ev(sol);
913 %union(%if(a#0,[x=-a],%union()),%if(a#0,[x=a],%union()))$
915 /* Maxima testsuite */
916 to_poly_solve('diff(y,x),'diff(y,x));
917 %union(['diff(y,x,1)=0])$
919 nicedummies(to_poly_solve(5^f(x) = 125,f(x)));
920 %union([f(x)=(2*%i*%pi*%z0+log(125))/log(5)])$
922 to_poly_solve ('[x = 1], '[x, x]);
923 %union([x=1])$
925 to_poly_solve ('[u = v], '[u, u, u, u]);
926 %union([u = v])$
928 /* The use_grobner is a workaround for an algsys bug, I think.*/
929 nicedummies(to_poly_solve(asin(cos(x)),x, 'use_grobner = true));
930 %union([x=(2*%pi*%z0+%pi)/2])$
932 to_poly_solve ([x + 2*y = 5, 2*x - y = 5], [x, y]);
933 %union([x = 3, y = 1])$
935 to_poly_solve(sec(x)=0,x);
936 %union()$
938 to_poly_solve(csc(x)=0,x);
939 %union()$
941 to_poly_solve(csc(x*(x-1))=0,x);
942 %union()$
944 to_poly_solve(sech(x)=0,x);
945 %union()$
947 to_poly_solve(cot(x)=0,x, 'simpfuncs = ['expand,'nicedummies]);
948 %union([x=%pi*%z0+%pi/2])$
950 to_poly_solve(tan(x)=0,x, 'simpfuncs = ['nicedummies]);
951 %union([x=%pi*%z0])$
953 to_poly_solve(asin(x)=1/2,x, 'simpfuncs = ['expand,'demoivre, 'expand]);
954 %union([x=sin(1/2)])$
956 to_poly_solve(asin(x^2)=1/5,x, 'simpfuncs = ['expand,'demoivre, 'expand]);
957 %union([x=-sqrt(sin(1/5))],[x=sqrt(sin(1/5))])$
959 to_poly_solve(asin(sqrt(x))=1/5,x, 'simpfuncs = ['expand,'demoivre,'expand]);
960 %union([x = sin(1/5)^2])$
962 to_poly_solve(acos(sqrt(x))=1/5,x, 'simpfuncs = ['expand,'demoivre,'expand]);
963 %union([x = cos(1/5)^2])$
965 to_poly_solve(acos(x)=1/5,x, 'field = 'complex,'simpfuncs = ['expand,'demoivre, 'expand]);
966 %union([x=cos(1/5)])$
968 to_poly_solve(taylor(cos(x),x,0,4),x);
969 %union([x = -sqrt(6-2*sqrt(3))],[x = sqrt(6-2*sqrt(3))],
970              [x = -sqrt(2*sqrt(3)+6)],[x = sqrt(2*sqrt(3)+6)])$
972 to_poly_solve(taylor(sin(x),x,0,4),x);
973 %union([x=0],[x=-sqrt(6)],[x=sqrt(6)])$
975 nicedummies(to_poly_solve(a,x, 'parameters = [a]));
976 %union(%if(a=0,[x=%c0],%union()))$
978 nicedummies(to_poly_solve(a,x, 'parameters = []));
979 %union()$
981 nicedummies(to_poly_solve(a, x, 'parameters = [a,b]));
982 %union(%if((a=0)  %and  (b=%c0),[x=%c1],%union()))$
984 to_poly_solve(abs(x) = 0,x);
985 %union([x=0])$
987 (declare(z,complex),0);
990 to_poly_solve(abs(z) = 0,z);
991 %union([z=0])$
993 to_poly_solve(abs(x)*e = 10,[x]);
994 %union(%if(isnonnegative_p(10/e),[x=-10/e],%union()),%if(isnonnegative_p(10/e),[x=10/e],%union()))$
996 /* Maxima mailing list, "Equation with conjugate()," October 21, 2008 11:30AM */
997 to_poly_solve(z*conjugate(z)+3*(z-conjugate(z))=13+12*%i, z);
998 %union([z=2*%i-3],[z=2*%i+3])$
1000 to_poly_solve(x^(3)=1,x, 'simpfuncs = ['log,'polarform]);
1001 %union([x = 0],[x = -(2*%i*%pi/3)],[x = 2*%i*%pi/3])$
1003 to_poly_solve(x^(3)+x^2 + x + 1,x, 'simpfuncs = ['log,'polarform]);
1004 %union([x = -(%i*%pi/2)],[x = %i*%pi/2],[x = %i*%pi])$
1006 /* Next two equations are from comp.soft-sys.math.maple, 25 Oct 2008 */
1008 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]));
1009 %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()))$
1011 nicedummies(to_poly_solve(a*x=0, [x], 'parameters = ['a]));
1012 %union(%if(a = 0, [x = %c0], %union()), %if(a # 0, [x = 0], %union()))$
1014 /* inverse trig */
1016 to_poly_solve(asin(1/x) =3/8,x, 'simpfuncs =['expand]);
1017 %union([x = 1/sin(3/8)])$
1019 to_poly_solve(acos(1/x) =3/8,x, 'simpfuncs =['expand]);
1020 %union([x = 1/cos(3/8)])$
1022 to_poly_solve(acos(x) =  acos(a),x, 'simpfuncs =['expand]);
1023 %union([x=a])$
1025 to_poly_solve(min(x,1) = 1/2,x);
1026 %union([x = 1/2])$
1028 to_poly_solve(min(x,1) = a,x);
1029 %union(%if(isnonnegative_p(1 - a), [x = a], %union()))$
1032 to_poly_solve([sqrt(x) - 1], [x]);
1033 %union([x = 1])$
1035 to_poly_solve([x^(1/3) = 1],[x]);
1036 %union([x = 1])$
1038 to_poly_solve([x^(1/4) = 1],[x]);
1039 %union([x = 1])$
1041 to_poly_solve([max(x,1)-5],[x]);
1042 %union([x = 5])$
1044 to_poly_solve([min(x,1) = max(2,7-x)],[x]);
1045 %union()$
1047 to_poly_solve([abs(1-abs(1-abs(x))) = 42],[x]);
1048 %union([x = - 44], [x = 44])$
1050 to_poly_solve([sqrt(x) = 10 - sqrt(x-1)],[x]);
1051 %union([x = 10201/400])$
1053 to_poly_solve([sqrt(x) = min(x,35)],[x]);
1054 %union([x = 0], [x = 1], [x = 1225])$
1056 to_poly_solve([sqrt(x-y) = 2, sqrt(x+y) = 5],[x,y]);
1057 %union([x = 29/2,y = 21/2])$
1059 /* problem from sage mailing list circa 2009-05-18 */
1061 to_poly_solve (Q*sqrt(Q^2 + 2) - 1, Q);
1062 %union([Q=-sqrt(-sqrt(2)-1)],[Q=(sqrt(2)-1)*sqrt(sqrt(2)+1)])$
1064 (remvalue(e,s), remfunction(chk_sol),0);
1067 /* source code comment in /solver/linsolve.mac */
1069 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]));
1070 %union(%if((p1 = %c0) %and (p2 = %c1) %and (p3 = 8*%c1-4*%c0),
1071    [x = (4*%c1-%c0)/2,y = -((6*%c1-3*%c0)/2)],%union()))$
1073 subst(a=1,to_poly_solve(log(x + sqrt(x^2-1))=a,x));
1074 %union([x = %e^-1*(%e^2+1)/2])$
1076 to_poly_solve(log(x+1)+log(x) = log(6)+log(5),x);
1077 %union([x = -6],[x = 5])$
1079 /* From RJF, Maxima mailing list, Tuesday, September 01, 2009 12:54PM */
1080 to_poly_solve((x-%pi)/sin(x)=0, x);
1081 %union()$
1083 to_poly_solve((sqrt(x)-1)/(x-1),x);
1084 %union()$
1086 to_poly_solve((x^2 - 2) * (sqrt(x)-1)/(x-1),x);
1087 %union([x = -sqrt(2)],[x = sqrt(2)])$
1089 nicedummies(to_poly_solve(sin(x)/x,x));
1090 %union(%if(%z0#0,[x=%pi*%z0],%union()))$
1092 /* From sci.math.symbolic, 29 September 2009; OK, but could be better. In the same
1093 thread is -3 + cosh(x) - cos(x) = 0. The to_poly_solve either takes a long time or
1094 gets stuck on -3 + cosh(x) - cos(x) = 0.*/
1096 nicedummies(to_poly_solve(-3+cosh(x)-sinh(x)/tanh(x) = 0,x));
1097 %union(%if(tan(%pi*%z0) # 0, [x = %i*%pi*%z0], %union()));
1099 /* From Sage Mailing list 8 Oct 2009, 3:21 a.m */
1101 to_poly_solve(acot(x)=0,x);
1102 %union()$
1104 to_poly_solve(x * log(x) * (x-1),x);
1105 %union([x = 1])$
1107 /* Sage Ticket 2617; see also Sage mailing list 18 March 2008 */
1109 nicedummies(to_poly_solve(sin(x^2)/x,x));
1110 %union(%if(%z0#0,[x=-sqrt(%pi)*sqrt(%z0)],%union()),%if(%z0#0,[x=sqrt(%pi)*sqrt(%z0)],%union()))$
1112 nicedummies(to_poly_solve(sin(x^2)/x^2,x));
1113 %union(%if(%z0#0,[x=-sqrt(%pi)*sqrt(%z0)],%union()),%if(%z0#0,[x=sqrt(%pi)*sqrt(%z0)],%union()))$
1115 nicedummies(to_poly_solve(sin(x^2)/x^3,x));
1116 %union(%if(%z0#0,[x=-sqrt(%pi)*sqrt(%z0)],%union()),%if(%z0#0,[x=sqrt(%pi)*sqrt(%z0)],%union()))$
1118 nicedummies(to_poly_solve(x^a = 1,x));
1119 %union([x = %e^(2*%i*%pi*%z0/a)])$
1121 nicedummies(to_poly_solve(x^(2*a) + 2 * x^a + 1,x));
1122 %union([x = (-1)^(1/a)*%e^(2*%i*%pi*%z0/a)])$
1124 nicedummies(to_poly_solve((x^a-1)/(x^2 + 1),x));
1125 %union([x = %e^(2*%i*%pi*%z0/a)])$
1127 /* Two equations from Axiom Developer mailing list Fri, 02 Oct 2009 13:29:29 -0600. There
1128 are other equations in this thread that the to_poly_solve cannot do:
1130   solve([ tan(bt)=(a*r)/(s*(r-d)), x=100*cos(bt), y=d*sin(bt)],[x,y,bt]),
1131   solve([bt=atan((a*r)/(s*(r-d))),x=100*cos(bt),y=d*sin(bt)],[x,y,bt]).
1132 */  
1134 to_poly_solve([a=3+x,b=1-x,x=2],[x], 'parameters=[a,b]);
1135 %union(%if((a = 5) %and (b = - 1), [x = 2], %union()))$
1137 nicedummies(to_poly_solve(tan(a)=b,a, 'simpfuncs = ['ratsimp]));
1138 %union([a = -((%i*log(-((b^2+1)/(b^2+2*%i*b-1)))-2*%pi*%z0)/2)])$
1140 nicedummies(to_poly_solve(sin(x) = sin(x - p[0]),x));
1141 %union([x = (2*%pi*%z0+p[0]-%pi)/2])$
1143 nicedummies(to_poly_solve(sin(x) = cos(x),x));
1144 %union([x = (4*%pi*%z0+%pi)/4])$
1146 nicedummies(to_poly_solve(sin(x-5) - sin(5-x),x, 'simpfuncs = ['trigreduce]));
1147 %union([x=%pi*%z0+5])$
1149 nicedummies(to_poly_solve(cos(x-5) - cos(5-x),x, 'simpfuncs = ['trigreduce]));
1150 %union([x = %c0])$      
1152 nicedummies(to_poly_solve(cos(x^2-1)=0,x, 'simpfuncs = ['trigreduce]));
1153 %union([x=-sqrt(2*%pi*%z0+%pi+2)/sqrt(2)],[x=sqrt(2*%pi*%z0+%pi+2)/sqrt(2)])$
1155 to_poly_solve(log(x-sqrt(x-1)) = 0,x);
1156 %union([x = 1],[x = 2])$
1158 to_poly_solve(log(x-sqrt(x-1)) = log(2009),x);
1159 %union([x = (sqrt(8033)+4019)/2])$
1161 /* From Sage developer Karl-Dieter Crisman (changed floats to rationals) */
1162 nicedummies(to_poly_solve(23040 *(4*%e^-(1200*t)-%e^-(300*t))^2-720000*(16*%e^-(1200*t)-%e^-(300*t))*
1163 ((4/125)*%e^-(300*t)-(4/125)*%e^-(1200*t)),t));
1164 %union([t = (2*%i*%pi*%z0+log((25-3*sqrt(41))/4))/900],
1165               [t = (2*%i*%pi*%z1+log((3*sqrt(41)+25)/4))/900])$
1167 /* From 19 Aug 2010 Sage-support mailing list (reported by R. Hankin, 19 August, 2010) */
1168 (declare(a,complex, b,complex), 
1169    sol : ratsimp(nicedummies(%solve([a*b=15*%i-5,a*conjugate(b)=-13*%i+9],[a,b]))),0);
1172 sol : subst(%c0 = sqrt((13*%i-9)/(15*%i+5)), sol);
1173 %union([a=sqrt((13*%i-9)/(15*%i+5)),b=(15*%i-5)/sqrt((13*%i-9)/(15*%i+5))])$
1175 rectform(subst(first(sol), [a*b=15*%i-5,a*conjugate(b)=-13*%i+9]));
1176 [15*%i-5=15*%i-5,9-13*%i=9-13*%i]$
1178 /* enhanced catch_easy_cases--5 January 2013 */
1179 nicedummies(%solve(sin(x),x));
1180 %union([x=%pi*%z0])$
1182 nicedummies(%solve(cos(x),x));
1183 %union([x=(2*%pi*%z0+%pi)/2])$
1185 nicedummies(%solve(sin(5*x+7),x));
1186 %union([x=(%pi*%z0-7)/5])$
1188 expand(nicedummies(%solve(2013*sin(x)*cos(x),x)));
1189 %union([x=%pi*%z0+%pi/2],[x=%pi*%z1])$
1191 expand(nicedummies(%solve(2013*sin(x)*cos(x)*sin(sqrt(5)*x),x)));
1192 %union([x=%pi*%z0+%pi/2],[x=%pi*%z1],[x=(%pi*%z2)/sqrt(5)])$
1194 /* maybe this should be %union([x=-sqrt(%pi)*sqrt(%z0)],[x=sqrt(%pi)*sqrt(%z1)]) ... */
1195 nicedummies(%solve(sin(x^2),x));
1196 %union([x=-sqrt(%pi)*sqrt(%z0)],[x=sqrt(%pi)*sqrt(%z0)])$
1198 nicedummies(%solve(abs(x+7)*sin(x),x));
1199 %union([x=-7],[x=%pi*%z0])$
1201 nicedummies(%solve(abs(x+7)*sin(x)*cos(x),x));
1202 %union([x=-7],[x=(2*%pi*%z0+%pi)/2],[x=%pi*%z1])$
1204 nicedummies(%solve(tan(x)=tan(zzz),x));
1205 %union(%if((cos(zzz)#0) %and (cos(zzz+%pi*%z0)#0),[x=zzz+%pi*%z0],%union()))$
1207 expand(nicedummies(%solve(tan(x)=tan(%pi/4),x)));
1208 %union([x=%pi*%z0+%pi/4])$
1210 /* this could be better--so it goes */
1211 nicedummies(%solve(tan(x)=tan(%pi/5),x));
1212 %union(%if(cos((%pi*(5*%z0+1))/5)#0,[x=(5*%pi*%z0+%pi)/5],%union()))$
1214 /* conjugate(atanh(x)) doesn't simplify to atanh(x), by the way.*/
1215 %solve(conjugate(atanh(x)),x);
1216 %union([x=0])$
1218 %solve(conjugate(atanh(x/8+7)),x);
1219 %union([x=-56])$
1221 /* SF bug #3088: "string(a %or b) => ?%or(a,b)" */
1223 (kill (a, b, c, d), string (a %or b));
1224 "a %or b";
1226 string (a %or b %or c %or d);
1227 "a %or b %or c %or d";
1229 string (a %and b);
1230 "a %and b";
1232 string (a %and b %and c %and d);
1233 "a %and b %and c %and d";
1235 /* clean up */
1236 (print("time = ", absolute_real_time() - %start), is(absolute_real_time() - %start < 400),true);
1237 true$
1239 (reset(algexact), kill(all),0);