【问题标题】:Computing a(k)+a(j) when k is not equal to j [closed]当 k 不等于 j 时计算 a(k)+a(j)
【发布时间】:2019-02-11 05:50:40
【问题描述】:

给定一个向量a,我想计算a(k)+a(j) 的总和,其中k 不等于j,分别为每个k。我编写了应该执行此操作的代码,但由于输出与我的预期不同,我意识到它无法正常工作。

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

在外循环的第 1st 迭代中,当k=1 时,我希望控制台中有这些值:

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

同样,在第 2nd 次迭代中,当k=2:

sumj=3
sumj=5
sumj=6
b=3+5+6=14

在第三

sumj=4
sumj=5
sumj=7
b=4+5+7=16

在第4

sumj=5
sumj=6
sumj=7
b=5+6+7=18

但我得到的不是上面的:

sumj=3,sumj=4,sumj=5,b=5 (b shouldn't be 5,it should be 12)
sumj=3,sumj=5,sumj=6,b=5+6=11 (b shouldn't be 11,it should be 14)
sumj=4,sumj=5,sumj=7,b=5+6+7=18 (b shouldn't be 18,it should be 16)
sumj=5,sumj=6,sumj=7,b=5+6+7+7=25 (b shouldn't be 25,it should be 18)

我应该如何修改代码以获得我想要的结果?

【问题讨论】:

  • 欢迎来到 StackOverflow!您的问题格式错误,很难理解发生了什么。如果你的帖子是正确的formatted,你可以更快地得到答案。 这次我已经为你修复了它,但下次请尽量让你的帖子尽可能清晰易读。另请参阅How to Ask

标签: matlab loops vector sum


【解决方案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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-11
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多