Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

enter image description here

Why is the Out[74] not {1 - a, {x -> -1}}?

 Maximize[{Sqrt[x^2] - a, -1 <= x <= 1}, x]
{1 - a, {x -> -1}}
share|improve this question
Please post germane code, not pictures... – ciao Jun 19 '14 at 4:17
Plot it. Think about it. Then try Maximize[{(Abs[x] - a), -1 <= x <= 1}, {x, a}] and see what you get. It is not a but. – ciao Jun 19 '14 at 4:25
@rasher I may be overlooking something obvious, but isn't the maximum always going to be 1 - a? It's not clear to me why MMA would return a symbolic maximum in the other instances and not here. – mfvonh Jun 19 '14 at 4:47
I think it is a bug but it works it you assign an exact number to a – mastrok Jun 19 '14 at 6:09
Sometimes Mathematica cannot solve a problem. I think only the programmers working on this function would be able to decide whether this is a bug (i.e. it doesn't give an answer because something goes wrong an an unintended way inside the function) or it's just something Mathematica can't do. – Szabolcs Jun 19 '14 at 15:00

I suspect the reason this fails is because Mathematica does not know the derivative of Abs[x]. The reason behind this is Abs[x] is nowhere differentiable in the complex plane and Derivative and D take complex derivatives.

In Wolfram Alpha, we had to handle Abs ourselves assuming real variables since most people would want that. If you run WolframAlpha["derivative of Abs[x]"], you'll see the step-by-step solution specifies x is a real variable.

Since Derivative is not a protected symbol, we can add custom SubValues:

Derivative[1][Abs] = Sign;
Derivative[2][Abs] = Derivative[1][Sign] = DiracDelta;

Now Mathematica knows the (real) derivatives of these functions:

D[Abs[x], x]
(* Sign[x] *)

D[Abs[x], {x, 2}]
(* DiracDelta[x] *)

D[Sign[x], x]
(* DiracDelta[x] *)

Unfortunately this does not fix your Maximize issue:

Maximize[{Abs[x] - a, -1 <= x <= 1}, x]
(* Maximize[{-a + Abs[x], -1 <= x <= 1}, x] *)
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.