我应该为p的大值计算这个公式,所以4个嵌套循环使我的代码非常慢并且不适用。如果有人能帮助我使用sum和其他合适的matlab命令更好地实现,我将非常感谢! 的 K(I,J)=总和(总和(A(M)* B(N)* A(I,J,M,N)中,m = 1:P)中,n = 1:P); i,j,m,n - > 1:p A是4D矩阵,a,b是向量。 感谢。
答案 0 :(得分:0)
我可以摆脱2个for
循环。也许这个网站上的一个MATLAB向导可以做得更好。
p = 3;
A = rand(p, p, p, p)
a = rand(p, 1)
b = rand(p, 1)
% I think your original code does something like this.
K1 = zeros(p, p);
for n = 1: p
for m = 1: p
for j = 1: p
for i = 1: p
K1(i, j) = K1(i, j) + a(m) * b(n) * A(i, j, m, n);
end
end
end
end
K1
% This gives the same result, with half the loops.
K2 = zeros(p, p);
for n = 1: p
for m = 1: p
K2 = K2 + a(m) * b(n) * A(:,:,m,n);
end
end
K2
% Verify that the two answers are the same.
all(K1(:) == K2(:))