2017-03-05 3 views
0
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 ist eine richtige Antwort. Wenn ich jedoch sum_j = 0 außerhalb der Schleife initialisiere, gibt es einen anderen Wert zurück.MATLAB Initialisierung von Variablen in der nächsten for-Schleife

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 

Kann jemand erklären, warum das passiert?

+0

Dies wird offensichtlich, was geschieht. An erster Stelle setzen Sie sum_j für jedes "i" auf null und an zweiter Stelle nicht. –

Antwort

1

In Ihrem ersten Code wird sum_j in der Schleife für i reinitialisiert und im zweiten Code sum_j trägt den Wert in jeder Schleife. Hier ist eine Simulation Ihres Codes

ersten Code:

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 

Zweiter Code

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 
+0

Großartig !! das erklärt perfekt –

Verwandte Themen