Linspace与范围

时间:2011-04-25 14:20:31

标签: matlab vector

我想知道什么是更好的风格/更高效:

x = linspace(-1, 1, 100);

x = -1:0.01:1;

3 个答案:

答案 0 :(得分:16)

正如Oli Charlesworth所提到的,在linspace中,您将时间间隔[a,b]划分为N个点,而使用:形式时,您从a中走出}具有指定的步长(默认为1),直到达到b

要记住的一件事是,linspace 总是包含终点,而:表单将包含第二个终点,仅当您的步长时如果它在最后一步落在它上面,它就会落空。例如:

0:3:10

ans = 

     0     3     6     9

那就是说,当我使用这两种方法取决于我需要做什么。如果我需要做的就是采样一个具有固定点数的间隔(我不关心步长),我使用linspace

在很多情况下,我不在乎它是否落在最后一点,例如,在使用极坐标时,我不需要最后一点,因为2*pi是与0相同。在那里,我使用0:0.01:2*pi

答案 1 :(得分:11)

与往常一样,使用最适合您的目的,最能表达您的意图。因此,当您知道点数时,请使用linspace;知道间距时使用:

[顺便提一下,你的两个例子并不等同;第二个会给你201分。]

答案 2 :(得分:6)

As Oli already pointed out,当您知道所需要的数字时,通常最容易使用linspace,当您知道间距时colon operator 你想要的元素。

但是,应该注意的是,这两者通常不会给你完全相同的结果。如上所述herehere,这两种方法使用稍微不同的方法来计算向量元素(这里是how the colon operator works的存档描述)。这就是为什么这两个向量不相等的原因:

>> a = 0:0.1:1;
>> b = linspace(0,1,11);
>> a-b

ans =

  1.0e-016 *

  Columns 1 through 8

         0         0         0    0.5551         0         0         0         0

  Columns 9 through 11

         0         0         0

这是floating-point numbers are represented的典型副作用。某些数字不能完全表示(如0.1),并且以不同方式执行相同的计算(即更改数学运算的顺序)会导致结果略有不同,如上所示例。这些差异通常在order of the floating-point precision上,通常可以忽略,但您应该始终意识到它们存在。