# Multiplying a vector to a list

Let's say I have a list of forms given by

U = Manifold(4, 'U')
X.<x, y, z, w> = U.chart()
f = U.diff_form(3, 'f')
f[0, 1, 2] = x^2
g = U.diff_form(3, 'g')
g[0, 1, 2] = y^2
h = U.diff_form(3, 'g')
h[0, 1, 2] = z^3
List = [f, g, h]


So I have a list of 3 elements, each a 3-form.

Let's assume I have a list of vectors given by

ListofVectors = [(0, 1, 1), (0, 2, 1), (1, 2, 3)]


I want to do a dot product but the problem is Sage won't let me make List into a vector so I can do like

List.dot_product(ListofVectors[i]) for i < len(ListforVectors)


Basically, I want a new list with [g + h, 2*h + g, f + 2*g + 3*h]. Is there a way to dot product a list of forms with a list of vectors? Again, I think the main issue is I can't turn List into a vector for the dot product function to make sense.

edit retag close merge delete

Sort by » oldest newest most voted The command

S = [sum(a*b for (a,b) in zip(List, v)) for v in ListofVectors]


will return what you want, although it won't be printed how you want:

sage: S
[3-form on the 4-dimensional differentiable manifold U,
3-form on the 4-dimensional differentiable manifold U,
3-form on the 4-dimensional differentiable manifold U]
sage: S == g + h
True
sage: S == 2*g + h
True

more

For a more Sage oriented way, I tried to build the module generated by f, g and h. using U.diff_form_module(3).basis('e', from_family=[f, g, h]), but it returns a KeyError in a cached method. Is it not a valid approach?

I think from my previous questions, the command show(LatexExpr('[' + ','.join(latex(f.display()) for f in S) + ']')) works.