I've made some changes to to_poly_solve. For one, %solve is an alias for
to_poly_solve.
Also:
Return a nounform for cases %solve is unable to find a solution set:
(%i22) %solve([a*x^42+x^2-1],[x]);
(%o22) %solve([a*x^42+x^2-1],[x])
Substitution into a nounform should work:
(%i23) sublis([a=0],%);
(%o23) %union([x = -1],[x = 1])
Call Fourier elimination on linear inequalities:
(%i24) %union([y+5 < x,x < 1-y,y < -2]);
(%o24) %union([y+5 < x,x < 1-y,y < -2])
A somewhat improved Lambert W solver:
(%i25) %solve(x^x = 2009,x);
(%o25) %union([x = log(2009)/lambert_w(log(2009))])
Better rejection of spurious solutions:
(%i26) nicedummies(%solve(sin(x) / x = 0,x));
(%o26) %union(%if(2*%z0+1 # 0,[x = 2*%pi*%z0+%pi],%union()),
%if(%z1 # 0,[x = 2*%pi*%z1],%union()))
(%i27) sublis([%z1 = 0],%);
(%o27) %union(%if(2*%z0+1 # 0,[x = 2*%pi*%z0+%pi],%union()))
It would be nice if Maxima "knew" that 2 * integer + 1 # 0 is true. Another
day.
I hope that these changes are mostly agreeable. I even updated the
to_poly_solve user documentation. Suggestions and bug reports are
always appreciated. And I do thank all of you that have already
pitched in and helped in various ways.
Barton