Use of tensorprod function to compute multilinear forms

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;

답변 (3개)

Matt J
Matt J 2024년 5월 21일
편집: Matt J 2024년 5월 21일
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 2024년 5월 21일
편집: Matt J 2024년 5월 29일
res=A;
while ~isvector(res)
res=pagemtimes(v',squeeze(res));
end
res=res*v
Catalytic
Catalytic 2024년 5월 21일
res=A;
for i=1:ndims(A)
res = tensorprod(res,v,1);
end
res

카테고리

제품

릴리스

R2024a

질문:

2024년 5월 21일

편집:

2024년 5월 29일

Community Treasure Hunt

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

Start Hunting!

Translated by