I am using TransformedField to convert a system of ODEs from Cartesian to polar coordinates:

  "Cartesian" -> "Polar",
  {μ x1 - x2 -  σ x1 (x1^2 + x2^2), x1 + μ x2 - σ x2 (x1^2 + x2^2)}, 
  {x1, x2} -> {r, θ}
] // Simplify

and I get the result

{r μ - r^3 σ, r}

but I am pretty sure that the right answer should be

{r μ - r^3 σ, 1}

Where is the error?


Mathematica's answer is correct and consistent with your expectations, but you are not accounting for the basis of the vector field.

TransformedField transforms a vector field between two coordinate systems and bases. In this case, it is converting from $f(x,y)\hat x+g(x,y)\hat y$ to the same geometrical vector field expressed as $u(r,\theta)\hat r + v(r,\theta) \hat \theta$. Mathematica's answer can therefore be interpreted as saying $$\left(μ x_1 - x_2 - σ x_1 (x_1^2 + x_2^2)\right)\hat x + \left( x_1 + μ x_2 - σ x_2 (x_1^2 + x_2^2)\right)\hat y = \left(r μ - r^3 σ\right)\hat r + r \hat\theta$$

Notice that the expressions $r'$ and $\theta'$ don't appear anyhwere. Those are dynamical quantities, not geometrical ones (unless working in the jet bundle, but let's not go there). Also notice the hats! As stated in the documentation, TransformedField assumes inputs are in an orthonormal basis, and returns outputs in the same basis. That will be important for later on.

Now, you are dealing with a differential equation, and based on your expected answer I'll assume what you have is a first-order system and you are transforming the associated vector field (AKA the "right-hand side"). Finding solutions means find the integral curves of the vector field. This gives as a nice relationship between the geometrical variables and the dynamical ones, except that this relationship is of necessity expressed in the so called coordinate basis, written $(r',\theta') = a \frac{\partial}{\partial r} + b \frac{\partial}{\partial \theta}$. So to get the answer expressed in your desired basis, we need the relationship between the coordinate and orthonormal basis vectors. As is covered in books on vector calculus (and elsewhere), the relationsip is $\hat r = \frac{\partial}{\partial r}$ and $\hat \theta = \frac{1}{r}\frac{\partial}{\partial \theta}$. Substituting this into the answer Mathematica gave above, we get $$\left(r μ - r^3 σ\right)\hat r + r \hat\theta = \left(r μ - r^3 σ\right) \frac{\partial}{\partial r} + (1) \frac{\partial}{\partial \theta},$$ which is the answer you expected.

| improve this answer | |
  • 3
    $\begingroup$ Thank you! That makes sense. The documentation for TransformedField does not provide sufficient detail about what the function is actually doing. $\endgroup$ – rpa Mar 8 '19 at 2:38
  • $\begingroup$ So TransformedField returns the coordinates with respect to some orthogonalization of the coordinate vector fields? That is just not logical and not what a differential geometer would call the "transformed vector field". It is not even uniquely defined if one happens to have nonorthogonal coordinates unless one prescribes the algorithm for performing the orthogonalization. The nomencalture here is super dangerous because it suggests TransformedField were doing something completely different! $\endgroup$ – Henrik Schumacher Mar 30 at 5:52

We can define our own functions.

From $x',y'$ to $r',\theta'$, we derive: $$ r' = \left(\sqrt{x^2 +y^2} \right)' = \frac{(x^2 +y^2)'}{2 \sqrt{x^2 +y^2}}=\frac{xx' +yy'}{r} $$ and $$ \theta' = \left(\arctan \frac{y}{x} \right)' = \frac{(y/x)'}{1+(y/x)^2} = \frac{y' x -x' y}{r^2}. $$

First, we define

rdot[x1_, x2_] := (x1 (μ x1 - x2 - σ x1 (x1^2 + x2^2)) + x2 (x1 + μ x2 - σ x2 (x1^2 + x2^2)))/r

We now make the substitution and simplify

rdot[r Cos[t], r Sin[t]] // FullSimplify

This yields (matches Mathematica)

$$r' = \mu r-r^3 \sigma$$

We now do the same for the other

thetadot[x1_,x2_]:=(x1 (x1+μ x2-σ x2 (x1^2+x2^2)) - x2(μ x1-x2-σ x1 (x1^2+x2^2)))/r^2

We now make the substitution and simplify

thetadot[r Cos[t], r Sin[t]] // FullSimplify

This yields (does not match Mathematica, but see accepted answer)

$$\theta'= 1$$

I have asked this question before on this site in two different ways and have never gotten an answer that resolves the matter, but that could just be my denseness as the accepted answer now shows!


I have received a response from Wolfram Support and wanted to post it as others may find it as helpful as I did.

Thank you for contacting Wolfram Technical Support.

I want to highlight a couple more pieces of information that you might find useful.

There is a more comprehensive tutorial on how Mathematica handles coordinate transformations, and particularly how it handles basis transformations for vectors, available at


Under the section "Relating Orthonormal Bases", the tutorial highlights that the transformation of vectors is given by an orthonormal rotation matrix. In particular, this guarantees that a vector will have the same norm in any coordinate system. So, the vector {0,1,0} in the {r, th, phi} coordinate system must have a norm 1 in the {x,y,z} coordinate system.

In the question you posted on StackExchange, the norm of the original vector is

r Sqrt[1 + (\[Mu] - r^2 \[Sigma])^2]

(after the change of variables from {x1,x2} to {r,theta} has been made).

This highlights that the proposed solution

{r ? - r^3 ?, 1}

cannot be correct, as it has a different norm. On the other hand,

{r ? - r^3 ?, r}

has the same norm.

Please let me know if you have any further questions.


Wolfram Technology Group http://www.wolfram.com/support/

| improve this answer | |
  • 1
    $\begingroup$ Have you reported it to the Wolfram tech support? $\endgroup$ – Alexey Popkov Mar 7 '19 at 22:48
  • $\begingroup$ @AlexeyPopkov: I have not. I have had many issues with it when transforming between different methods. These days, I don't trust it and just create my own transformation rules to do it. $\endgroup$ – Moo Mar 7 '19 at 22:52
  • $\begingroup$ It is worth to write them about it in order to get it finally fixed. You can even write a short letter to support@wolfram.com with a link to this post. $\endgroup$ – Alexey Popkov Mar 7 '19 at 22:55
  • $\begingroup$ @AlexeyPopkov: I sent them an email per your suggestion. $\endgroup$ – Moo Mar 7 '19 at 23:01

My slightly different method matches Mathematica.

aCartToCyl[{ax_, ay_}] := {ax Cos[ϕ] + ay Sin[ϕ], ay Cos[ϕ] - ax Sin[ϕ]}

aCartToCyl[{μ x1 - x2 - σ x1 (x1^2 + x2^2), 
   x1 + μ x2 - σ x2 (x1^2 + x2^2)}] // Simplify;

% /. {x1 -> r Cos[ϕ], x2 -> r Sin[ϕ]} // Simplify
(*{μ r - r^3 σ, r}*)
| improve this answer | |

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.