当k不等于j时计算a(k)+ a(j)

时间:2019-02-11 05:50:41

标签: matlab loops vector sum

给定向量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

如何修改代码以获得所需的结果?

1 个答案:

答案 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]