2016-03-04 88 views
0

我必須在matlab中循環做類似的計算,但給出不同的結束值。

在第一代碼我有gaven陣列 '' THETA '' 與初始值和下面的代碼可以作爲Matlab輸出對於相同類型的代碼不同

for i=1:m 
    for j=1:n 
     sum=sum + (theta'*X(j,:)' - y(j))*X(j,i); 
    end 
    theta(i)=(theta(i)-(alpha*sum)/m); 
    sum=0; 
end 

的上面的代碼輸出是340403.617738,109912.678489,-5931.109115


在第二個代碼中,我有初始值的gaven數組''theta'',但是我已經初始化''theta_b''等於''theta''另一個數組,我做的所有更改都是數組''theta_b''和最後,我將''theta_b''的值指定給't'赫塔'。

theta_b=theta; 
for i=1:m 
    for j=1:n 
     sum=sum + (theta'*X(j,:)' - y(j))*X(j,i); 
    end 
    theta_b(i)=(theta(i)-(alpha*sum)/m); 
    sum=0; 
end 
theta=theta_b; 

的上述代碼的輸出是340403.617738,110014.524234,-6046.767912


因爲兩個以上的代碼shouls工作方式相同,爲什麼輸出是不同的。 由於

+2

不要使用'sum'作爲變量名,那麼你會如何總結'theta'中的值? 'sum(theta)'將成爲baaad。另外:在第二種情況下,你在循環中繼續使用'theta'的舊值。在第一種情況下,你正在逐漸改變'theta'的元素,你在後面的迭代中重用它。這就是爲什麼兩個代碼中的第一個輸出是相同的。 –

回答

1

在第一個循環中,您正在更新theta(i)的值並使用更新的值計算總和。在第二個循環中,你在開頭創建一個theta的副本,並在整個過程中用它來計算總和。新的更改被保存到theta_b(i)中,這不用於計算總和。

相關問題