Узнайте, моделирует ли образец данных линейный, полиномиальный, экспоненциальный или логарифмический рост с Ruby?

Есть ли библиотека для ruby, которая помогает мне выяснить, является ли выборка значений x моделью линейного, полиномиального, экспоненциального или логарифмического роста?

лайк:

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

он должен поддерживать некоторую нечеткость, то есть, если образец содержит [1,2,2,8,4], линейная зависимость, однако, должна быть распознана.

большое спасибо вам.

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

РЕДАКТИРОВАТЬ: добавление в нечеткий фактор. Я просто вставил случайный, изменить из-за требований.

Другие вопросы по тегам