2015-10-16 74 views
0

this question中给出了检查整数的给定向量是否恒定的函数。我的问题是你如何能够扩展到矢量包含浮点数的情况。如何检查带浮点数的向量是否为常量(在Matlab中)?

实施例1:载体A=[1 1 1]

总和(ABS(差异(A)))= 0。矢量是恒定的。

实施例2:矢量B=[pi, 3.1416, 3.141592653589793]

format short,我们得到总和(ABS(差异(B)))= 1.4693e-05。然而,我们可以认为这些数字在format short的准确性范围内相等,因为它们全部读取3.1416。

+0

一个想法是'总和(abs(diff(A)))<(n-1)* eps',其中__具有_n_元素的矢量和_eps_最小的可表示数量(1e-4表示'format short'),但这是不正确的。 – Karlo

回答

1

您可以检查这样的:

if norm(diff(v)) < err 

哪里v是测试向量和err是可接受的最小误差。 如果你想测试,如果它是精确到n小数位,那么你可以这样做:

if norm(diff(v)) < 1e-n 

if range(round(v,n)) == 0 

if all(diff(round(v,n)) == 0) 

要得到相同的结果为format short我们想要检查精度到4位小数,所以n=4

+0

* _... err_)连续元素之间的差异大于(_ Karlo

+1

@MWijnand你应该编辑你的问题,包括一些如何测试它的例子,或者是一些更大的示例向量,它们显示了你在这里描述的内容。 – JacobD

0

如果你只是一轮矢量到4十进制的数字,就可以规避discribed问题:

B=[pi, 3.1416, 3.141592653589793] B=round(B*10000)/10000 sum(abs(diff(B)))

最后一个表达式将返回0

+1

您应该将我的答案标记为正确,而不是发布相同的新答案(如果不是更复杂)。 “循环”功能可以使用第二个输入。 – JacobD

相关问题