2017-01-29 62 views
0

的元素中代表亲近我有一个双矢量:一个双矢量

r = -50 + (50+50)*rand(10,1) 

现在我想最好都在矢量等于高达都说1e-4公差的数字。我想用一个标量s(r)来表示每个r,这样它的值给出了向量质量的一个概念。如果矢量中的所有元素都是相同的,则该矢量是高质量的。我可以轻松地运行for循环像

for i=1:10 
for j=i+1:10 
    check equality upto the tolerance 
end 
end 

但即使如此,我可以不嵌套的内部做计算的for循环来分配代表质量标。有没有更好的方法,例如给定任何矢量r长度n,我可以快速计算出一个表示矢量质量的标量。

回答

1

您的双循环算法有点慢,为O(n ** 2),其中n是矢量的维数。这是一个快速找到向量元素的接近度的方法,可以按照O(n)的顺序完成,只需要通过一个元素。

查找向量元素的最大值和最小值。只需使用两个变量来存储迄今为止的最大值和最小值,并在所有元素中运行一次。最大值和最小值之间的差值称为值range,这些值通常被接受为measure of dispersion。如果这些值完全相等,则范围为零表示完美的质量。如果范围低于1e-4,则该矢量具有可接受的质量。范围越大,平等越差。

代码对于任何给定的语言都很明显,所以我会把它留给你。如果范围仅真正考虑矢量的两个极值,那么您可以使用其他度量变量,例如四分位距离,方差或标准偏差。但范围似乎最符合你的要求。