Ask Your Question

Confused about covariant derivatives and tensors in SageMath

asked 2024-02-27 17:37:56 +0200

AKGSage gravatar image

updated 2024-02-27 17:43:07 +0200

I'm trying to calculate covariant derivatives of tensor fields in SageMath, I established the metric connection using g.connection(). But I cannot find any specific method to calculate the covariant derivatives unlike Lie derivative which is an inbuilt method. I looked up documentations and I found that I have to apply the connection (which is just the christoffel symbol) to the tensor field to calculate its covariant derivative. Is that the correct way or is there an inbuilt method that I'm missing? I tried diff() to calculate partial derivative of a tensor defined on a chart on a manifold but it is not working.

So ultimately I want to know the correct method to calculate partial and covariant derivatives of vector fields and tensors on a manifold.

On a related note, I want to know how to save a tensor quantity which I transformed from one coord to another using Tensor.display_comp(chart=differentOne). This method seems to take the original and just display the terms in a different coord system, how do I save the transformed one as a different tensor defined on the differentOnechart?

Please let me know. Thanks in advance for responding!

edit retag flag offensive close merge delete

1 Answer

Sort by » oldest newest most voted

answered 2024-02-28 11:02:20 +0200

eric_g gravatar image

updated 2024-02-28 11:20:08 +0200

SageMath's covariant derivatives are documented at and . See also examples of use in cell 49 of this notebook: and in cell 37 of that one: .

As you can see, the covariant derivative of a tensor field T with respect to a given affine connection nabla is obtained by nabla(T). Note that the last index of the output is the derivative index, e.g. for a tensor field of type (1,1), nabla(T)[i,j,k] stands for $nabla_k T^i_{\ \ j}$.

The concept of partial derivative is relative to a given coordinate chart and therefore does not apply to tensor fields, which are independent of any chart. It is meaningful only for components of a tensor field w.r.t. a chart and it is then accessible via the method diff. Here is example involving both covariant and partial derivatives:

sage: M.<x,y> = EuclideanSpace()
sage: g = M.metric()
sage: nabla = g.connection()
sage: v = M.vector_field(-y, x, name='v')
sage: v.display()
v = -y e_x + x e_y
sage: Dv = nabla(v)   # covariant derivative
sage: Dv
Tensor field nabla_g(v) of type (1,1) on the Euclidean plane E^2
sage: Dv.display()
nabla_g(v) = -e_x⊗dy + e_y⊗dx
sage: vx = v[1]; vx   
sage: vx.diff(x)   # partial derivative of component vx w.r.t x 
sage: vx.diff(y)  # partial derivative of component vx w.r.t y 
sage: diff(vx, y)  # equivalent to above
edit flag offensive delete link more


Thanks a lot! This is very helpful. It would be great if you can also explain how to save a coord transformed tensor as a separate tensor. I tried saving it into a variable but Sage considers it to be a Formatted expansion and not a tensor in itself. Please let me know.

AKGSage gravatar imageAKGSage ( 2024-02-29 09:41:15 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2024-02-27 17:37:56 +0200

Seen: 256 times

Last updated: Feb 28