2017-07-15 105 views
0

這是我的第二個問題,所以請告訴我,如果我可以改進問的方式。matlab從數組中減去數組

我有一個角度數組,名爲'度0'。現在我想計算(1 - cos(度))。爲此我使用兩個選項:

方法1:

mincosd0 = 1 - cosd(degree0); 

方法2:

for i=1:size(degree0) 
mincosd0(i) = (1 - cosd(degree0(i))); 
end 

據我瞭解Matlab的工作與陣列的方式,這兩段代碼應該做的一樣的東西。 但是我得到的每種情況(計算mincosd0的概率偏差時)的結果看起來都不一樣,而且我不能說,爲什麼會有差異或者哪種方式是計算這種情況的正確方法。

這是劇情的代碼,但它同樣在這兩種情況下:

r2 = pi/500:2*pi/500:2*pi-pi/500; 
mincosx2 = sort((1-cos(r2))); % locations in the centre of each bin 

[N20,edges20] = histcounts(mincosd0,'NumBins',500,'BinEdges', 0:2/500:2); 
for n = 1:500, prob1cos(n) = N20(n)/numel(degree0); end 
plot (mincosx2,prob1cos); 

如果你非常肯定的是,這必須做同樣的事情,我也很感謝這些信息,然後其他地方有趣的事情正在發生。

謝謝您的時間

回答

1
a = rand(3,1); 
for i = 1:size(a), fprintf('%g ', i); end % gives 1 2 3 as expected 

a = rand(1,3); 
for i = 1:size(a), fprintf('%g ', i); end % gives only 1 

功能大小回報甚至兩個值的向量。你應該使用numel而不是大小作爲循環變量,所以你可以避免這種問題。

順便說一句,這是因爲你使用錯誤的功能。它與減法數組無關。

+0

謝謝你的回答。這可能是一個原因,但我試圖使用numel,並沒有改變。 如果您確定,第一種方法沒有錯誤,我將繼續使用該方法。 – JustMe