是否有一个红宝石库,它支持我找出值的样本x是否为线性,多项式,指数或对数增长?
像:
[1,2,3,4].linear? => true
[1,2,4,8].exponential? => true
它应该支持一种模糊性,即如果样本包含[1,2,2.8,4],则应该识别线性关系。
非常感谢你。答案 0 :(得分:1)
我不知道是否有一个,但写得很简单:
class Array
def linear?
array = self.sort
fuzzy_factor = 0.1 * array[0] # just threw this in as an example fuzzy factor, take your pick.
difference = array[1]-array[0]
!array.each_with_index.reject {|x,i|
i == 0 ||
x < array[i-1] + difference + fuzzy_factor &&
x > array[i-1] + difference - fuzzy_factor }.any?
end
def exponential?
array = self.sort
fuzzy_factor = 0.1 * array[0]
factor = array[1]/array[0]
!array.each_with_index.reject { |x,i| i==0 ||
x <array[i-1]*(factor+fuzzy_factor) &&
x>array[i-1]*(factor-fuzzy_factor)}.any?
end
end
[1,2,3,4].linear?
# true
[1,2,3,5].linear?
#false
[2,4,8,16].exponential?
#true
[2,4,8,16,3].exponential?
#false
编辑:添加模糊因子。我只是随意添加一个,因需求而改变。