Recently I got a shocking discovery while working on "skyrmions". I am using Mathematica to help me in calculations. The calculation involves only derivatives, but different evaluations give different results, which are totally astonishing.

Here is the work.

  1. define a "skyrmion" with the "CP1 field" Z[x,y]:

    Z = {λ/Sqrt[(x^2 + y^2)^n + λ^2], (x + I y)^n/Sqrt[(x^2 + y^2)^n + λ^2]};
  2. compute the magnetization by the formula $\boldsymbol{m} = Z^{\dagger}.\boldsymbol{\sigma}_i.Z$

    m0 = (Conjugate[Z].PauliMatrix[#].Z) & /@ {1, 2, 3} // ComplexExpand;
    m = Simplify[m0, Assumptions -> x ∈ Reals && y ∈ Reals && λ ∈ Reals && n ∈ Integers]

    which gives $\left\{\frac{2 \lambda \left(x^2+y^2\right)^{n/2} \cos (n \arg (x+i y))}{\lambda ^2+\left(x^2+y^2\right)^n},\frac{2 \lambda \left(x^2+y^2\right)^{n/2} \sin (n \arg (x+i y))}{\lambda ^2+\left(x^2+y^2\right)^n},\frac{\lambda ^2-\left(x^2+y^2\right)^n}{\lambda ^2+\left(x^2+y^2\right)^n}\right\}$

  3. Calculate $(\partial_x \boldsymbol{m})^2 + (\partial_y \boldsymbol{m})^2$

    Simplify[Sum[D[m[[ii]], x]^2 + D[m[[ii]], y]^2, {ii, 1, 3}] // ComplexExpand, 
     Assumptions -> 
      x ∈ Reals && y ∈ Reals && λ ∈ Reals && n ∈ Integers]

    which gives $\frac{4 \lambda ^2 n^2 \left(x^2+y^2\right)^{n-1}}{\left(\lambda ^2+\left(x^2+y^2\right)^n\right)^2}$ on my computer (Mathematica 11 on both Linux and Windows).

This is bizarre because I know the correct answer should be TWICE the result.

So I tried to simplify the expression of m manually and replaced the code in step 2 by

m = {(2 (x^2 + y^2)^(n/2) λ Cos[n ArcTan[x, y]])/((x^2 + y^2)^n + λ^2),
       (2 (x^2 + y^2)^(n/2) λ Sin[
       n ArcTan[x, y]])/((x^2 + y^2)^n + λ^2),
       (-(x^2 + y^2)^n + λ^2)/((x^2 + y^2)^n + λ^2)};

where I've replaced Arg[x+ Iy] by ArcTan[x, y], which should be equivalent.

However, after this, reevaluating step 3 gives $\frac{8 \lambda ^2 n^2 \left(x^2+y^2\right)^{n-1}}{\left(\lambda ^2+\left(x^2+y^2\right)^n\right)^2}$

It is a critical moment for me because, if I am not to resolve this issue, I will give up using Mathematica, which I really don't want to.

Can anyone help me? Where is the problem? Anyone has similar problems before?

  • $\begingroup$ I think I should ask "how to prevent Simplify[] from giving wrong results based on nonsense intermediate results such as Arg'[] (the derivative of Arg[])" $\endgroup$ Jul 7, 2017 at 10:25

1 Answer 1


I think this is because Mathematica doesn't have rules for differentiation of Arg objects:

D[Arg[x+I y], x]

Derivative[1][Arg][x + I y]

Use ArcTan instead of Arg:

D[ArcTan[x, y], x]

-(y/(x^2 + y^2))

  • $\begingroup$ Yes! That is why I replaced the Arg[] in the result and used ArcTan. But what's chilling is, with the meaningless Arg'[] (derivative of Arg which is not defined) as intermediate result in step3, there is still an output. If I didn't know the correct answer, I may have believed that the naive Simplify[...] gives the answer! My worry is, how to prevent this from invalidating bigger calculations, which are in my next steps ... $\endgroup$ Jul 5, 2017 at 20:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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