# Express a vector field in terms of a frame

I have a set of 4 vector fields that form a frame, I have defined them as

N = Manifold(4, 'N')
Y.<x,y,k,t> = N.chart()
F = Y.frame()
X_1 = cos(k)*F + sin(k)*F + (-y/2*cos(k) + x/2*sin(k))*F
X_2 = -sin(k)*F + cos(k)*F + (x/2*cos(k) + y/2*sin(k))*F
X_3 = F
b = var('b', domain='real')
assume(2 > b, b >= 0)
X_4 = F - b*F


Now I want to calculate their Lie bracket and express it in terms of these vectors fields, for example the following gives [X_2, X_4], and I would like that written in terms of the {X_1, X_2, X_3, X_4}, in this case the output should be X_1.

vw = X_2.bracket(X_4)
vw
vw.display()


In general, I would like to know, given a vector field V in the original frame, how it can be expressed in terms of {X_1, X_2, X_3, X_4}. Many thanks.

edit retag close merge delete

Sort by » oldest newest most voted

It suffices to declare (X_1, X_2, X_3, X_4) as a vector frame on the manifold and to pass it as argument of display:

XF = N.vector_frame(('X_1', 'X_2', 'X_3', 'X_4'), (X_1, X_2, X_3, X_4),
symbol_dual=('X^1', 'X^2', 'X^3', 'X^4'))
vw = X_2.bracket(X_4)
vw.display(XF)


yields

X_1


Type N.vector_frame? for more details; see also vector_frame online documentation.

Remark: if you construct the manifold N with the argument start_index=1, i.e.

N = Manifold(4, 'N', start_index=1)


the call to vector_frame can be much abridged:

XF = N.vector_frame('X', (X_1, X_2, X_3, X_4))

more