Ask Your Question

Matrix multiplication with a vector in EuclideanSpace

asked 2021-01-29 01:25:10 +0200

curios_mind gravatar image

updated 2022-10-05 14:31:55 +0200

FrédéricC gravatar image


Oversimplified version of my question is "How can I multiply a vector with a matrix?"

vf=E.vector_field([x*y,x^2,z**2]) # the components are for testing purposes

M=Matrix(RR,3,3);M[:]=1 # this is just a test
# Neither this
# nor this works

The only work around I could think of is,2,1)))

or directly on the vector field

v=vector([v[0].expr(), v[1].expr(), v[2].expr()])

With this approach I have to put the transformed components back in the vector field defined within EuclideanSpace.

I would like to use EuclideanSpace to work with vectors.

Is there an easy way to handle this? Basically I am looking for an easy way to transform a vector field defined in EuclideanSpace?

Thanks in advance for your help.

edit retag flag offensive close merge delete

1 Answer

Sort by » oldest newest most voted

answered 2021-01-29 10:43:08 +0200

eric_g gravatar image

You have to convert the matrix M to an endomorphism of the Euclidean space and apply the latter to the vector field. Given the canonical identification between endomorphisms and tensors of type (1,1), the conversion is performed as follows:

A = E.tensor_field(1, 1, M)

Here is the full example:

sage: E.<x,y,z> = EuclideanSpace(start_index=0)                                                       
sage: vf = E.vector_field([x*y, x^2, z**2])                                                             
sage: M = Matrix(RR, 3, 3); M[:] = 1                                                                
sage: A = E.tensor_field(1, 1, M)  
sage: A                                                                                             
Tensor field of type (1,1) on the Euclidean space E^3                                  
sage: A[:]                                                                                          
[1 1 1]
[1 1 1]
[1 1 1]
sage: A(vf)                                                                                         
Vector field on the Euclidean space E^3
sage: A(vf).display()                                                                               
(x^2 + x*y + z^2) e_x + (x^2 + x*y + z^2) e_y + (x^2 + x*y + z^2) e_z
sage: A(vf)[:]                                                                                      
[x^2 + x*y + z^2, x^2 + x*y + z^2, x^2 + x*y + z^2]

Note that the action of the endomorphism A onto the vector field vf is obtained by A(vf) and not by A*vf, which would perform a tensor product and would yield a tensor field of type (2, 1).

Note also that if the matrix M is invertible, you may perform the conversion simply as

A = E.automorphism_field(M)
edit flag offensive delete link more


Thank you very much. This really helped and saved me from a lot of trouble.

curios_mind gravatar imagecurios_mind ( 2021-01-29 14:26:30 +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: 2021-01-29 01:25:10 +0200

Seen: 322 times

Last updated: Jan 29 '21