做(0:N-1)/ N * M的Matlab函数

时间:2014-02-09 09:42:54

标签: 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的函数以更好的方式执行此操作?

1 个答案:

答案 0 :(得分:0)

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