给定向量a
,我想分别为每个{{1}计算a(k)+a(j)
的和,其中k
不等于j
}}。我编写了应该执行此操作的代码,但是由于输出与我期望的不同,因此我意识到它无法正常工作。
k
在外循环的1 st 迭代中,当a=[1 2 3 4]
sumj=0;
b=0;
for k=1:4
for j=1:4
if j~=k
sumj = a(k)+ a(j)
end
end
b=b+sumj
end
时,我希望在控制台中使用以下值:
k=1
类似地,在第2 nd 次迭代中,当sumj=a(k)+a(j)=a(1)+a(2)=3
sumj=a(k)+a(j)=a(1)+a(3)=4
sumj=a(k)+a(j)=a(1)+a(4)=5
b=3+4+5=12
时:
k=2
在3 rd 中:
sumj=3
sumj=5
sumj=6
b=3+5+6=14
在第4 :
sumj=4
sumj=5
sumj=7
b=4+5+7=16
但是我得到的不是上面的
sumj=5
sumj=6
sumj=7
b=5+6+7=18
如何修改代码以获得所需的结果?
答案 0 :(得分:1)
我相信这是因为您在最内层的循环中覆盖了sumj
的值而不存储了它。应该是
% Option 1
sumj = sumj + a(k)+ a(j)
% Option 2
sumj = a(k)+ a(j)
b=b+sumj % i.e. right after, not outside the loop.
最后,只需对您的代码进行最少的修改:
a = [1 2 3 4];
for k=1:4
b=0;
for j=1:4
if j~=k
sumj = a(k)+ a(j);
b=b+sumj;
end
end
b
end
此外,我们可以摆脱不必要的sumj
,
a = [1 2 3 4];
for k=1:4
b=0;
for j=1:4
if j~=k
b = b + a(k)+ a(j);
end
end
b
end
或者我们也可以将其矢量化:
b = a + a.'; % This creates a symmetric matrix
b = sum(b - diag(diag(b)),2); % This clears the main diagonal and sums
% b = [12;14;16;18]