找出样本数据是否使用Ruby模拟线性,多项式,指数或对数增长?

时间:2014-05-19 12:08:32

标签: ruby pattern-recognition

是否有一个红宝石库,它支持我找出值的样本x是否为线性,多项式,指数或对数增长?

像:

[1,2,3,4].linear? => true
[1,2,4,8].exponential? => true

它应该支持一种模糊性,即如果样本包含[1,2,2.8,4],则应该识别线性关系。

非常感谢你。

1 个答案:

答案 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
编辑:添加模糊因子。我只是随意添加一个,因需求而改变。