Matlab函数,可执行(0:N-1)/N*M
我想生成20个均匀分布的角度。以下是两个不太整洁的解决方案:Matlab函数,可执行(0:N-1)/N*M,matlab,Matlab,我想生成20个均匀分布的角度。以下是两个不太整洁的解决方案: n = 20; % unnecessary line angles = linspace(0,2*pi,n+1); angles = angles(1:end-1) % intention unclear angles = (0:n-1)/n * 2*pi 是否有类似linspace的函数可以更好地实现这一点?linspace是用Matlab编写的(即,它不是内置函数)。您可以轻松地修改它的代码,以便不生成最后一个元素,并将其另
n = 20;
% unnecessary line
angles = linspace(0,2*pi,n+1);
angles = angles(1:end-1)
% intention unclear
angles = (0:n-1)/n * 2*pi
是否有类似
linspace
的函数可以更好地实现这一点?linspace
是用Matlab编写的(即,它不是内置函数)。您可以轻松地修改它的代码,以便不生成最后一个元素,并将其另存为一个函数
事实上,如果您看到linspace
的代码,您会注意到最后一个元素必须被特别附加。所以你的直觉是对的:不包含最后一个元素更“自然”
在下面的代码中,我将修改后的三行代码与原始代码进行比较
function y = linspace2(d1, d2, n)
if nargin == 2
n = 100;
end
n = double(n+1); %// modified line
%// Originally: n = double(n);
n1 = floor(n)-1;
vec = 0:n-2;
if isinf(d2 - d1)
y = d1 + (d2/n1).*vec - (d1/n1).*vec; %// modified line
%// Originally: y = [d1 + (d2/n1).*vec - (d1/n1).*vec, d2];
else
y = d1 + (vec.*(d2-d1)/n1); %// modified line
%// Originally: y = [d1 + (vec.*(d2-d1)/n1), d2];
end
我认为你做得很好,这就是方法。如果您非常愿意,可以使用这样的一行linspace:
angles=linspace(0,2*pi-(2*pi/n),n)
angles=linspace(0,2*pi,n)有什么问题?或者您希望n个角度包括0但不包括2*pi?在这种情况下,您的两行(不必要的行)解决方案可能是最佳的。实际上,我认为您标记的“意图不明确”是所有这些解决方案中最清晰的(对于任何有少量Matlab经验的人来说)。坦白说,其余的似乎有点奇怪。