Use of tensorprod function to compute multilinear forms

조회 수: 5 (최근 30일)
Zeno Pavanello
Zeno Pavanello 2024년 5월 21일
편집: Matt J 2024년 5월 29일
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

카테고리

Help CenterFile Exchange에서 Linear Algebra에 대해 자세히 알아보기

제품


릴리스

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by