Filter löschen
Filter löschen

Use of tensorprod function to compute multilinear forms

21 Ansichten (letzte 30 Tage)
Zeno Pavanello
Zeno Pavanello am 21 Mai 2024
Bearbeitet: Matt J am 29 Mai 2024 um 11:19
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;

Antworten (3)

Matt J
Matt J am 21 Mai 2024
Bearbeitet: Matt J am 21 Mai 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 am 21 Mai 2024
Bearbeitet: Matt J am 29 Mai 2024 um 11:19
res=A;
while ~isvector(res)
res=pagemtimes(v',squeeze(res));
end
res=res*v

Catalytic
Catalytic am 21 Mai 2024
res=A;
for i=1:ndims(A)
res = tensorprod(res,v,1);
end
res

Kategorien

Mehr zu Introduction to Installation and Licensing finden Sie in Help Center und File Exchange

Produkte


Version

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by