写作有什么好处
t = linspace(0,20,21)
在
t = 0:1:20
我理解前者会产生一个矢量,就像第一个那样
任何人都可以说明linspace
对t = 0:1:20
有用的情况吗?
答案 0 :(得分:20)
它不仅仅是可用性。虽然文档说:
linspace
函数生成线性间隔矢量。它是 类似于冒号操作符:但是可以直接控制 点数。
它是相同的,linspace
的主要区别和优势是它生成具有所需长度(或默认值100)的整数的向量,然后将其缩放到期望的范围。 :
冒号直接按增量创建向量。
想象一下,您需要为直方图定义bin边缘。特别是你需要特定的边缘0.35
正好在它的正确位置:
edges = [0.05:0.10:.55];
X = edges == 0.35
edges = 0.0500 0.1500 0.2500 0.3500 0.4500 0.5500
X = 0 0 0 0 0 0
没有定义正确的bin边缘,但是:
edges = linspace(0.05,0.55,6); %// 6 = (0.55-0.05)/0.1+1
X = edges == 0.35
edges = 0.0500 0.1500 0.2500 0.3500 0.4500 0.5500
X = 0 0 0 1 0 0
一样。
嗯,它基本上是一个浮点问题。 linspace
可以避免哪些可以,因为整数的单除法并不那么精细,比如浮点数的累积和。但正如马克·狄金森在评论中指出的那样:
您不应该依赖任何计算值正是您所期望的。这不是linspace的用途。在我看来,问题是你有多大可能得到浮点问题,你可以减少它们的概率,或者设置容差有多小。使用linspace 可以降低发生这些问题的可能性,但它不是安全性。
这是linspace
的代码:
n1 = n-1
c = (d2 - d1).*(n1-1) % opposite signs may cause overflow
if isinf(c)
y = d1 + (d2/n1).*(0:n1) - (d1/n1).*(0:n1)
else
y = d1 + (0:n1).*(d2 - d1)/n1
end
总结:linspace
和冒号在执行不同任务时是可靠的。 linspace
尝试确保(顾名思义)线性间距,而colon
尝试确保对称性
在你的特殊情况下,当你创建一个整数向量时,linspace
的没有优势(除usability之外),但是当它涉及浮点时细腻的任务,可能有。
The answer of Sam Roberts提供了一些其他信息并澄清了更多内容,包括MathWorks regarding the colon operator的一些声明。
答案 1 :(得分:9)
linspace
和冒号操作员做不同的事情。
linspace
创建一个指定长度的整数向量,然后使用除法将其缩小到指定的区间。这样就可以确保输出向量尽可能线性间隔。
冒号运算符将增量添加到起点,并从终点减去减量以达到中间点。通过这种方式,它可以确保输出向量尽可能对称。
这两种方法因此有不同的目的,并且通常会给出非常不同的答案,例如
>> a = 0:pi/1000:10*pi;
>> b = linspace(0,10*pi,10001);
>> all(a==b)
ans =
0
>> max(a-b)
ans =
3.5527e-15
然而,在实践中,除非您对微小的数字细节感兴趣,否则差异往往影响不大。当容易表达间隙的数量时,我发现linspace
更方便,而当增量容易表达时,我发现冒号运算符更方便。
有关冒号运算符背后算法的更多详细信息,请参阅此MathWorks technical note。有关linspace
的更多详细信息,您只需输入edit linspace
即可查看其确切内容。
答案 2 :(得分:7)
linspace
在您知道所需的元素数量而不是"步骤"的大小时非常有用。它们之间。因此,如果我说在0
和2*pi
之间制作一个包含360个元素的向量作为一个人为的例子它将会是
linspace(0, 2*pi, 360)
或者如果您刚刚使用冒号操作符,则必须手动计算步长:
0:(2*pi - 0)/(360-1):2*pi
linspace
更方便
对于简单的真实世界应用,请参阅此答案linspace
有助于创建custom colour map