Here is a trick that allows you to get exactly what you're looking for:
FourierTransform[
InverseFourierTransform[
x/y DiracDelta[x - y],
x, k],
k, x]
DiracDelta[x - y]
What I did here is to apply the Fourier transform and its inverse, which is of course the identity and therefore is equivalent to the original expression. But in doing so, Mathematica automatically did the required simplifications because it knows exactly how to deal with Dirac deltas inside Fourier integrals. By the way, Mathematica can even deal with derivatives of the delta function in the same way.
Edit
As stated by Nikki in the comment, it's important to keep track of which entry in the DiracDelta
is the intended integration variable. This is not always clear from just looking at the delta function because it is by definition symmetric. The choice of intended integration variable is specified in the InverseFourierTransform
above.
The reason why it's not done by Simplify
The ambiguity as to the integration variable is really the answer to the question why FullSimplify
doesn't do anything with DiracDelta
. Strictly speaking, DiracDelta
is a distribution and not a function. It picks out the value of a function given to it, at the position specified by a parameter. This operation happens to be symmetric in the example of the question in that parameter and function variable have interchangeable roles, but nonetheless their distinction becomes important when the argument of DiracDelta
is itself a function that depends on the "parameter" and the "variable" in an asymmetric way.
Take, for example, $y\,\delta(x-f(y))$. If we assume $x$ to be the integration variable, nothing needs to be simplified. If, on the other hand, $y$ is the integration variable, the simplification goal would be to let $y$ stand alone inside the delta function, requiring us to invert the function $f$. There is no way to decide which of these routes is desired unless you state whether $x$ or $y$ is the integration variable. This situation is illustrated in the examples below.
More examples
Sometimes you do have to add assumptions in order to get a fully simplified result, because Mathematica's default assumption that variables are complex also applies to DiracDelta
, and you may not want that. Here is an example, modified from the comment by Dr.Wolfgang:
Assuming[y > 0,
FourierTransform[
InverseFourierTransform[
(y/x DiracDelta[y - x^2]),
x, k], k, x]]
1/2 DiracDelta[x - Sqrt[y]] - 1/2 DiracDelta[x + Sqrt[y]]
This is an application of the transformation of variables formula for delta functions. We can push this to make even more symbolically general statements like this:
Assuming[y > 0 && n ∈ Integers && n > 0,
FourierTransform[
InverseFourierTransform[
(y/x DiracDelta[y - x^n]),
x, k], k, x]]
DiracDelta[x - y^(1/n)]/n
However, as you can see by comparison with the previous, more concrete result (n = 2
), the more general answer here is missing the fact that the inverse of the power has multiple branches which should be summed over. So I guess this is a caveat not to get carried away and always do a sanity check when simplifying complicated delta function expressions with Mathematica.
Assuming[x > 0 && y > 0 && x > y, FullSimplify[x/y DiracDelta[x - y]]]
gives zero. (I assume you are looking for zero as answer.) The point is, just telling M thatx>0
andy>0
, does not say anything about ifx==y
or not. $\endgroup$DiracDelta[x-y]
as an answer. I added the assumptions only to avoid a division by zero, so the constraint onx
is not needed. From the answer @Jens gave below, we can see that even that constraint is not necessary. $\endgroup$