6
$\begingroup$

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}}
$\endgroup$
9
  • $\begingroup$ Please post germane code, not pictures... $\endgroup$
    – ciao
    Jun 19, 2014 at 4:17
  • 1
    $\begingroup$ 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. $\endgroup$
    – ciao
    Jun 19, 2014 at 4:25
  • 2
    $\begingroup$ @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. $\endgroup$
    – mfvonh
    Jun 19, 2014 at 4:47
  • $\begingroup$ I think it is a bug but it works it you assign an exact number to a $\endgroup$
    – mastrok
    Jun 19, 2014 at 6:09
  • 2
    $\begingroup$ 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. $\endgroup$
    – Szabolcs
    Jun 19, 2014 at 15:00

1 Answer 1

6
$\begingroup$

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] *)
$\endgroup$
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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