Hello,
I use the following code to calculate the divergence of a scalar field in spherical coordinates:
E.<x,y,z> = EuclideanSpace() CA = E.cartesian_coordinates(); CA BP.<r, θ,="" ϕ>="E.chart(r"r:[0,+oo)" θ:[0,pi]="" ϕ:[0,2*pi]"="" )="" bp_to_ca="BP.transition_map(CA," [r="" *="" sin(θ)="" *="" cos(ϕ),="" r="" *="" sin(θ)="" *="" sin(ϕ),="" r="" *="" cos(θ)])="" g="E.metric()</p">
E.set_default_chart(BP) E.set_default_frame(BP.frame()) show( g.display() ) show( g.display_comp())
f = E.scalar_field({BP: function('F')(r, θ, ϕ)}, name='f') f.display(BP) f.laplacian().expr(BP).factor()
show(f.gradient().display())
But the result is wrong: grad(f)=∂F∂r∂∂r+∂F∂θr^2∂∂θ+∂F∂ϕr^2sin(θ)^22∂∂ϕ
It must be: grad(f)=∂F∂r∂∂r+∂F∂θr∂∂θ+∂F∂ϕrsin(θ)∂∂ϕ
What am I doing wrong?