There is a small mistake in that you need to use a unit vector. But, other than that, you are right and Wolfram is wrong. What happens is that the computer is using the gradient to calculate the directional derivative. But the formula to calculate the directional derivative using the gradient uses the chain rule, which assumes the function to be differentiable. Your function is not differentiable at $(0,0)$, so the gradient cannot be used to find the directional derivatives there.
It is worth mentioning that WA is making a second mistake: since the partial derivatives are not continuous at $(0,0)$, they cannot be calculated using differentiation rules (and I don't really know how they get the value zero). Calculating explicitly,
$$
\frac{\partial f}{\partial x}f(0,0)=\lim_{h\to 0}\frac{h^3}{h(h^2+0)}=1,
$$
$$
\frac{\partial f}{\partial y}f(0,0)=\lim_{h\to 0}\frac{0}{h(0+h^2)}=0.
$$
Still, the formula $(a,b)\cdot\nabla f(0,0)=a$ gives the wrong result because $f$ is not differentiable.
Mathematica, and consequently WolframAlpha, does not have built-in capability to evaluate arbitrary multivariate limits. Therefore, the command
Limit[x y/(x^2 + y^2), x -> 0]
gives $0$, but
Limit[x y/(x^2 + y^2) /. x -> y, {y -> 0}]
yields $1/2$. The path-dependence of the limit can only be handled when a path is specified. This is something that many users of WolframAlpha misunderstand about Limit
. If you write
Limit[x y/(x^2 + y^2), {x -> 0, y -> 0}]
Mathematica will simply thread Limit[]
over the list of replacement rules {x -> 0, y -> 0}
, producing the output $\{0,0\}$. To get a better understanding of what it's doing, try the command
Limit[x y/(x^2 + y^2), {x -> 1, y -> 2, x -> 3}]
Clearly, it doesn't behave the way one might think it should behave. And if you think you can write
Limit[x y/(x^2 + y^2), {x,y} -> {0,0}]
you get an error, because {x,y}
is not a valid variable for Limit
. This error definitely shows that such multivariate limits are not within the scope of Mathematica's functionality.
Now, that doesn't mean that WolframAlpha can't be a bit smarter than Mathematica's built in Limit
: if you enter
http://www.wolframalpha.com/input/?i=Limit+of+x+y%2F(x%5E2%2By%5E2)+as+(x,y)+tends+to+(0,0)
You will get the proper response, but if you enter
http://www.wolframalpha.com/input/?i=Limit+of+x+y%5E3%2F(x%5E2%2By%5E6)+as+(x,y)+tends+to+(0,0)
you get a wrong response, because again, WolframAlpha is built on Mathematica's functionality. While it can handle some special queries, I suspect that these are probably pre-programmed somehow, or that they were special (but common) queries that were added to the knowledge base. In any case, I would not rely on WolframAlpha or Mathematica to handle multivariate limits.
Best Answer
Pretty simply, we have $$ |xy|=\max(|x|,|y|)\min(|x|,|y|)\tag{1} $$ and $$ |x|+|y|\ge2\min(|x|,|y|)\tag{2} $$ Therefore, $$ \left|\frac{xy}{|x|+|y|}\right|\le\frac{\max(|x|,|y|)}{2}\tag{3} $$ Thus, $$ \lim_{(x,y)\to(0,0)}\left|\frac{xy}{|x|+|y|}\right|\le\lim_{(x,y)\to(0,0)}\frac{\max(|x|,|y|)}{2}=0\tag{4} $$