这是我的第二个问题,所以请告诉我,我是否可以改进提问方式。
我有一个角度数组,命名为' degree0'。现在我想计算(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);
如果您非常确定,这必须做同样的事情,我也感谢这些信息,然后在其他地方发生了有趣的事情。
感谢您的时间
答案 0 :(得分: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
函数 size 即使对向量也会返回两个值。您应该使用 numel 而不是 size 作为循环变量,这样您就可以避免这种问题。
顺便说一下,这是因为你使用了错误的功能。它与减去数组无关。