Comment #2 on issue 4046 by [email protected]: solving equation with multiple abs runs into problems if symbols are real
http://code.google.com/p/sympy/issues/detail?id=4046

So the problem is that the trick of replacing |x| with sqrt(x**2) fails if x has real assumptions. The mul.flatten routine will end up rebuilding the original |x|. The workaround is to not use symbols with assumptions. I haven't figured out a good way to do this in solve that isn't hackish.

One thing that would help is if abs expressions could be re-written as a Piecewise so that abs(x-2) - abs(x-4) -> Piecewise((-2,x<=2),(2*x - 6, And(x>2,x<4)),(2, True)). Then that Piecewise could be solved.

Meanwhile, it would be nice to have an error message displayed to guide the user to use vanilla symbols. There isn't a vanillify function but something like this could be used:

def vanilla(eq):
  s = [s for s in eq.free_symbols if s.assumptions0]
  return eq.xreplace(dict([(s, Dummy(s.name)) for s in s]))


--
You received this message because this project is configured to send all issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings

--
You received this message because you are subscribed to the Google Groups 
"sympy-issues" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy-issues.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to