2014-02-08 65 views
0

我想在MatLab的for循環內做一些基本的算術運算。在Matlab中使用for循環的一元運算

基本上我想複製和操作每個元素一個接一個。首先,我想從每個元素中減去3.6:testDataMean,將每個元素提高到2的功率,然後總結每個變量。最後劃分變量s5sizeOfTestData

這應該計算大約〜1.05。

testData變量是含有3, 4, 2, 5, 4

s = 0; 

for k = 1:sizeTestData 
    p = testData(k); 
    q = p - testDataMean; 
    r = q^2; 
    s = s + r; 
    s/5; 

end 

這個循環實際上在最後一行s = s + r引發錯誤的數的1×5載體。我知道我可以在大多數情況下使用sum函數在相同大小的向量上運行,但在for循環的上下文中我不確定。

+0

是什麼錯誤? 「矩陣尺寸必須一致」? –

+0

對不起,它說,「未定義的函數或變量''' – user1574598

+0

那麼,你有你的答案。把's = 0'放在循環前面。 –

回答

3

請注意,sum(s)/numel(s)的定義與mean(s)相同。

循環免費方法:

testData = [3, 4, 2, 5, 4] 
q = testData - mean(testData); 
s = mean(q.^2); 
s = 1.0400 

一行程序:

s = mean((testData-mean(testData)).^2) 
s = 1.0400 

和你最初的方法:

(後bug修復)

testData = [3, 4, 2, 5, 4] 

s = 0; 
sizeTestData = length(testData); 
testDataMean = mean(testData); 

for k = 1:sizeTestData 
    p = testData(k); 
    q = p - testDataMean; 
    r = q^2; 
    s = s + r; 
end 
s = s/numel(s); 
s = 1.0400 
+0

感謝您的回覆。對不起,我錯過了最後的一個關鍵點,即將總和變量's'除以'5'。我編輯了我的原始帖子以適應。 – user1574598

+0

謝謝,我會給你的解決方案一個嘗試,但是,這就是我想要的。我只是在練習RMSE(均方根誤差)的概念。 – user1574598

+0

@ user1574598:高效編程Matlab非常關注儘可能避免循環。因此,丹尼爾的單線性不僅僅是一種,而且是計算RMSE的Matlab方法。除了它可以做得更短:'s = var(testData,1)';-) –