MATLAB初始化下一个for循环中的变量

时间:2017-03-05 06:32:14

标签: matlab for-loop initialization

x=[3 1 1 -5 -2 0 1 2 -2 2];
A=[4 2 6; 0 1 -3; -2 5 -2];
B=[-2 3 2; 1 5 5; -3 1 0];

sum=0;
for i=2:3
    sum_j=0;
    for j=1:2
        sum_j=sum_j+A(1,j)*B(j,i);
    end
    sum=sum+A(2,i)*sum_j;
end
fprintf('(c) %g\n',sum);

>> (c) -32

-32是正确的答案。但是,如果我在循环之外初始化sum_j = 0,则返回不同的值。

sum=0;
sum_j=0;
for i=2:3
    for j=1:2
        sum_j=sum_j+A(1,j)*B(j,i);
    end
    sum=sum+A(2,i)*sum_j;
end
fprintf('(c) %g\n',sum);

>> (c) -98

任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

在你的第一个代码中,sum_j在i的循环中重新初始化,在第二个代码中,sum_j在每个循环中携带值。这是您的代码模拟

第一个代码:

sum = 0
i=2:
    sum_j = 0
i=2,j=1
    sum_j = 0 + 4*3 = 12
i=2,j=2
    sum_j = 12 + 2*5 = 22
  sum = 0 + 1*22 = 22
i=3
    sum_j = 0
i=3,j=1
    sum_j = 0 + 4*2 = 8
i=3,j=2
    sum_j = 8 + 2*5 = 18
  sum = 22 + -3*18 = -32

第二个代码

sum = 0
sum_j = 0
i=2:
i=2,j=1
    sum_j = 0 + 4*3 = 12
i=2,j=2
    sum_j = 12 + 2*5 = 22
  sum = 0 + 1*22 = 22
i=3
i=3,j=1
    sum_j = 22 + 4*2 = 30
i=3,j=2
    sum_j = 30 + 2*5 = 40
  sum = 22 + -3*40 = -98