Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab函数,可执行(0:N-1)/N*M_Matlab - Fatal编程技术网

Matlab函数,可执行(0:N-1)/N*M

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编写的(即,它不是内置函数)。您可以轻松地修改它的代码,以便不生成最后一个元素,并将其另

我想生成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编写的(即,它不是内置函数)。您可以轻松地修改它的代码,以便不生成最后一个元素,并将其另存为一个函数

事实上,如果您看到
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经验的人来说)。坦白说,其余的似乎有点奇怪。