Borrar filtros
Borrar filtros

Use of tensorprod function to compute multilinear forms

6 visualizaciones (últimos 30 días)
Zeno Pavanello
Zeno Pavanello el 21 de Mayo de 2024
Editada: Matt J el 29 de Mayo de 2024
Hi everyone,
I have to compute the multilinear form of a tensor and a vector. Suppose for example we have a 4-dimensional tensor A and a vector v. The 4-linear form is the multiplication of A by v 4 times. The only way that I found to do this is to use "for" loops. I think there must be a way to use the "tensorprod" function to perform the operation more efficiently but I can't find it. Thank you in advance to anyone who can help.
Cheers
n = 3;
A = rand(n,n,n,n);
v = rand(n,1);
for j = 1:n
for k = 1:n
G(:,k,j) = squeeze(v'*A(:,:,k,j));
end
end
for j = 1:n
J(:,j) = squeeze(v'*G(:,:,j));
end
res = v'*J*v;

Respuestas (3)

Matt J
Matt J el 21 de Mayo de 2024
Editada: Matt J el 21 de Mayo de 2024
n = 3;
A = rand(n,n,n,n);
v = rand(n,1);
J=pagemtimes(v',pagemtimes(A,v));
res=v'*reshape(J,[n,n])*v
res = 2.4327

Matt J
Matt J el 21 de Mayo de 2024
Editada: Matt J el 29 de Mayo de 2024
res=A;
while ~isvector(res)
res=pagemtimes(v',squeeze(res));
end
res=res*v

Catalytic
Catalytic el 21 de Mayo de 2024
res=A;
for i=1:ndims(A)
res = tensorprod(res,v,1);
end
res

Categorías

Más información sobre Introduction to Installation and Licensing en Help Center y File Exchange.

Productos


Versión

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by