# The simplification of complex functions containing Abs and the calculation of its derivatives

In Mathematica, function Abs is not differentiable unless you make an extra assumption that the argument is real

FullSimplify[D[Abs[x], x], Assumptions->{x \[Element] Real}]


This code will give the result Sign[x]. However, what should I do if the argument is complex. Let me give an example.(Where F is a matrix function of 4 variables Omega, omega, qx and qy, I don't show its explicit form here, which is not important, just focus on the result)

FullSimplify[Normalize[Eigenvectors[F[omega, Omega, qx, qy]][[3]]

/.{Omega->0.4}][[1]],Assumptions->{{omega, qx, qy} \[Element] Reals}]


The above code will give a tedious expression

Look at its denominator, which contains an abs function

Abs[(1+E^{I qx})/(1+E^{I qy})]^2


As we know, when the argument is complex, Abs means modulus. So the above expression should be equal to(1+Cos[x])/(1+Cos[y]) But why Mathematica cannot simplify it?

Someone told me to add ComplexExpand within the FullSimplify function, it does work for a simple expression like Abs[1+E^{I qx}].But when applying this to a complicated expression like I gave above, it failed. It took my computer more than 12 hours to evaluate, and it is still running now... ...

So what can I do now? I must get the fully simplified version of the abs function. Because I need to calculate the gradient of that tedious expression in {qx,qy} space. If I just do this to that expression, it will give me something like Abs', which is a desirable result.

If someone is willing to help, I will be very grateful, and I can provide more details of this problem if needed.

fun = Abs[(1 + E^{I qx})/(1 + E^{I qy})]^2;