Ask Your Question

Revision history [back]

If you type

E.spherical_frame?

you get Return the orthonormal vector frame associated with spherical coordinates. So f_spher = E.spherical_frame() is an orthonormal frame; it is therefore correct to get $\mathrm{diag}(1,1,1)$ for the metric components in that frame. What you want is the coordinate frame $(\partial/\partial r, \partial/\partial\theta,\partial/\partial\phi)$. You get the latter via c_spher.frame(). Hence the metric components you are expecting are returned by

g[c_spher.frame(),:]

The link between the two vector frames is displayed by

for v in f_spher:
    show(v.display(c_spher.frame()))

$$e_{ r } = \frac{\partial}{\partial r }$$ $$e_{ {\theta} } = \frac{1}{r} \frac{\partial}{\partial {\theta} }$$ $$e_{ {\phi} } = \frac{1}{r \sin\left({\theta}\right)} \frac{\partial}{\partial {\phi} }$$

If you type

E.spherical_frame?

you get Return the orthonormal vector frame associated with spherical coordinates. So f_spher = E.spherical_frame() is an orthonormal frame; it is therefore correct to get $\mathrm{diag}(1,1,1)$ for the metric components in that frame. What you want is the coordinate frame $(\partial/\partial r, \partial/\partial\theta,\partial/\partial\phi)$. You get the latter via c_spher.frame(). Hence the metric components you are expecting are returned by

g[c_spher.frame(),:]

The link between the two vector frames is displayed by

for v in f_spher:
    show(v.display(c_spher.frame()))

$$e_{ r } = \frac{\partial}{\partial r }$$ $$e_{ {\theta} } = \frac{1}{r} \frac{\partial}{\partial {\theta} }$$ $$e_{ {\phi} } = \frac{1}{r \sin\left({\theta}\right)} \frac{\partial}{\partial {\phi} }$$

PS: you might take a look at this tutorial notebook, and more generaly to the tutorial about vector calculus in Euclidean spaces.